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
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
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
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
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." )
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." )