Beispiel #1
0
    def __startAll(self, gpEnv, gpArray, segments):

        # the newly started segments should belong to the current era
        era = read_era(gpEnv.getMasterDataDir(), logger=gplog.get_logger_if_verbose())

        segmentStartResult = self.__createStartSegmentsOp(gpEnv).startSegments(gpArray, segments, startSegments.START_AS_PRIMARY_OR_MIRROR, era)

        for failure in segmentStartResult.getFailedSegmentObjs():
            failedSeg = failure.getSegment()
            failureReason = failure.getReason()
            logger.warn("Failed to start segment.  The fault prober will shortly mark it as down. Segment: %s: REASON: %s" % (failedSeg, failureReason))
        pass
Beispiel #2
0
    def __startAll(self, gpEnv, gpArray, segments):

        # the newly started segments should belong to the current era
        era = read_era(gpEnv.getMasterDataDir(),
                       logger=gplog.get_logger_if_verbose())

        segmentStartResult = self.__createStartSegmentsOp(gpEnv).startSegments(
            gpArray, segments, startSegments.START_AS_PRIMARY_OR_MIRROR, era)

        for failure in segmentStartResult.getFailedSegmentObjs():
            failedSeg = failure.getSegment()
            failureReason = failure.getReason()
            logger.warn(
                "Failed to start segment.  The fault prober will shortly mark it as down. Segment: %s: REASON: %s"
                % (failedSeg, failureReason))
        pass
Beispiel #3
0
    def __startAll(self, gpEnv, gpArray, segments):

        # the newly started segments should belong to the current era
        era = read_era(gpEnv.getCoordinatorDataDir(), logger=self.__logger)

        segmentStartResult = self.__createStartSegmentsOp(gpEnv).startSegments(
            gpArray, segments, startSegments.START_AS_MIRRORLESS, era)
        start_all_successfull = len(
            segmentStartResult.getFailedSegmentObjs()) == 0
        for failure in segmentStartResult.getFailedSegmentObjs():
            failedSeg = failure.getSegment()
            failureReason = failure.getReason()
            self.__logger.warn(
                "Failed to start segment.  The fault prober will shortly mark it as down. Segment: %s: REASON: %s"
                % (failedSeg, failureReason))

        return start_all_successfull
Beispiel #4
0
    def __startAll(self, gpEnv, gpArray, segments):

        # the newly started segments should belong to the current era
        era = read_era(gpEnv.getMasterDataDir(), logger=self.__logger)

        segmentStartResult = self.__createStartSegmentsOp(gpEnv).startSegments(gpArray, segments,
                                                                               startSegments.START_AS_MIRRORLESS,
                                                                               era)
        start_all_successfull = len(segmentStartResult.getFailedSegmentObjs()) == 0
        for failure in segmentStartResult.getFailedSegmentObjs():
            failedSeg = failure.getSegment()
            failureReason = failure.getReason()
            self.__logger.warn(
                "Failed to start segment.  The fault prober will shortly mark it as down. Segment: %s: REASON: %s" % (
                failedSeg, failureReason))

        return start_all_successfull
Beispiel #5
0
    def _do_recovery(self, recovery_info_by_host, gpEnv):
        """
        # Recover and start segments using gpsegrecovery, which will internally call either
        # pg_basebackup or pg_rewind. gprecoverseg generates a log filename which is
        # passed to gpsegrecovery using the confinfo parameter. gprecoverseg
        # tails this file to show recovery progress to the user, and removes the
        # file when done. A new file is generated for each run of gprecoverseg
        # based on a timestamp.
        :param gpEnv:
        :param recovery_info_by_host:
        :return:
        """
        self.__logger.info(
            'Initiating segment recovery. Upon completion, will start the successfully recovered segments'
        )
        cmds = []
        progress_cmds = []
        era = read_era(gpEnv.getCoordinatorDataDir(), logger=self.__logger)
        for hostName, recovery_info_list in recovery_info_by_host.items():
            for ri in recovery_info_list:
                progressCmd = self._get_progress_cmd(ri.progress_file,
                                                     ri.target_segment_dbid,
                                                     hostName)
                if progressCmd:
                    progress_cmds.append(progressCmd)

            cmds.append(
                gp.GpSegRecovery(
                    'Recover segments',
                    recoveryinfo.serialize_list(recovery_info_list),
                    gplog.get_logger_dir(),
                    verbose=gplog.logging_is_verbose(),
                    batchSize=self.__parallelPerHost,
                    remoteHost=hostName,
                    era=era,
                    forceoverwrite=self.__forceoverwrite))
        completed_recovery_results = self.__runWaitAndCheckWorkerPoolForErrorsAndClear(
            cmds, suppressErrorCheck=True, progressCmds=progress_cmds)
        return completed_recovery_results
    def __startAll(self, gpEnv, gpArray, segments):

        # the newly started segments should belong to the current era
        era = read_era(gpEnv.getMasterDataDir(), logger=gplog.get_logger_if_verbose())

        startMode = startSegments.START_AS_PRIMARY_OR_MIRROR
        if gpArray.getFaultStrategy() == gparray.FAULT_STRATEGY_NONE:
            startMode = startSegments.START_AS_MIRRORLESS
        segmentStartResult = self.__createStartSegmentsOp(gpEnv).startSegments(gpArray, segments, startMode, era)

        for failure in segmentStartResult.getFailedSegmentObjs():
            failedSeg = failure.getSegment()
            failureReason = failure.getReason()
            logger.warn(
                "Failed to start segment.  The fault prober will shortly mark it as down. Segment: %s: REASON: %s"
                % (failedSeg, failureReason)
            )
        pass
        if len(segmentStartResult.getFailedSegmentObjs()) > 0:
            raise Exception(
                "One or more segments cannot be recovered. Please try to recovery the data directory with -F or move to a spare host with -p."
            )
Beispiel #7
0
    def __startAll(self, gpEnv, gpArray, segments):

        # the newly started segments should belong to the current era
        era = read_era(gpEnv.getMasterDataDir(),
                       logger=gplog.get_logger_if_verbose())

        startMode = startSegments.START_AS_PRIMARY_OR_MIRROR
        if gpArray.getFaultStrategy() == gparray.FAULT_STRATEGY_NONE:
            startMode = startSegments.START_AS_MIRRORLESS
        segmentStartResult = self.__createStartSegmentsOp(gpEnv).startSegments(
            gpArray, segments, startMode, era)

        for failure in segmentStartResult.getFailedSegmentObjs():
            failedSeg = failure.getSegment()
            failureReason = failure.getReason()
            logger.warn(
                "Failed to start segment.  The fault prober will shortly mark it as down. Segment: %s: REASON: %s"
                % (failedSeg, failureReason))
        pass
        if len(segmentStartResult.getFailedSegmentObjs()) > 0:
            raise Exception(
                "One or more segments cannot be recovered. Please try to recovery the data directory with -F or move to a spare host with -p."
            )