Esempio n. 1
0
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])
Esempio n. 2
0
 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
Esempio n. 3
0
    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)
Esempio n. 4
0
    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)
Esempio n. 5
0
    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)
Esempio n. 8
0
    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)
Esempio n. 9
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
        ])
Esempio n. 10
0
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])
Esempio n. 11
0
 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])
Esempio n. 12
0
 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])
Esempio n. 13
0
 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])
Esempio n. 14
0
    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])
Esempio n. 15
0
    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'])
Esempio n. 18
0
    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))
Esempio n. 20
0
    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))
Esempio n. 22
0
 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')
Esempio n. 23
0
 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')
Esempio n. 24
0
    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)
Esempio n. 25
0
    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)
Esempio n. 26
0
    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)
Esempio n. 27
0
    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)
Esempio n. 28
0
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)
Esempio n. 29
0
    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())
Esempio n. 30
0
    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])
Esempio n. 31
0
    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)
Esempio n. 32
0
    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)
Esempio n. 34
0
 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])