From 55d995e0108515775c8b72cab8407cdaaa243a83 Mon Sep 17 00:00:00 2001 From: Fabio Erculiani Date: Thu, 16 Dec 2010 16:22:01 +0100 Subject: [PATCH] [services] entropy-pkgdelta-generator: create deltas only for files smaller than 10Mb (bsdiff mem usage: max(17*n,9*n+m)+O(1) ) --- services/entropy-pkgdelta-generator | 34 ++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/services/entropy-pkgdelta-generator b/services/entropy-pkgdelta-generator index bfa86b8e5..9c53cf085 100755 --- a/services/entropy-pkgdelta-generator +++ b/services/entropy-pkgdelta-generator @@ -15,6 +15,7 @@ from entropy.const import etpConst import entropy.dep import entropy.tools +MAX_PKG_FILE_SIZE = 10*1024000 # 10 mb def generate_pkg_map(packages_directory): """ @@ -65,9 +66,26 @@ def generate_package_deltas(directory, quiet): sorted_pkgs_couples = sort_packages(items) for from_pkg_name, to_pkg_name in sorted_pkgs_couples: pkg_path_a = os.path.join(directory, from_pkg_name) + + try: + f_size = entropy.tools.get_file_size(pkg_path_a) + except (IOError, OSError) as err: + sys.stderr.write("error: %s\n" % (err,)) + continue + + if f_size > MAX_PKG_FILE_SIZE: + if not quiet: + sys.stderr.write("%s too big\n" % (pkg_path_a,)) + continue + next_pkg_path = os.path.join(directory, to_pkg_name) - hash_tag = entropy.tools.md5sum(pkg_path_a) + \ - entropy.tools.md5sum(next_pkg_path) + try: + hash_tag = entropy.tools.md5sum(pkg_path_a) + \ + entropy.tools.md5sum(next_pkg_path) + except (IOError, OSError) as err: + sys.stderr.write("error: %s\n" % (err,)) + continue + delta_fn = entropy.tools.generate_entropy_delta_file_name( from_pkg_name, to_pkg_name, hash_tag) delta_path = os.path.join(directory, @@ -77,9 +95,15 @@ def generate_package_deltas(directory, quiet): if not quiet: sys.stderr.write(delta_path + " already exists\n") continue - delta_file = entropy.tools.generate_entropy_delta(pkg_path_a, - next_pkg_path, hash_tag) - entropy.tools.create_md5_file(delta_file) + + try: + delta_file = entropy.tools.generate_entropy_delta(pkg_path_a, + next_pkg_path, hash_tag) + entropy.tools.create_md5_file(delta_file) + except (IOError, OSError) as err: + sys.stderr.write("error: %s\n" % (err,)) + continue + if delta_file is not None: sys.stdout.write(delta_file + "\n")