def setup_fake_gparray(): master = Segment.initFromString("1|-1|p|p|s|u|mdw|mdw|5432|/data/master") primary0 = Segment.initFromString("2|0|p|p|s|u|sdw1|sdw1|40000|/data/primary0") primary1 = Segment.initFromString("3|1|p|p|s|u|sdw2|sdw2|40001|/data/primary1") mirror0 = Segment.initFromString("4|0|m|m|s|u|sdw2|sdw2|50000|/data/mirror0") mirror1 = Segment.initFromString("5|1|m|m|s|u|sdw1|sdw1|50001|/data/mirror1") return GpArray([master,primary0,primary1,mirror0,mirror1])
def _setup_gparray(self, hostlist, interface_list, primary_list, primary_portbase, mirror_type, mirror_list, mirror_portbase, dir_prefix): master = Segment(content = -1, preferred_role = 'p', dbid = 0, role = 'p', mode = 's', status = 'u', hostname = 'masterhost', address = 'masterhost-1', port = 5432, datadir = '/masterdir') allrows = [] allrows.append(master) rows = createSegmentRows(hostlist, interface_list, primary_list, primary_portbase, mirror_type, mirror_list, mirror_portbase, dir_prefix) for row in rows: newrow = Segment(content = row.content, preferred_role = 'p' if convert_bool(row.isprimary) else 'm', dbid = row.dbid, role = 'p' if convert_bool(row.isprimary) else 'm', mode = 's', status = 'u', hostname = row.host, address = row.address, port = row.port, datadir = row.fulldir) allrows.append(newrow) gparray = GpArray(allrows) return gparray
def test_host_option_segment_down_is_skipped_succeeds(self): sys.argv = ["gpstop", "-a", "--host", "sdw1"] parser = self.subject.GpStop.createParser() options, args = parser.parse_args() self.primary0 = Segment.initFromString( "2|0|m|p|s|d|sdw1|sdw1|40000|/data/primary0") self.mirror0 = Segment.initFromString( "6|0|p|m|c|u|sdw2|sdw2|50000|/data/mirror0") self.mock_gparray.return_value = GpArray([ self.master, self.primary0, self.primary1, self.primary2, self.primary3, self.mirror0, self.mirror1, self.mirror2, self.mirror3 ]) gpstop = self.subject.GpStop.createProgram(options, args) gpstop.run() log_messages = self.get_info_messages() self.assertEquals(2, self.mock_GpSegStopCmdInit.call_count) self.assertIn( "Targeting dbid %s for shutdown" % [ self.primary1.getSegmentDbId(), self.mirror2.getSegmentDbId(), self.mirror3.getSegmentDbId() ], log_messages) self.assertIn("Successfully shutdown 3 of 8 segment instances ", log_messages)
def setUp(self): # TODO should we mock the set_recovery_cmd_results decorator and not worry about # testing the command results in this test class self.maxDiff = None self.mock_logger = Mock( spec=['log', 'info', 'debug', 'error', 'warn', 'exception']) self.apply_patches([ patch('gpsegrecovery.ModifyConfSetting', return_value=Mock()), patch('gpsegrecovery.start_segment', return_value=Mock()), patch('gpsegrecovery.PgBaseBackup.__init__', return_value=None), patch('gpsegrecovery.PgBaseBackup.run') ]) self.mock_pgbasebackup_run = self.get_mock_from_apply_patch('run') self.mock_pgbasebackup_init = self.get_mock_from_apply_patch( '__init__') self.mock_pgbasebackup_modifyconfsetting = self.get_mock_from_apply_patch( 'ModifyConfSetting') p = Segment.initFromString( "1|0|p|p|s|u|sdw1|sdw1|40000|/data/primary0") m = Segment.initFromString("2|0|m|m|s|u|sdw2|sdw2|50000|/data/mirror0") self.seg_recovery_info = RecoveryInfo(m.getSegmentDataDirectory(), m.getSegmentPort(), m.getSegmentDbId(), p.getSegmentHostName(), p.getSegmentPort(), True, '/tmp/test_progress_file') self.era = '1234_20211110' self.full_recovery_cmd = gpsegrecovery.FullRecovery( name='test full recovery', recovery_info=self.seg_recovery_info, forceoverwrite=True, logger=self.mock_logger, era=self.era)
def setUp(self): self.maxDiff = None self.mock_logger = Mock() self.apply_patches([ patch('gpsegrecovery.start_segment', return_value=Mock()), patch('gppylib.commands.pg.PgRewind.__init__', return_value=None), patch('gppylib.commands.pg.PgRewind.run') ]) self.mock_pgrewind_run = self.get_mock_from_apply_patch('run') self.mock_pgrewind_init = self.get_mock_from_apply_patch('__init__') p = Segment.initFromString( "1|0|p|p|s|u|sdw1|sdw1|40000|/data/primary0") m = Segment.initFromString("2|0|m|m|s|u|sdw2|sdw2|50000|/data/mirror0") self.seg_recovery_info = RecoveryInfo(m.getSegmentDataDirectory(), m.getSegmentPort(), m.getSegmentDbId(), p.getSegmentHostName(), p.getSegmentPort(), False, '/tmp/test_progress_file') self.era = '1234_20211110' self.incremental_recovery_cmd = gpsegrecovery.IncrementalRecovery( name='test incremental recovery', recovery_info=self.seg_recovery_info, logger=self.mock_logger, era=self.era)
def setUp(self): self.mock_logger = Mock( spec=['log', 'info', 'debug', 'error', 'warn', 'exception']) self.mock_conn_val = Mock() self.mock_dburl_val = Mock() self.apply_patches([ patch('gpsegsetuprecovery.dbconn.connect', return_value=self.mock_conn_val), patch('gpsegsetuprecovery.dbconn.DbURL', return_value=self.mock_dburl_val), patch('gpsegsetuprecovery.dbconn.execSQL') ]) p = Segment.initFromString( "1|0|p|p|s|u|sdw1|sdw1|40000|/data/primary0") m = Segment.initFromString("2|0|m|m|s|u|sdw2|sdw2|50000|/data/mirror0") self.seg_recovery_info = RecoveryInfo(m.getSegmentDataDirectory(), m.getSegmentPort(), m.getSegmentDbId(), p.getSegmentHostName(), p.getSegmentPort(), True, '/test_progress_file') self.setup_for_incremental_recovery_cmd = gpsegsetuprecovery.SetupForIncrementalRecovery( name='setup for incremental recovery', recovery_info=self.seg_recovery_info, logger=self.mock_logger)
def setUp(self): self.master = Segment(content=-1, preferred_role='p', dbid=1, role='p', mode='s', status='u', hostname='masterhost', address='masterhost-1', port=1111, datadir='/masterdir') self.primary = Segment(content=0, preferred_role='p', dbid=2, role='p', mode='s', status='u', hostname='primaryhost', address='primaryhost-1', port=3333, datadir='/primary') self.logger = Mock( spec=['log', 'warn', 'info', 'debug', 'error', 'warning', 'fatal']) self.apply_patches([]) self.buildMirrorSegs = GpMirrorListToBuild(toBuild=[], pool=None, quiet=True, parallelDegree=0, logger=self.logger)
def test_pg_rewind_parallel_execution(self): self.apply_patches([ # Mock CHECKPOINT command in run_pg_rewind() as successful patch('gppylib.db.dbconn.connect', return_value=Mock()), patch('gppylib.db.dbconn.execSQL', return_value=Mock()), # Mock the command to remove postmaster.pid as successful patch('gppylib.commands.base.Command.run', return_value=Mock()), patch('gppylib.commands.base.Command.get_return_code', return_value=0), # Mock gplog which is used in RewindSegmentInfo below patch('gppylib.gplog.get_logger_dir', return_value=Mock()), # Mock all pg_rewind commands to be not successful patch('gppylib.commands.base.Command.was_successful', return_value=False), patch('gppylib.commands.base.Command.get_stdout', return_value='Mocking results'), patch('gppylib.commands.base.Command.results', return_value=CommandResult(1, 'stdout:Failed', 'stderr:Failed', True, False)) ]) from gppylib.operations.buildMirrorSegments import GpMirrorListToBuild # WorkerPool is the only valid parameter required in this test # case. The test expects the workers to get a pg_rewind # command to run (and the command should fail to run). g = GpMirrorListToBuild(1, self.pool, 1, 1) rewindInfo = {} p0 = Segment.initFromString( "2|0|p|p|s|u|sdw1|sdw1|40000|/data/primary0") p1 = Segment.initFromString( "3|1|p|p|s|u|sdw2|sdw2|40001|/data/primary1") m0 = Segment.initFromString( "4|0|m|m|s|u|sdw2|sdw2|50000|/data/mirror0") m1 = Segment.initFromString( "5|1|m|m|s|u|sdw1|sdw1|50001|/data/mirror1") rewindInfo[p0.dbid] = GpMirrorListToBuild.RewindSegmentInfo( p0, p0.address, p0.port, "unused_timestamp") rewindInfo[p1.dbid] = GpMirrorListToBuild.RewindSegmentInfo( p1, p1.address, p1.port, "unused_timestamp") rewindInfo[m0.dbid] = GpMirrorListToBuild.RewindSegmentInfo( m0, m0.address, m0.port, "unused_timestamp") rewindInfo[m1.dbid] = GpMirrorListToBuild.RewindSegmentInfo( m1, m1.address, m1.port, "unused_timestamp") # Test1: all 4 pg_rewind commands should fail due the "was_successful" patch failedSegments = g.run_pg_rewind(rewindInfo) self.assertEqual(len(failedSegments), 4) # The returned list of failed segments should contain items of # type gparray.Segment failedSegments.remove(p0) self.assertTrue(failedSegments[0].getSegmentDbId() > 0) # Test2: patch it such that no failures this time patch('gppylib.commands.base.Command.was_successful', return_value=True).start() failedSegments = g.run_pg_rewind(rewindInfo) self.assertEqual(len(failedSegments), 0)
def createGpArrayWith4Primary4Mirrors(self): self.master = Segment.initFromString( "1|-1|p|p|s|u|mdw|mdw|5432|/data/master") self.primary0 = Segment.initFromString( "2|0|p|p|s|u|sdw1|sdw1|40000|/data/primary0") self.primary1 = Segment.initFromString( "3|1|p|p|s|u|sdw1|sdw1|40001|/data/primary1") self.primary2 = Segment.initFromString( "4|2|p|p|s|u|sdw2|sdw2|40002|/data/primary2") self.primary3 = Segment.initFromString( "5|3|p|p|s|u|sdw2|sdw2|40003|/data/primary3") self.mirror0 = Segment.initFromString( "6|0|m|m|s|u|sdw2|sdw2|50000|/data/mirror0") self.mirror1 = Segment.initFromString( "7|1|m|m|s|u|sdw2|sdw2|50001|/data/mirror1") self.mirror2 = Segment.initFromString( "8|2|m|m|s|u|sdw1|sdw1|50002|/data/mirror2") self.mirror3 = Segment.initFromString( "9|3|m|m|s|u|sdw1|sdw1|50003|/data/mirror3") return GpArray([ self.master, self.primary0, self.primary1, self.primary2, self.primary3, self.mirror0, self.mirror1, self.mirror2, self.mirror3 ])
def setup_fake_gparray(): master = Segment.initFromString("1|-1|p|p|s|u|mdw|mdw|5432|/data/master") primary0 = Segment.initFromString( "2|0|p|p|s|u|sdw1|sdw1|40000|/data/primary0") primary1 = Segment.initFromString( "3|1|p|p|s|u|sdw2|sdw2|40001|/data/primary1") mirror0 = Segment.initFromString( "4|0|m|m|s|u|sdw2|sdw2|50000|/data/mirror0") mirror1 = Segment.initFromString( "5|1|m|m|s|u|sdw1|sdw1|50001|/data/mirror1") return GpArray([master, primary0, primary1, mirror0, mirror1])
def _create_gparray_with_2_primary_2_mirrors(self): master = Segment.initFromString( "1|-1|p|p|s|u|mdw|mdw|5432|/data/master") self.primary0 = Segment.initFromString( "2|0|p|p|s|u|sdw1|sdw1|40000|/data/primary0") primary1 = Segment.initFromString( "3|1|p|p|s|u|sdw2|sdw2|40001|/data/primary1") self.mirror0 = Segment.initFromString( "4|0|m|m|s|u|sdw2|sdw2|50000|/data/mirror0") mirror1 = Segment.initFromString( "5|1|m|m|s|u|sdw1|sdw1|50001|/data/mirror1") return GpArray([master, self.primary0, primary1, self.mirror0, mirror1])
def _create_gparray_with_2_primary_2_mirrors(): coordinator = Segment.initFromString( "1|-1|p|p|s|u|cdw|cdw|5432|/data/coordinator") primary0 = Segment.initFromString( "2|0|p|p|s|u|sdw1|sdw1|40000|/data/primary0") primary1 = Segment.initFromString( "3|1|p|p|s|u|sdw2|sdw2|40001|/data/primary1") mirror0 = Segment.initFromString( "4|0|m|m|s|u|sdw2|sdw2|50000|/data/mirror0") mirror1 = Segment.initFromString( "5|1|m|m|s|u|sdw1|sdw1|50001|/data/mirror1") return GpArray([coordinator, primary0, primary1, mirror0, mirror1])
def _create_gparray_with_2_primary_2_mirrors(self): master = Segment.initFromString( "1|-1|p|p|s|u|mdw|mdw|5432|/data/master") self.primary0 = Segment.initFromString( "2|0|p|p|s|u|sdw1|sdw1|40000|/data/primary0") primary1 = Segment.initFromString( "3|1|p|p|s|u|sdw2|sdw2|40001|/data/primary1") self.mirror0 = Segment.initFromString( "4|0|m|m|s|u|sdw2|sdw2|50000|/data/mirror0") mirror1 = Segment.initFromString( "5|1|m|m|s|u|sdw1|sdw1|50001|/data/mirror1") return GpArray([master, self.primary0, primary1, self.mirror0, mirror1])
def _createGpArrayWith2Primary2Mirrors(self): self.master = Segment.initFromString( "1|-1|p|p|s|u|mdw|mdw|5432|/data/master") self.primary0 = Segment.initFromString( "2|0|p|p|s|u|sdw1|sdw1|40000|/data/primary0") self.primary1 = Segment.initFromString( "3|1|p|p|s|u|sdw2|sdw2|40001|/data/primary1") mirror0 = Segment.initFromString( "4|0|m|m|s|u|sdw2|sdw2|50000|/data/mirror0") mirror1 = Segment.initFromString( "5|1|m|m|s|u|sdw1|sdw1|50001|/data/mirror1") return GpArray([self.master, self.primary0, self.primary1, mirror0, mirror1])
def _createGpArrayWith2Primary2Mirrors(self): self.master = Segment.initFromString( "1|-1|p|p|s|u|mdw|mdw|5432|/data/master") self.primary0 = Segment.initFromString( "2|0|p|p|s|u|sdw1|sdw1|40000|/data/primary0") self.primary1 = Segment.initFromString( "3|1|p|p|s|u|sdw2|sdw2|40001|/data/primary1") mirror0 = Segment.initFromString( "4|0|m|m|s|u|sdw2|sdw2|50000|/data/mirror0") mirror1 = Segment.initFromString( "5|1|m|m|s|u|sdw1|sdw1|50001|/data/mirror1") return GpArray([self.master, self.primary0, self.primary1, mirror0, mirror1])
def setUp(self): self.maxDiff = None self.mock_logger = Mock(spec=['log', 'info', 'debug', 'error', 'warn', 'exception']) p = Segment.initFromString("1|0|p|p|s|u|sdw1|sdw1|40000|/data/primary0") m = Segment.initFromString("2|0|m|m|s|u|sdw2|sdw2|50000|/data/mirror0") self.seg_recovery_info = RecoveryInfo(m.getSegmentDataDirectory(), m.getSegmentPort(), m.getSegmentDbId(), p.getSegmentHostName(), p.getSegmentPort(), True, '/tmp/test_progress_file') self.validation_recovery_cmd = gpsegsetuprecovery.ValidationForFullRecovery( name='test validation for full recovery', recovery_info=self.seg_recovery_info, forceoverwrite=True, logger=self.mock_logger)
def setUp(self): self.maxDiff = None self.coordinator = Segment(content=-1, preferred_role='p', dbid=1, role='p', mode='s', status='u', hostname='coordinatorhost', address='coordinatorhost-1', port=1111, datadir='/coordinatordir') self.primary = Segment(content=0, preferred_role='p', dbid=20, role='p', mode='s', status='u', hostname='primaryhost', address='primaryhost-1', port=3333, datadir='/primary') self.mirror = Segment(content=0, preferred_role='m', dbid=30, role='m', mode='s', status='d', hostname='primaryhost', address='primaryhost-1', port=3333, datadir='/primary') gplog.get_unittest_logger() self.apply_patches([ patch( 'gppylib.operations.buildMirrorSegments.GpArray.getSegmentsByHostName' ) ]) self.mock_get_segments_by_hostname = self.get_mock_from_apply_patch( 'getSegmentsByHostName') self.action = 'recover' self.gpEnv = Mock() self.gpArray = GpArray([self.coordinator, self.primary, self.mirror]) self.mock_logger = Mock( spec=['log', 'warn', 'info', 'debug', 'error', 'warning', 'fatal'])
def test_standby_activated_raises_StandbyUnreachable_exception_when_fetching_standby_tli_fails(self, mock_fetch_tli): def mock_fetch_tli_func(self, data_dir, remote_host=None): if "standby" in data_dir: raise ExecutionError("oops", None) return 10 mock_fetch_tli.side_effect = mock_fetch_tli_func gpstart = self.setup_gpstart() gpstart.coordinator_datadir = "/data/coordinator" coordinator = Segment.initFromString("1|-1|p|p|n|u|cdw|cdw|5432|/data/coordinator") standby = Segment.initFromString("6|-1|m|m|n|d|sdw3|sdw3|5433|/data/standby") gpstart.gparray = GpArray([coordinator, standby]) with self.assertRaises(gpstart.StandbyUnreachable): gpstart._standby_activated()
def create_mirror(self, dbid='2', contentid='0', state='n', status='u', host='sdw2'): return Segment.initFromString( '{}|{}|p|p|{}|{}|{}|{}|22000|/mirror/gpseg0'.format( dbid, contentid, state, status, host, host))
def test_standby_activated_returns_true_when_standby_tli_is_before_primary_tli(self, mock_fetch_tli): def mock_fetch_tli_func(self, data_dir, remote_host=None): if "coordinator" in data_dir: return 1 if "standby" in data_dir: return 2 return 3 mock_fetch_tli.side_effect = mock_fetch_tli_func gpstart = self.setup_gpstart() gpstart.coordinator_datadir = "/data/coordinator" coordinator = Segment.initFromString("1|-1|p|p|n|u|cdw|cdw|5432|/data/coordinator") standby = Segment.initFromString("6|-1|m|m|n|d|sdw3|sdw3|5433|/data/standby") gpstart.gparray = GpArray([coordinator, standby]) self.assertTrue(gpstart._standby_activated())
def create_primary(self, dbid='1', contentid='0', state='n', status='u', host='sdw1'): return Segment.initFromString( '{}|{}|p|p|{}|{}|{}|{}|21000|/primary/gpseg0'.format( dbid, contentid, state, status, host, host))
def test_startAll_fails(self, mock1, mock2): result = StartSegmentsResult() failed_segment = Segment.initFromString( "2|0|p|p|s|u|sdw1|sdw1|40000|/data/primary0") result.addFailure(failed_segment, 'reason', 'reasoncode') mock1.return_value.startSegments.return_value = result result = self.buildMirrorSegs._GpMirrorListToBuild__startAll(Mock(), [Mock(), Mock()], []) self.assertFalse(result) self.logger.warn.assert_any_call('Failed to start segment. The fault prober will shortly mark it as down. ' 'Segment: sdw1:/data/primary0:content=0:dbid=2:role=p:preferred_role=p:mode=s:status=u: REASON: reason')
def test_startAll_fails(self, mock1, mock2): result = StartSegmentsResult() failed_segment = Segment.initFromString( "2|0|p|p|s|u|sdw1|sdw1|40000|/data/primary0") result.addFailure(failed_segment, 'reason', 'reasoncode') mock1.return_value.startSegments.return_value = result result = self.buildMirrorSegs._GpMirrorListToBuild__startAll(Mock(), [Mock(), Mock()], []) self.assertFalse(result) self.logger.warn.assert_any_call('Failed to start segment. The fault prober will shortly mark it as down. ' 'Segment: sdw1:/data/primary0:content=0:dbid=2:role=p:preferred_role=p:mode=s:status=u: REASON: reason')
def test_host_option_if_master_running_on_the_host_fails(self): sys.argv = ["gpstop", "-a", "--host", "mdw"] parser = self.subject.GpStop.createParser() options, args = parser.parse_args() self.master = Segment.initFromString( "1|-1|p|p|s|u|mdw|mdw|5432|/data/master") self.primary0 = Segment.initFromString( "2|0|p|p|s|u|sdw1|sdw1|40000|/data/primary0") self.mirror0 = Segment.initFromString( "3|0|m|m|s|u|sdw1|sdw1|50000|/data/mirror0") self.mock_gparray.return_value = GpArray([self.master, self.primary0, self.mirror0]) gpstop = self.subject.GpStop.createProgram(options, args) with self.assertRaisesRegexp(Exception,"Specified host '%s' has the master or standby master on it. This node can only be stopped as part of a full-cluster gpstop, without '--host'." % self.master.getSegmentHostName()): gpstop.run() self.assertEquals(0, self.mock_GpSegStopCmdInit.call_count)
def test_host_option_segment_on_same_host_with_mirror_fails(self): sys.argv = ["gpstop", "-a", "--host", "sdw1"] parser = self.subject.GpStop.createParser() options, args = parser.parse_args() self.master = Segment.initFromString( "1|-1|p|p|s|u|mdw|mdw|5432|/data/master") self.primary0 = Segment.initFromString( "2|0|p|p|s|u|sdw1|sdw1|40000|/data/primary0") self.mirror0 = Segment.initFromString( "3|0|m|m|s|u|sdw1|sdw1|50000|/data/mirror0") self.mock_gparray.return_value = GpArray([self.master, self.primary0, self.mirror0]) gpstop = self.subject.GpStop.createProgram(options, args) with self.assertRaisesRegexp(Exception,"Segment host '%s' has both of corresponding primary '%s' and mirror '%s'. Aborting." % (self.primary0.getSegmentHostName(), self.primary0, self.mirror0)): gpstop.run() self.assertEquals(0, self.mock_GpSegStopCmdInit.call_count)
def test_host_option_segment_in_resynchronizing_mode_fails(self): sys.argv = ["gpstop", "-a", "--host", "sdw1"] parser = self.subject.GpStop.createParser() options, args = parser.parse_args() self.primary0 = Segment.initFromString( "2|0|p|p|r|u|sdw1|sdw1|40000|/data/primary0") self.mirror0 = Segment.initFromString( "6|0|m|m|r|u|sdw2|sdw2|50000|/data/mirror0") self.mock_gparray.return_value = GpArray([self.master, self.primary0, self.primary1, self.primary2, self.primary3, self.mirror0, self.mirror1, self.mirror2, self.mirror3]) gpstop = self.subject.GpStop.createProgram(options, args) with self.assertRaisesRegexp(Exception,"Segment '%s' not synchronized. Aborting." % self.primary0): gpstop.run() self.assertEquals(0, self.mock_GpSegStopCmdInit.call_count)
def test_host_option_if_no_mirrors_fails(self): sys.argv = ["gpstop", "-a", "--host", "sdw2"] parser = self.subject.GpStop.createParser() options, args = parser.parse_args() self.master = Segment.initFromString( "1|-1|p|p|s|u|mdw|mdw|5432|/data/master") self.standby = Segment.initFromString( "2|-1|m|m|s|u|sdw1|sdw1|25432|/data/master") self.primary0 = Segment.initFromString( "3|0|p|p|s|u|sdw1|sdw1|40000|/data/primary0") self.primary1 = Segment.initFromString( "4|0|p|p|s|u|sdw2|sdw2|40001|/data/primary1") self.mock_gparray.return_value = GpArray([self.master, self.standby, self.primary0, self.primary1]) gpstop = self.subject.GpStop.createProgram(options, args) with self.assertRaisesRegexp(Exception,"Cannot perform host-specific gpstop on a cluster without segment mirroring."): gpstop.run() self.assertEquals(0, self.mock_GpSegStopCmdInit.call_count)
def start_segment(recovery_info, logger, era): seg = Segment(None, None, None, None, None, None, None, None, recovery_info.target_port, recovery_info.target_datadir) cmd = SegmentStart(name="Starting new segment with dbid %s:" % (str(recovery_info.target_segment_dbid)), gpdb=seg, numContentsInCluster=0, era=era, mirrormode="mirror", utilityMode=True) logger.info(str(cmd)) cmd.run(validateAfter=True)
def test_standby_activated_returns_false_when_primary_tli_is_before_standby_tli( self, mock_fetch_tli): def mock_fetch_tli_func(self, data_dir, remote_host=None): if "master" in data_dir: return 3 if "standby" in data_dir: return 2 return 1 mock_fetch_tli.side_effect = mock_fetch_tli_func gpstart = self.setup_gpstart() gpstart.master_datadir = "/data/master" master = Segment.initFromString( "1|-1|p|p|n|u|mdw|mdw|5432|/data/master") standby = Segment.initFromString( "6|-1|m|m|n|d|sdw3|sdw3|5433|/data/standby") gpstart.gparray = GpArray([master, standby]) self.assertFalse(gpstart._standby_activated())
def test_prepare_segment_start_returns_up_and_down_segments(self): # Boilerplate: create a gpstart object parser = self.subject.GpStart.createParser() options, args = parser.parse_args([]) gpstart = self.subject.GpStart.createProgram(options, args) # Up segments master = Segment.initFromString( "1|-1|p|p|n|u|mdw|mdw|5432|/data/master") primary1 = Segment.initFromString( "3|1|p|p|n|u|sdw2|sdw2|40001|/data/primary1") mirror0 = Segment.initFromString( "4|0|m|m|n|u|sdw2|sdw2|50000|/data/mirror0") # Down segments primary0 = Segment.initFromString( "2|0|p|p|n|d|sdw1|sdw1|40000|/data/primary0") mirror1 = Segment.initFromString( "5|1|m|m|n|d|sdw1|sdw1|50001|/data/mirror1") standby = Segment.initFromString( "6|-1|m|m|n|d|sdw3|sdw3|5433|/data/standby") gpstart.gparray = GpArray( [master, primary0, primary1, mirror0, mirror1, standby]) up, down = gpstart._prepare_segment_start() # The master and standby should not be accounted for in these lists. self.assertCountEqual(up, [primary1, mirror0]) self.assertCountEqual(down, [primary0, mirror1])
def test_stop_standby_option(self, mock): self.standby = Segment.initFromString( "10|-1|m|m|s|u|smdw|smdw|5432|/data/standby_master") self.gparray = GpArray([self.master, self.primary0, self.primary1, self.primary2, self.primary3, self.mirror0, self.mirror1, self.mirror2, self.mirror3, self.standby]) self.mock_gparray.return_value = self.gparray sys.argv = ["gpstop", "-a", "-y"] parser = self.subject.GpStop.createParser() options, args = parser.parse_args() gpstop = self.subject.GpStop.createProgram(options, args) gpstop.run() assert not mock.called log_message = self.get_info_messages() self.assertTrue("Stopping master standby host smdw mode=fast" not in log_message) self.assertTrue("No standby master host configured" not in log_message)
def setSegments(self, segmentData): lines = segmentData.strip().split("\n") assert len(lines[1].split("+")) == len(lines[0].split("|")) # verify header is listed self.__configurationProvider = configurationImplTest.GpConfigurationProviderForTesting() for line in lines[2:len(lines)]: row = [s.strip() for s in line.strip().split("|")] dbId = int(row[0]) contentId = int(row[1]) role = row[2] preferredRole = row[3] mode = row[4] status = row[5] hostName = row[6] address = row[7] port = int(row[8]) dataDirectory = row[9] replicationPort = None if row[10] == "" else int(row[10]) segment = Segment(content=contentId, preferred_role=preferredRole, dbid=dbId, role=role, mode=mode, status=status, hostname=hostName, address=address, port=port, datadir=dataDirectory, replicationPort=replicationPort) self.__configurationProvider.addTestSegment(segment) registerConfigurationProvider( self.__configurationProvider ) self.__fileSystemProvider = fileSystemImplTest.GpFileSystemProviderForTest() fileSystemInterface.registerFileSystemProvider(self.__fileSystemProvider) osInterface.registerOsProvider(osImplTest.GpOsProviderForTest()) faultProberInterface.registerFaultProber(faultProberImplTest.GpFaultProberImplForTest()) pass
def setUp(self): self.maxDiff = None self.configProvider = GpConfigurationProviderUsingGpdbCatalog() self.conn = Mock() self.coordinator = Segment.initFromString("1|-1|p|p|s|u|cdw|cdw|5432|/data/coordinator") self.primary0 = Segment.initFromString("2|0|p|p|s|u|sdw1|sdw1|40000|/data/primary0") self.primary1 = Segment.initFromString("3|1|p|p|s|u|sdw2|sdw2|40001|/data/primary1") self.mirror0 = Segment.initFromString("4|0|m|m|s|u|sdw2|sdw2|50000|/data/mirror0") self.acting_mirror0 = Segment.initFromString("6|0|m|p|d|n|sdw2|sdw2|50002|/data/acting_mirror0") self.mirror1 = Segment.initFromString("5|1|m|m|s|u|sdw1|sdw1|50001|/data/mirror1") segments = [self.coordinator,self.primary0,self.primary1,self.mirror0,self.mirror1] self.gpArray = GpArray(segments) self.gpArray.setSegmentsAsLoadedFromDb(segments)
def _createGpArrayWith2Primary2Mirrors(self): self.coordinator = Segment.initFromString( "1|-1|p|p|s|u|cdw|cdw|5432|/data/coordinator") self.primary0 = Segment.initFromString( "2|0|p|p|s|u|sdw1|sdw1|40000|/data/primary0") self.primary1 = Segment.initFromString( "3|1|p|p|s|u|sdw2|sdw2|40001|/data/primary1") self.mirror0 = Segment.initFromString( "4|0|m|m|s|u|sdw2|sdw2|50000|/data/mirror0") self.mirror1 = Segment.initFromString( "5|1|m|m|s|u|sdw1|sdw1|50001|/data/mirror1") self.standby = Segment.initFromString( "6|-1|m|m|s|u|sdw3|sdw3|5433|/data/standby") return GpArray([self.coordinator, self.primary0, self.primary1, self.mirror0, self.mirror1])