@@ -499,21 +499,6 @@ def append_conf(self, filename, string):
499
499
500
500
return self
501
501
502
- def pg_ctl (self , command , params = {}, command_options = []):
503
- """
504
- Runs pg_ctl with specified params. This function is a workhorse
505
- for start(), stop(), reload() and status() functions.
506
- """
507
-
508
- _params = [command ]
509
-
510
- for key , value in six .iteritems (params ):
511
- _params .append (key )
512
- if value :
513
- _params .append (value )
514
-
515
- _execute_utility ("pg_ctl" , _params , self .utils_logname )
516
-
517
502
def status (self ):
518
503
"""
519
504
Check this node's status.
@@ -523,8 +508,8 @@ def status(self):
523
508
"""
524
509
525
510
try :
526
- _params = { " -D": self .data_dir }
527
- self . pg_ctl ( "status " , _params )
511
+ _params = [ "status" , " -D", self .data_dir ]
512
+ _execute_utility ( "pg_ctl " , _params , self . utils_logname )
528
513
return NodeStatus .Running
529
514
530
515
except ExecUtilException as e :
@@ -568,10 +553,13 @@ def get_control_data(self):
568
553
569
554
return out_data
570
555
571
- def start (self , params = {} ):
556
+ def start (self , params = [] ):
572
557
"""
573
558
Start this node using pg_ctl.
574
559
560
+ Args:
561
+ params: additional arguments for _execute_utility().
562
+
575
563
Returns:
576
564
This instance of PostgresNode.
577
565
"""
@@ -594,15 +582,16 @@ def start(self, params={}):
594
582
# choose recovery_filename
595
583
recovery_filename = os .path .join (self .data_dir , "recovery.conf" )
596
584
597
- _params = {
598
- "-D" : self . data_dir ,
599
- "-w" : None ,
600
- "-l" : log_filename ,
601
- }
602
- _params . update ( params )
585
+ _params = [
586
+ "start" ,
587
+ "-D{}" . format ( self . data_dir ) ,
588
+ "-l{}" . format ( log_filename ) ,
589
+ "-w"
590
+ ] + params
603
591
604
592
try :
605
- self .pg_ctl ("start" , _params )
593
+ _execute_utility ("pg_ctl" , _params , self .utils_logname )
594
+
606
595
except ExecUtilException as e :
607
596
def print_node_file (node_file ):
608
597
if os .path .exists (node_file ):
@@ -630,48 +619,53 @@ def print_node_file(node_file):
630
619
631
620
return self
632
621
633
- def stop (self , params = {} ):
622
+ def stop (self , params = [] ):
634
623
"""
635
624
Stop this node using pg_ctl.
636
625
626
+ Args:
627
+ params: additional arguments for _execute_utility().
628
+
637
629
Returns:
638
630
This instance of PostgresNode.
639
631
"""
640
632
641
- _params = {"-D" : self .data_dir , "-w" : None }
642
- _params .update (params )
643
- self .pg_ctl ("stop" , _params )
633
+ _params = ["stop" , "-D" , self .data_dir , "-w" ] + params
634
+ _execute_utility ("pg_ctl" , _params , self .utils_logname )
644
635
645
636
if self .logger :
646
637
self .logger .stop ()
647
638
648
639
return self
649
640
650
- def restart (self , params = {} ):
641
+ def restart (self , params = [] ):
651
642
"""
652
643
Restart this node using pg_ctl.
653
644
645
+ Args:
646
+ params: additional arguments for _execute_utility().
647
+
654
648
Returns:
655
649
This instance of PostgresNode.
656
650
"""
657
651
658
- _params = {"-D" : self .data_dir , "-w" : None }
659
- _params .update (params )
660
- self .pg_ctl ("restart" , _params )
652
+ _params = ["restart" , "-D" , self .data_dir , "-w" ] + params
653
+ _execute_utility ("pg_ctl" , _params ,
654
+ self .utils_logname ,
655
+ write_to_pipe = False )
661
656
662
657
return self
663
658
664
- def reload (self , params = {} ):
659
+ def reload (self , params = [] ):
665
660
"""
666
661
Reload config files using pg_ctl.
667
662
668
663
Returns:
669
664
This instance of PostgresNode.
670
665
"""
671
666
672
- _params = {"-D" : self .data_dir }
673
- _params .update (params )
674
- self .pg_ctl ("reload" , _params )
667
+ _params = ["reload" , "-D" , self .data_dir , "-w" ] + params
668
+ _execute_utility ("pg_ctl" , _params , self .utils_logname )
675
669
676
670
return self
677
671
@@ -958,7 +952,7 @@ def call_initdb(_data_dir):
958
952
raise InitNodeException (e .message )
959
953
960
954
961
- def _execute_utility (util , args , logfile ):
955
+ def _execute_utility (util , args , logfile , write_to_pipe = True ):
962
956
"""
963
957
Execute utility (pg_ctl, pg_dump etc) using get_bin_path().
964
958
@@ -972,14 +966,25 @@ def _execute_utility(util, args, logfile):
972
966
"""
973
967
974
968
with open (logfile , "a" ) as file_out :
975
- # run pg_ctl
969
+ stdout_file = subprocess .DEVNULL
970
+ stderr_file = subprocess .DEVNULL
971
+
972
+ if write_to_pipe :
973
+ stdout_file = subprocess .PIPE
974
+ stderr_file = subprocess .STDOUT
975
+
976
+ # run utility
976
977
process = subprocess .Popen ([get_bin_path (util )] + args ,
977
- stdout = subprocess . PIPE ,
978
- stderr = subprocess . STDOUT )
978
+ stdout = stdout_file ,
979
+ stderr = stderr_file )
979
980
980
- # get result of pg_ctl
981
+ # get result
981
982
out , _ = process .communicate ()
982
- out = out .decode ('utf-8' )
983
+
984
+ if out :
985
+ out = out .decode ('utf-8' )
986
+ else :
987
+ out = ""
983
988
984
989
# write new log entry
985
990
file_out .write ('' .join (map (lambda x : str (x ) + ' ' , [util ] + args )))
0 commit comments