def __moveFilespaces(self, gparray, target_segment): """ Moves filespaces for temporary and transaction files to a particular location. """ master_seg = gparray.master default_filespace_dir = master_seg.getSegmentDataDirectory() cur_filespace_entries = GetFilespaceEntriesDict( GetFilespaceEntries(gparray, PG_SYSTEM_FILESPACE).run()).run() pg_system_filespace_entries = GetFilespaceEntriesDict( GetFilespaceEntries(gparray, PG_SYSTEM_FILESPACE).run()).run() cur_filespace_name = gparray.getFileSpaceName( int(cur_filespace_entries[1][0])) segments = [target_segment] + [ seg for seg in gparray.getDbList() if seg.getSegmentContentId() == target_segment.getSegmentContentId( ) and seg.getSegmentDbId() != target_segment.getSegmentDbId() ] self.__logger.info('Starting file move procedure for %s' % target_segment) if os.path.exists( os.path.join(default_filespace_dir, GP_TRANSACTION_FILES_FILESPACE)): # On the expansion segments, the current filespace used by existing nodes will be the # new filespace to which we want to move the transaction and temp files. # The filespace directories which have to be moved will be the default pg_system directories. new_filespace_entries = GetFilespaceEntriesDict( GetCurrentFilespaceEntries( gparray, FileType.TRANSACTION_FILES).run()).run() self.__logger.info('getting filespace information') new_filespace_name = gparray.getFileSpaceName( int(new_filespace_entries[1][0])) self.__logger.info( 'getting move operations list for filespace %s' % new_filespace_name) operation_list = GetMoveOperationList( segments, FileType.TRANSACTION_FILES, new_filespace_name, new_filespace_entries, cur_filespace_entries, pg_system_filespace_entries).run() self.__logger.info('Starting transaction files move') ParallelOperation(operation_list).run() self.__logger.debug('Checking transaction files move') try: for operation in operation_list: operation.get_ret() pass except Exception, e: self.__logger.info( 'Failed to move transaction filespace. Rolling back changes ...' ) RollBackFilespaceChanges(gparray.getExpansionSegDbList(), FileType.TRANSACTION_FILES, cur_filespace_name, cur_filespace_entries, new_filespace_entries, pg_system_filespace_entries).run() raise
class GpMirrorListToBuild: def __init__(self, toBuild, pool, quiet, parallelDegree, additionalWarnings=None): self.__mirrorsToBuild = toBuild self.__pool = pool self.__quiet = quiet self.__parallelDegree = parallelDegree self.__additionalWarnings = additionalWarnings or [] def getMirrorsToBuild(self): """ Returns a newly allocated list """ return [m for m in self.__mirrorsToBuild] def getAdditionalWarnings(self): """ Returns any additional warnings generated during building of list """ return self.__additionalWarnings def __moveFilespaces(self, gparray, target_segment): """ Moves filespaces for temporary and transaction files to a particular location. """ master_seg = gparray.master default_filespace_dir = master_seg.getSegmentDataDirectory() cur_filespace_entries = GetFilespaceEntriesDict( GetFilespaceEntries(gparray, PG_SYSTEM_FILESPACE).run()).run() pg_system_filespace_entries = GetFilespaceEntriesDict( GetFilespaceEntries(gparray, PG_SYSTEM_FILESPACE).run()).run() cur_filespace_name = gparray.getFileSpaceName( int(cur_filespace_entries[1][0])) segments = [target_segment] + [ seg for seg in gparray.getDbList() if seg.getSegmentContentId() == target_segment.getSegmentContentId( ) and seg.getSegmentDbId() != target_segment.getSegmentDbId() ] logger.info('Starting file move procedure for %s' % target_segment) if os.path.exists( os.path.join(default_filespace_dir, GP_TRANSACTION_FILES_FILESPACE)): #On the expansion segments, the current filespace used by existing nodes will be the #new filespace to which we want to move the transaction and temp files. #The filespace directories which have to be moved will be the default pg_system directories. new_filespace_entries = GetFilespaceEntriesDict( GetCurrentFilespaceEntries( gparray, FileType.TRANSACTION_FILES).run()).run() logger.info('getting filespace information') new_filespace_name = gparray.getFileSpaceName( int(new_filespace_entries[1][0])) logger.info('getting move operations list for filespace %s' % new_filespace_name) operation_list = GetMoveOperationList( segments, FileType.TRANSACTION_FILES, new_filespace_name, new_filespace_entries, cur_filespace_entries, pg_system_filespace_entries).run() logger.info('Starting transaction files move') ParallelOperation(operation_list).run() logger.debug('Checking transaction files move') try: for operation in operation_list: operation.get_ret() pass except Exception, e: logger.info( 'Failed to move transaction filespace. Rolling back changes ...' ) RollBackFilespaceChanges(gparray.getExpansionSegDbList(), FileType.TRANSACTION_FILES, cur_filespace_name, cur_filespace_entries, new_filespace_entries, pg_system_filespace_entries).run() raise if os.path.exists( os.path.join(default_filespace_dir, GP_TEMPORARY_FILES_FILESPACE)): new_filespace_entries = GetFilespaceEntriesDict( GetCurrentFilespaceEntries( gparray, FileType.TEMPORARY_FILES).run()).run() new_filespace_name = gparray.getFileSpaceName( int(new_filespace_entries[1][0])) operation_list = GetMoveOperationList( segments, FileType.TEMPORARY_FILES, new_filespace_name, new_filespace_entries, cur_filespace_entries, pg_system_filespace_entries).run() logger.info('Starting temporary files move') ParallelOperation(operation_list).run() logger.debug('Checking temporary files move') try: for operation in operation_list: operation.get_ret() pass except Exception, e: logger.info( 'Failed to move temporary filespace. Rolling back changes ...' ) RollBackFilespaceChanges(gparray.getExpansionDbList(), FileType.TRANSACTION_FILES, cur_filespace_name, cur_filespace_entries, new_filespace_entries, pg_system_filespace_entries).run() raise