diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 08454b7..a49dff1 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -6,6 +6,7 @@ Changelog **Features:** +- Add optional reduced memory operation `-m` `--min-memory` - Add base log path option: `-b` `--log-base`. - Log postfix option: `-p` `--log-postfix`. - Auto alias generation: `-a` `--alias-level`. diff --git a/oslogmerger/oslogmerger.py b/oslogmerger/oslogmerger.py index ab63d52..b6879be 100644 --- a/oslogmerger/oslogmerger.py +++ b/oslogmerger/oslogmerger.py @@ -180,24 +180,24 @@ class OpenStackLog: def process_logs_limit_memory_usage(logs): oslogs = [iter(log) for log in logs] - for log in oslogs: - next(log) + def process_entry(entry_iterable): + try: + next(entry_iterable) + except StopIteration: + # There are no more entries in the iterable, we can remove it + # from the list to process + oslogs.remove(entry_iterable) - while True: - entry = min(oslogs) - result = entry.peek() + for log in oslogs: + process_entry(log) + + while oslogs: + entry_iterable = min(oslogs) + result = entry_iterable.peek() if result is None: break yield result - try: - next(entry) - except StopIteration: - # We don't need to remove the entry, since the code works with - # files that have reached the end, but there is no point in keep - # checking a file that has already reached the EOF. - oslogs.remove(entry) - if not oslogs: - break + process_entry(entry_iterable) def process_logs_memory_hog(logs):