@@ -164,17 +164,17 @@ def __init__(self,
164
164
parent_node ,
165
165
dbname ,
166
166
host = "127.0.0.1" ,
167
- user = None ,
167
+ username = None ,
168
168
password = None ):
169
169
170
170
# Use default user if not specified
171
- user = user or _default_username ()
171
+ username = username or _default_username ()
172
172
173
173
self .parent_node = parent_node
174
174
175
175
self .connection = pglib .connect (
176
176
database = dbname ,
177
- user = user ,
177
+ user = username ,
178
178
port = parent_node .port ,
179
179
host = host ,
180
180
password = password )
@@ -251,10 +251,17 @@ class NodeBackup(object):
251
251
def log_file (self ):
252
252
return os .path .join (self .base_dir , BACKUP_LOG_FILE )
253
253
254
- def __init__ (self , node , base_dir = None , xlog_method = DEFAULT_XLOG_METHOD ):
254
+ def __init__ (self ,
255
+ node ,
256
+ base_dir = None ,
257
+ username = None ,
258
+ xlog_method = DEFAULT_XLOG_METHOD ):
259
+
255
260
if not node .status ():
256
261
raise BackupException ('Node must be running' )
257
262
263
+ # set default arguments
264
+ username = username or _default_username ()
258
265
base_dir = base_dir or tempfile .mkdtemp ()
259
266
260
267
# create directory if needed
@@ -269,7 +276,8 @@ def __init__(self, node, base_dir=None, xlog_method=DEFAULT_XLOG_METHOD):
269
276
_params = [
270
277
"-D{}" .format (data_dir ),
271
278
"-p{}" .format (node .port ),
272
- "-X" , xlog_method
279
+ "-U{}" .format (username ),
280
+ "-X{}" .format (xlog_method )
273
281
]
274
282
_execute_utility ("pg_basebackup" , _params , self .log_file )
275
283
@@ -782,7 +790,7 @@ def dump(self, dbname, filename=None):
782
790
783
791
return filename
784
792
785
- def restore (self , dbname , filename ):
793
+ def restore (self , dbname , filename , username = None ):
786
794
"""
787
795
Restore database from pg_dump's file.
788
796
@@ -791,9 +799,9 @@ def restore(self, dbname, filename):
791
799
filename: database dump taken by pg_dump (str).
792
800
"""
793
801
794
- self .psql (dbname , filename = filename )
802
+ self .psql (dbname = dbname , filename = filename , username = username )
795
803
796
- def poll_query_until (self , dbname , query ):
804
+ def poll_query_until (self , dbname , query , username = None , max_attempts = 60 , sleep_time = 1 ):
797
805
"""
798
806
Run a query once a second until it returs True.
799
807
@@ -802,16 +810,17 @@ def poll_query_until(self, dbname, query):
802
810
query: query to be executed (str).
803
811
"""
804
812
805
- max_attemps = 60
806
813
attemps = 0
814
+ while attemps < max_attempts :
815
+ res = self .execute (dbname = dbname ,
816
+ query = query ,
817
+ username = username ,
818
+ commit = True )
807
819
808
- while attemps < max_attemps :
809
- ret = self .safe_psql (dbname , query )
810
- # TODO: fix psql so that it returns result without newline
811
- if ret == six .b ("t\n " ):
812
- return
820
+ if res [0 ][0 ]:
821
+ return # done
813
822
814
- time .sleep (1 )
823
+ time .sleep (sleep_time )
815
824
attemps += 1
816
825
817
826
raise QueryException ('Query timeout' )
@@ -836,19 +845,21 @@ def execute(self, dbname, query, username=None, commit=False):
836
845
node_con .commit ()
837
846
return res
838
847
839
- def backup (self , xlog_method = DEFAULT_XLOG_METHOD ):
848
+ def backup (self , username = None , xlog_method = DEFAULT_XLOG_METHOD ):
840
849
"""
841
850
Perform pg_basebackup.
842
851
843
852
Args:
844
- xlog_method: a method for collecting the logs ('fetch' | 'stream')
853
+ username: database user name (str).
854
+ xlog_method: a method for collecting the logs ('fetch' | 'stream').
845
855
846
856
Returns:
847
857
A smart object of type NodeBackup.
848
858
"""
849
859
850
- # NodeBackup will handle this
851
- return NodeBackup (self , xlog_method = xlog_method )
860
+ return NodeBackup (node = self ,
861
+ username = username ,
862
+ xlog_method = xlog_method )
852
863
853
864
def pgbench_init (self , dbname = 'postgres' , scale = 1 , options = []):
854
865
"""
@@ -905,7 +916,9 @@ def connect(self, dbname='postgres', username=None):
905
916
An instance of NodeConnection.
906
917
"""
907
918
908
- return NodeConnection (parent_node = self , dbname = dbname , user = username )
919
+ return NodeConnection (parent_node = self ,
920
+ dbname = dbname ,
921
+ username = username )
909
922
910
923
911
924
def _default_username ():
0 commit comments