@@ -662,17 +662,19 @@ def reload(self, params=[]):
662662_params = [
663663get_bin_path ("pg_ctl" ),
664664"-D" ,self .data_dir ,
665- "-w" ,# wait
666665"reload"
667666 ]+ params # yapf: disable
668667
669668execute_utility (_params ,self .utils_log_file )
670669
671670return self
672671
673- def promote (self ):
672+ def promote (self , dbname = None , username = None ):
674673"""
675- Promote standby instance to master using pg_ctl.
674+ Promote standby instance to master using pg_ctl. For PostgreSQL versions
675+ below 10 some additional actions required to ensure that instance
676+ became writable and hence `dbname` and `username` parameters may be
677+ needed.
676678
677679 Returns:
678680 This instance of :class:`.PostgresNode`.
@@ -687,7 +689,19 @@ def promote(self):
687689
688690execute_utility (_params ,self .utils_log_file )
689691
690- # Node becomes master itself
692+ # for versions below 10 `promote` is asynchronous so we need to wait
693+ # until it actually becomes writable
694+ if not pg_version_ge ("10" ):
695+ check_query = "SHOW transaction_read_only"
696+
697+ self .poll_query_until (
698+ query = check_query ,
699+ expected = "on" ,
700+ dbname = dbname ,
701+ username = username ,
702+ max_attempts = 0 )# infinite
703+
704+ # node becomes master itself
691705self ._master = None
692706
693707return self