示例#1
0
def purge_backups(storage, backups):
    """
    Core function to purge a list of node_backups
    Used for node purge and backup delete (using a specific backup_name)
    """
    logging.info("{} backups are candidate to be purged".format(len(backups)))
    fqdns = set()
    nb_objects_purged = 0
    total_purged_size = 0

    for backup in backups:
        (purged_objects, purged_size) = purge_backup(storage, backup)
        nb_objects_purged += purged_objects
        total_purged_size += purged_size
        fqdns.add(backup.fqdn)

    for fqdn in fqdns:
        (cleaned_objects_count, cleaned_objects_size) = cleanup_obsolete_files(storage, fqdn)
        nb_objects_purged += cleaned_objects_count
        total_purged_size += cleaned_objects_size

    logging.info("Purged {} objects with a total size of {}".format(
        nb_objects_purged,
        format_bytes_str(total_purged_size))
    )
示例#2
0
def purge_backups(storage, backups, fqdn):
    logging.info("{} backups are candidate to be purged".format(len(backups)))
    nb_objects_purged = 0
    total_purged_size = 0

    for backup in backups:
        (purged_objects, purged_size) = purge_backup(storage, backup)
        nb_objects_purged += purged_objects
        total_purged_size += purged_size

    (cleaned_objects_count,
     cleaned_objects_size) = cleanup_obsolete_files(storage, fqdn)
    nb_objects_purged += cleaned_objects_count
    total_purged_size += cleaned_objects_size

    logging.info("Purged {} objects with a total size of {}".format(
        nb_objects_purged, format_bytes_str(total_purged_size)))
示例#3
0
def status(config, backup_name):
    storage = Storage(config=config.storage)

    try:
        cluster_backup = storage.get_cluster_backup(backup_name)
    except KeyError:
        logging.error('No such backup')
        sys.exit(1)

    if cluster_backup.is_complete():
        print('{.name}'.format(cluster_backup))
    else:
        print('{.name} [Incomplete!]'.format(cluster_backup))

    started = datetime.fromtimestamp(
        cluster_backup.started).strftime(TIMESTAMP_FORMAT)
    if cluster_backup.finished is None:
        print('- Started: {}, ' 'Finished: never'.format(started))
    else:
        finished = datetime.fromtimestamp(
            cluster_backup.finished).strftime(TIMESTAMP_FORMAT)
        print('- Started: {}, ' 'Finished: {}'.format(started, finished))

    complete_nodes = cluster_backup.complete_nodes()
    incomplete_nodes = cluster_backup.incomplete_nodes()
    missing_nodes = cluster_backup.missing_nodes()
    print('- {0} nodes completed, {1} nodes incomplete, {2} nodes missing'.
          format(len(complete_nodes), len(incomplete_nodes),
                 len(missing_nodes)))

    if len(incomplete_nodes) > 0:
        print('- Incomplete nodes:')
        for node_backup in incomplete_nodes:
            print('    {}'.format(node_backup.fqdn))

    if len(missing_nodes) > 0:
        print('- Missing nodes:')
        for fqdn in missing_nodes:
            print('    {}'.format(fqdn))

    print('- {} files, {}'.format(cluster_backup.num_objects(),
                                  format_bytes_str(cluster_backup.size())))
示例#4
0
def print_backup_stats(actual_backup_duration, actual_start, end, node_backup,
                       node_backup_cache, num_files, start):
    logging.info('Backup done')

    logging.info("""- Started: {:%Y-%m-%d %H:%M:%S}
                        - Started extracting data: {:%Y-%m-%d %H:%M:%S}
                        - Finished: {:%Y-%m-%d %H:%M:%S}""".format(
        start, actual_start, end))

    logging.info('- Real duration: {} (excludes time waiting '
                 'for other nodes)'.format(actual_backup_duration))

    logging.info('- {} files, {}'.format(num_files,
                                         format_bytes_str(node_backup.size())))

    logging.info(
        '- {} files copied from host'.format(num_files -
                                             node_backup_cache.replaced))

    if node_backup_cache.backup_name is not None:
        logging.info('- {} copied from previous backup ({})'.format(
            node_backup_cache.replaced, node_backup_cache.backup_name))
示例#5
0
def purge_backups(storage, backups, backup_grace_period_in_days, local_fqdn):
    """
    Core function to purge a set of node_backups
    Used for node purge and backup delete (using a specific backup_name)
    """
    logging.info("{} backups are candidate to be purged".format(len(backups)))
    fqdns = set()
    nb_objects_purged = 0
    total_purged_size = 0
    total_objects_within_grace = 0

    for backup in backups:
        (purged_objects, purged_size) = purge_backup(storage, backup)
        nb_objects_purged += purged_objects
        total_purged_size += purged_size
        fqdns.add(backup.fqdn)

    if len(fqdns) == 0:
        # If we didn't purge any backup, we still want to cleanup obsolete files for the local node
        fqdns.add(local_fqdn)

    for fqdn in fqdns:
        (cleaned_objects_count, cleaned_objects_size, nb_objects_within_grace) \
            = cleanup_obsolete_files(storage,
                                     fqdn,
                                     backup_grace_period_in_days)
        nb_objects_purged += cleaned_objects_count
        total_purged_size += cleaned_objects_size
        total_objects_within_grace += nb_objects_within_grace

    logging.info("Purged {} objects with a total size of {}".format(
        nb_objects_purged, format_bytes_str(total_purged_size)))
    if total_objects_within_grace > 0:
        logging.info(
            "{} objects within {} days grace period were not deleted".format(
                total_objects_within_grace, backup_grace_period_in_days))