diff --git a/lib/pbench/common/exceptions.py b/lib/pbench/common/exceptions.py index 051bccea02..757a71f102 100644 --- a/lib/pbench/common/exceptions.py +++ b/lib/pbench/common/exceptions.py @@ -26,10 +26,6 @@ class UnsupportedTarballFormat(Exception): pass -class SosreportHostname(Exception): - pass - - class JsonFileError(Exception): pass diff --git a/lib/pbench/server/indexing_tarballs.py b/lib/pbench/server/indexing_tarballs.py index 547a7f0b1d..3439aee3eb 100644 --- a/lib/pbench/server/indexing_tarballs.py +++ b/lib/pbench/server/indexing_tarballs.py @@ -3,7 +3,6 @@ import os import glob import signal -import tarfile import tempfile from pathlib import Path from collections import deque @@ -11,7 +10,6 @@ from pbench.common.exceptions import ( BadDate, UnsupportedTarballFormat, - SosreportHostname, BadMDLogFormat, TemplateError, ) @@ -37,6 +35,23 @@ class SigTermException(Exception): pass +class ErrorCode: + def __init__(self, name, value, tarball_error, message): + self.name = name + self.value = value + self.success = value == 0 + self.tarball_error = tarball_error + self.message = message + + +class Errors: + def __init__(self, *codes): + self.errors = {code.name: code for code in codes} + + def __getitem__(self, key): + return self.errors[key] + + def _count_lines(fname): """Simple method to count the lines of a file. """ @@ -49,7 +64,38 @@ def _count_lines(fname): class Index: - """class used to collect tarballs and index them""" + """ class used to collect tarballs and index them + + Status codes used by es_index and the error below are defined to + maintain compatibility with the previous code base when pbench-index + was a bash script. + """ + + error_code = Errors( + ErrorCode("OK", 0, None, "Successful completion"), + ErrorCode("OP_ERROR", 1, False, "Operational error while indexing"), + ErrorCode("CFG_ERROR", 2, False, "Configuration file not specified"), + ErrorCode("BAD_CFG", 3, False, "Bad configuration file"), + ErrorCode( + "TB_META_ABSENT", 4, True, "Tar ball does not contain a metadata.log file", + ), + ErrorCode("BAD_DATE", 5, True, "Bad start run date value encountered"), + ErrorCode("FILE_NOT_FOUND_ERROR", 6, True, "File Not Found error"), + ErrorCode("BAD_METADATA", 7, True, "Bad metadata.log file encountered"), + ErrorCode( + "MAPPING_ERROR", + 8, + False, + "Error reading a mapping file for Elasticsearch templates", + ), + ErrorCode( + "TEMPLATE_CREATION_ERROR", + 9, + False, + "Error creating one of the Elasticsearch templates", + ), + ErrorCode("GENERIC_ERROR", 12, False, "Unexpected error encountered"), + ) def __init__(self, name, options, idxctx, incoming, archive, qdir): @@ -80,6 +126,7 @@ def collect_tb(self): # find -L $ARCHIVE/*/$linksrc -name '*.tar.xz' -printf "%s\t%p\n" 2>/dev/null | sort -n > $list tarballs = [] idxctx = self.idxctx + error_code = self.error_code try: tb_glob = os.path.join(self.archive, "*", self.linksrc, "*.tar.xz") for tb in glob.iglob(tb_glob): @@ -119,26 +166,45 @@ def collect_tb(self): raise except Exception: idxctx.logger.exception( - "Unexpected error encountered generating list" - " of tar balls to process" + "{} generating list of tar balls to process", + error_code["GENERIC_ERROR"].message, ) # tuple to return the status and return value - return (12, []) + return (error_code["GENERIC_ERROR"].value, []) else: if not tarballs: idxctx.logger.info("No tar balls found that need processing") - return (0, []) - return (0, tarballs) + return (error_code["OK"].value, sorted(tarballs)) + + def emit_error(self, logger_method, error, exception): + """Helper method to write a log message in a standard format from an error code + + Args + logger_method -- Reference to a method of a Python logger object, + like idxctx.logger.warning + error -- An error code name from the Errors collection, like "OK" + exception -- the original exception leading to the error + + Returns + Relevant error_code object + + Although all log messages will appear to have originated from this method, + the origin can easily be identified from the error code value, and this + interface provides simplicity and consistency. + """ + ec = self.error_code[error] + logger_method("{}: {}", ec.message, exception) + return ec def process_tb(self, tarballs): """Process Tarballs For Indexing and creates report "tarballs" - List of tarball, it is the second value of the tuple returned by collect_tb() """ - - # We always process the smallest tar balls first. + res = 0 idxctx = self.idxctx + error_code = self.error_code tb_deque = deque(sorted(tarballs)) @@ -152,8 +218,7 @@ def process_tb(self, tarballs): idxctx.logger.debug("update_templates [start]") idxctx.templates.update_templates(idxctx.es) except TemplateError as e: - idxctx.logger.error("update_templates [end], error {}", repr(e)) - res = 9 + res = self.emit_error(idxctx.logger.error, "TEMPLATE_CREATION_ERROR", e) except SigTermException: # Re-raise a SIGTERM to avoid it being lumped in with general # exception handling below. @@ -162,14 +227,14 @@ def process_tb(self, tarballs): idxctx.logger.exception( "update_templates [end]: Unexpected template" " processing error" ) - res = 12 + res = error_code["GENERIC_ERROR"] else: idxctx.logger.debug("update_templates [end]") - res = 0 + res = error_code["OK"] - if res != 0: + if not res.success: # Exit early if we encounter any errors. - return res + return res.value report = Report( idxctx.config, @@ -192,7 +257,7 @@ def process_tb(self, tarballs): raise except Exception: idxctx.logger.error("Failed to post initial report status") - return 12 + return error_code["GENERIC_ERROR"].value else: idxctx.set_tracking_id(tracking_id) @@ -289,37 +354,30 @@ def sighup_handler(*args): # Turn off the SIGINT handler when not indexing. signal.signal(signal.SIGINT, signal.SIG_IGN) except UnsupportedTarballFormat as e: - idxctx.logger.warning("Unsupported tar ball format: {}", e) - tb_res = 4 + tb_res = self.emit_error( + idxctx.logger.warning, "TB_META_ABSENT", e + ) except BadDate as e: - idxctx.logger.warning("Bad Date: {!r}", e) - tb_res = 5 + tb_res = self.emit_error( + idxctx.logger.warning, "BAD_DATE", e + ) except FileNotFoundError as e: - idxctx.logger.warning("No such file: {}", e) - tb_res = 6 - except BadMDLogFormat as e: - idxctx.logger.warning( - "The metadata.log file is curdled in" " tar ball: {}", e + tb_res = self.emit_error( + idxctx.logger.warning, "FILE_NOT_FOUND_ERROR", e ) - tb_res = 7 - except SosreportHostname as e: - idxctx.logger.warning("Bad hostname in sosreport: {}", e) - tb_res = 10 - except tarfile.TarError as e: - idxctx.logger.error( - "Can't unpack tar ball into {}: {}", - ptb.extracted_root, - e, + except BadMDLogFormat as e: + tb_res = self.emit_error( + idxctx.logger.warning, "BAD_METADATA", e ) - tb_res = 11 except SigTermException: idxctx.logger.exception( "Indexing interrupted by SIGTERM, terminating" ) break except Exception as e: - idxctx.logger.exception("Other indexing error: {}", e) - tb_res = 12 + tb_res = self.emit_error( + idxctx.logger.exception, "GENERIC_ERROR", e + ) else: beg, end, successes, duplicates, failures, retries = es_res idxctx.logger.info( @@ -334,7 +392,7 @@ def sighup_handler(*args): failures, retries, ) - tb_res = 1 if failures > 0 else 0 + tb_res = error_code["OP_ERROR" if failures > 0 else "OK"] try: ie_len = ie_filepath.stat().st_size except FileNotFoundError: @@ -378,7 +436,7 @@ def sighup_handler(*args): # `linkerrdest` for later retry. controller_path = linksrc_dir.parent - if tb_res == 0: + if tb_res is error_code["OK"]: idxctx.logger.info( "{}: {}/{}: success", idxctx.TS, @@ -391,7 +449,7 @@ def sighup_handler(*args): rename_tb_link( tb, Path(controller_path, self.linkdest), idxctx.logger ) - elif tb_res == 1: + elif tb_res is error_code["OP_ERROR"]: idxctx.logger.warning( "{}: index failures encountered on {}", idxctx.TS, tb ) @@ -402,25 +460,28 @@ def sighup_handler(*args): Path(controller_path, f"{self.linkerrdest}.1"), idxctx.logger, ) - elif tb_res in (2, 3): + elif tb_res in (error_code["CFG_ERROR"], error_code["BAD_CFG"]): assert False, ( f"Logic Bomb! Unexpected tar ball handling " - f"result status {tb_res:d} for tar ball {tb}" + f"result status {tb_res.value:d} for tar ball {tb}" ) - elif tb_res >= 4 and tb_res <= 11: + elif tb_res.tarball_error: # # Quietly skip these errors with skipped.open(mode="a") as fp: print(tb, file=fp) rename_tb_link( tb, - Path(controller_path, f"{self.linkerrdest}.{tb_res:d}"), + Path( + controller_path, + f"{self.linkerrdest}.{tb_res.value:d}", + ), idxctx.logger, ) else: idxctx.logger.error( "{}: index error {:d} encountered on {}", idxctx.TS, - tb_res, + tb_res.value, tb, ) with erred.open(mode="a") as fp: @@ -471,11 +532,11 @@ def sighup_handler(*args): # exception handling below. raise except Exception: - idxctx.logger.exception("Unexpected setup error") - res = 12 + idxctx.logger.exception(error_code["GENERIC_ERROR"].message) + res = error_code["GENERIC_ERROR"] else: # No exceptions while processing tar ball, success. - res = 0 + res = error_code["OK"] finally: if idxctx: idxctx.dump_opctx() @@ -541,4 +602,4 @@ def sighup_handler(*args): except Exception: pass - return res + return res.value diff --git a/server/bin/gold/test-5.2.txt b/server/bin/gold/test-5.2.txt index d21ad8582f..90aa58fb66 100644 --- a/server/bin/gold/test-5.2.txt +++ b/server/bin/gold/test-5.2.txt @@ -683,7 +683,7 @@ drwxrwxr-x - logs/pbench-dispatch drwxrwxr-x - logs/pbench-index drwxrwxr-x - logs/pbench-index-tool-data -rw-rw-r-- 265 logs/pbench-index-tool-data/pbench-index-tool-data.log --rw-rw-r-- 7679 logs/pbench-index/pbench-index.log +-rw-rw-r-- 7805 logs/pbench-index/pbench-index.log drwxrwxr-x - logs/pbench-server-prep-shim-002 -rw-rw-r-- 2988 logs/pbench-server-prep-shim-002/pbench-server-prep-shim-002.log drwxrwxr-x - logs/pbench-sync-satellite @@ -968,31 +968,31 @@ run-1970-01-01T00:00:42-UTC: Processed 10 result tar balls, 7 successfully (0 pa 1970-01-01T00:00:42.000000 DEBUG pbench-index.indexing_tarballs process_tb -- start processing list of tar balls 1970-01-01T00:00:42.000000 INFO pbench-index.indexing_tarballs process_tb -- Starting /var/tmp/pbench-test-server/test-5.2/pbench/archive/fs-version-001/controller-b-with-prefixes/TO-INDEX/tarball-0_1970.01.01T00.42.00.tar.xz (size 212) 1970-01-01T00:00:42.000000 DEBUG pbench-index.indexing_tarballs process_tb -- open tar ball -1970-01-01T00:00:42.000000 WARNING pbench-index.indexing_tarballs process_tb -- Unsupported tar ball format: /var/tmp/pbench-test-server/test-5.2/pbench/archive/fs-version-001/controller-b-with-prefixes/tarball-0_1970.01.01T00.42.00.tar.xz - tar ball is missing "tarball-0_1970.01.01T00.42.00/metadata.log". +1970-01-01T00:00:42.000000 WARNING pbench-index.indexing_tarballs emit_error -- Tar ball does not contain a metadata.log file: /var/tmp/pbench-test-server/test-5.2/pbench/archive/fs-version-001/controller-b-with-prefixes/tarball-0_1970.01.01T00.42.00.tar.xz - tar ball is missing "tarball-0_1970.01.01T00.42.00/metadata.log". 1970-01-01T00:00:42.000000 INFO pbench-index.indexing_tarballs process_tb -- Finished /var/tmp/pbench-test-server/test-5.2/pbench/archive/fs-version-001/controller-b-with-prefixes/TO-INDEX/tarball-0_1970.01.01T00.42.00.tar.xz (size 212) 1970-01-01T00:00:42.000000 INFO pbench-index.indexing_tarballs process_tb -- Starting /var/tmp/pbench-test-server/test-5.2/pbench/archive/fs-version-001/controller-g-normal/TO-INDEX/tarball-normal_1970.01.01T00.42.00.tar.xz (size 216) 1970-01-01T00:00:42.000000 DEBUG pbench-index.indexing_tarballs process_tb -- open tar ball -1970-01-01T00:00:42.000000 WARNING pbench-index.indexing_tarballs process_tb -- Unsupported tar ball format: /var/tmp/pbench-test-server/test-5.2/pbench/archive/fs-version-001/controller-g-normal/tarball-normal_1970.01.01T00.42.00.tar.xz - tar ball is missing "tarball-normal_1970.01.01T00.42.00/metadata.log". +1970-01-01T00:00:42.000000 WARNING pbench-index.indexing_tarballs emit_error -- Tar ball does not contain a metadata.log file: /var/tmp/pbench-test-server/test-5.2/pbench/archive/fs-version-001/controller-g-normal/tarball-normal_1970.01.01T00.42.00.tar.xz - tar ball is missing "tarball-normal_1970.01.01T00.42.00/metadata.log". 1970-01-01T00:00:42.000000 INFO pbench-index.indexing_tarballs process_tb -- Finished /var/tmp/pbench-test-server/test-5.2/pbench/archive/fs-version-001/controller-g-normal/TO-INDEX/tarball-normal_1970.01.01T00.42.00.tar.xz (size 216) 1970-01-01T00:00:42.000000 INFO pbench-index.indexing_tarballs process_tb -- Starting /var/tmp/pbench-test-server/test-5.2/pbench/archive/fs-version-001/ONE::controllerA/TO-INDEX/tarball-simple1_1970-01-01T00:42:00.tar.xz (size 220) 1970-01-01T00:00:42.000000 DEBUG pbench-index.indexing_tarballs process_tb -- open tar ball -1970-01-01T00:00:42.000000 WARNING pbench-index.indexing_tarballs process_tb -- Unsupported tar ball format: /var/tmp/pbench-test-server/test-5.2/pbench/archive/fs-version-001/ONE::controllerA/tarball-simple1_1970-01-01T00:42:00.tar.xz - tar ball is missing "tarball-simple1_1970-01-01T00:42:00/metadata.log". +1970-01-01T00:00:42.000000 WARNING pbench-index.indexing_tarballs emit_error -- Tar ball does not contain a metadata.log file: /var/tmp/pbench-test-server/test-5.2/pbench/archive/fs-version-001/ONE::controllerA/tarball-simple1_1970-01-01T00:42:00.tar.xz - tar ball is missing "tarball-simple1_1970-01-01T00:42:00/metadata.log". 1970-01-01T00:00:42.000000 INFO pbench-index.indexing_tarballs process_tb -- Finished /var/tmp/pbench-test-server/test-5.2/pbench/archive/fs-version-001/ONE::controllerA/TO-INDEX/tarball-simple1_1970-01-01T00:42:00.tar.xz (size 220) 1970-01-01T00:00:42.000000 INFO pbench-index.indexing_tarballs process_tb -- Starting /var/tmp/pbench-test-server/test-5.2/pbench/archive/fs-version-001/ONE::controllerB/TO-INDEX/tarball-simple2_1970-01-01T00:41:00.tar.xz (size 220) 1970-01-01T00:00:42.000000 DEBUG pbench-index.indexing_tarballs process_tb -- open tar ball -1970-01-01T00:00:42.000000 WARNING pbench-index.indexing_tarballs process_tb -- Unsupported tar ball format: /var/tmp/pbench-test-server/test-5.2/pbench/archive/fs-version-001/ONE::controllerB/tarball-simple2_1970-01-01T00:41:00.tar.xz - tar ball is missing "tarball-simple2_1970-01-01T00:41:00/metadata.log". +1970-01-01T00:00:42.000000 WARNING pbench-index.indexing_tarballs emit_error -- Tar ball does not contain a metadata.log file: /var/tmp/pbench-test-server/test-5.2/pbench/archive/fs-version-001/ONE::controllerB/tarball-simple2_1970-01-01T00:41:00.tar.xz - tar ball is missing "tarball-simple2_1970-01-01T00:41:00/metadata.log". 1970-01-01T00:00:42.000000 INFO pbench-index.indexing_tarballs process_tb -- Finished /var/tmp/pbench-test-server/test-5.2/pbench/archive/fs-version-001/ONE::controllerB/TO-INDEX/tarball-simple2_1970-01-01T00:41:00.tar.xz (size 220) 1970-01-01T00:00:42.000000 INFO pbench-index.indexing_tarballs process_tb -- Starting /var/tmp/pbench-test-server/test-5.2/pbench/archive/fs-version-001/controller-b-with-prefixes/TO-INDEX/tarball-w-dot-prefix_1970.01.01T00.42.00.tar.xz (size 224) 1970-01-01T00:00:42.000000 DEBUG pbench-index.indexing_tarballs process_tb -- open tar ball -1970-01-01T00:00:42.000000 WARNING pbench-index.indexing_tarballs process_tb -- Unsupported tar ball format: /var/tmp/pbench-test-server/test-5.2/pbench/archive/fs-version-001/controller-b-with-prefixes/tarball-w-dot-prefix_1970.01.01T00.42.00.tar.xz - tar ball is missing "tarball-w-dot-prefix_1970.01.01T00.42.00/metadata.log". +1970-01-01T00:00:42.000000 WARNING pbench-index.indexing_tarballs emit_error -- Tar ball does not contain a metadata.log file: /var/tmp/pbench-test-server/test-5.2/pbench/archive/fs-version-001/controller-b-with-prefixes/tarball-w-dot-prefix_1970.01.01T00.42.00.tar.xz - tar ball is missing "tarball-w-dot-prefix_1970.01.01T00.42.00/metadata.log". 1970-01-01T00:00:42.000000 INFO pbench-index.indexing_tarballs process_tb -- Finished /var/tmp/pbench-test-server/test-5.2/pbench/archive/fs-version-001/controller-b-with-prefixes/TO-INDEX/tarball-w-dot-prefix_1970.01.01T00.42.00.tar.xz (size 224) 1970-01-01T00:00:42.000000 INFO pbench-index.indexing_tarballs process_tb -- Starting /var/tmp/pbench-test-server/test-5.2/pbench/archive/fs-version-001/controller-b-with-prefixes/TO-INDEX/tarball-w-prefix-dot_1970.01.01T00.42.00.tar.xz (size 224) 1970-01-01T00:00:42.000000 DEBUG pbench-index.indexing_tarballs process_tb -- open tar ball -1970-01-01T00:00:42.000000 WARNING pbench-index.indexing_tarballs process_tb -- Unsupported tar ball format: /var/tmp/pbench-test-server/test-5.2/pbench/archive/fs-version-001/controller-b-with-prefixes/tarball-w-prefix-dot_1970.01.01T00.42.00.tar.xz - tar ball is missing "tarball-w-prefix-dot_1970.01.01T00.42.00/metadata.log". +1970-01-01T00:00:42.000000 WARNING pbench-index.indexing_tarballs emit_error -- Tar ball does not contain a metadata.log file: /var/tmp/pbench-test-server/test-5.2/pbench/archive/fs-version-001/controller-b-with-prefixes/tarball-w-prefix-dot_1970.01.01T00.42.00.tar.xz - tar ball is missing "tarball-w-prefix-dot_1970.01.01T00.42.00/metadata.log". 1970-01-01T00:00:42.000000 INFO pbench-index.indexing_tarballs process_tb -- Finished /var/tmp/pbench-test-server/test-5.2/pbench/archive/fs-version-001/controller-b-with-prefixes/TO-INDEX/tarball-w-prefix-dot_1970.01.01T00.42.00.tar.xz (size 224) 1970-01-01T00:00:42.000000 INFO pbench-index.indexing_tarballs process_tb -- Starting /var/tmp/pbench-test-server/test-5.2/pbench/archive/fs-version-001/ONE::controllerC/TO-INDEX/tarball-simple0-prefix_1970-01-01T00:42:00.tar.xz (size 228) 1970-01-01T00:00:42.000000 DEBUG pbench-index.indexing_tarballs process_tb -- open tar ball -1970-01-01T00:00:42.000000 WARNING pbench-index.indexing_tarballs process_tb -- Unsupported tar ball format: /var/tmp/pbench-test-server/test-5.2/pbench/archive/fs-version-001/ONE::controllerC/tarball-simple0-prefix_1970-01-01T00:42:00.tar.xz - tar ball is missing "tarball-simple0-prefix_1970-01-01T00:42:00/metadata.log". +1970-01-01T00:00:42.000000 WARNING pbench-index.indexing_tarballs emit_error -- Tar ball does not contain a metadata.log file: /var/tmp/pbench-test-server/test-5.2/pbench/archive/fs-version-001/ONE::controllerC/tarball-simple0-prefix_1970-01-01T00:42:00.tar.xz - tar ball is missing "tarball-simple0-prefix_1970-01-01T00:42:00/metadata.log". 1970-01-01T00:00:42.000000 INFO pbench-index.indexing_tarballs process_tb -- Finished /var/tmp/pbench-test-server/test-5.2/pbench/archive/fs-version-001/ONE::controllerC/TO-INDEX/tarball-simple0-prefix_1970-01-01T00:42:00.tar.xz (size 228) 1970-01-01T00:00:42.000000 DEBUG pbench-index.indexing_tarballs process_tb -- stopped processing list of tar balls 1970-01-01T00:00:42.000000 INFO pbench-index.indexing_tarballs process_tb -- pbench-index.run-1970-01-01T00:00:42-UTC: indexed 0 (skipped 7) results, 0 errors diff --git a/server/bin/gold/test-7.1.txt b/server/bin/gold/test-7.1.txt index 2d244a515d..4fd44953f7 100644 --- a/server/bin/gold/test-7.1.txt +++ b/server/bin/gold/test-7.1.txt @@ -233,7 +233,7 @@ drwxrwxr-x - logs/pbench-audit-server drwxrwxr-x - logs/pbench-index drwxrwxr-x - logs/pbench-index-tool-data -rw-rw-r-- 265 logs/pbench-index-tool-data/pbench-index-tool-data.log --rw-rw-r-- 2305 logs/pbench-index/pbench-index.log +-rw-rw-r-- 2294 logs/pbench-index/pbench-index.log drwxrwxr-x - logs/pbench-unpack-tarballs -rw-rw-r-- 0 logs/pbench-unpack-tarballs/pbench-unpack-tarballs.error -rw-rw-r-- 860 logs/pbench-unpack-tarballs/pbench-unpack-tarballs.log @@ -303,7 +303,7 @@ drwxrwxr-x - tmp 1970-01-01T00:00:42.000000 DEBUG pbench-index.indexing_tarballs process_tb -- start processing list of tar balls 1970-01-01T00:00:42.000000 INFO pbench-index.indexing_tarballs process_tb -- Starting /var/tmp/pbench-test-server/test-7.1/pbench/archive/fs-version-001/controller/TO-INDEX/test_7.1_1970.01.01T00.00.00.tar.xz (size 1256) 1970-01-01T00:00:42.000000 DEBUG pbench-index.indexing_tarballs process_tb -- open tar ball -1970-01-01T00:00:42.000000 WARNING pbench-index.indexing_tarballs process_tb -- The metadata.log file is curdled in tar ball: /var/tmp/pbench-test-server/test-7.1/pbench/archive/fs-version-001/controller/test_7.1_1970.01.01T00.00.00.tar.xz - error fetching required metadata.log fields, "No section: 'run'" +1970-01-01T00:00:42.000000 WARNING pbench-index.indexing_tarballs emit_error -- Bad metadata.log file encountered: /var/tmp/pbench-test-server/test-7.1/pbench/archive/fs-version-001/controller/test_7.1_1970.01.01T00.00.00.tar.xz - error fetching required metadata.log fields, "No section: 'run'" 1970-01-01T00:00:42.000000 INFO pbench-index.indexing_tarballs process_tb -- Finished /var/tmp/pbench-test-server/test-7.1/pbench/archive/fs-version-001/controller/TO-INDEX/test_7.1_1970.01.01T00.00.00.tar.xz (size 1256) 1970-01-01T00:00:42.000000 DEBUG pbench-index.indexing_tarballs process_tb -- stopped processing list of tar balls 1970-01-01T00:00:42.000000 INFO pbench-index.indexing_tarballs process_tb -- pbench-index.run-1970-01-01T00:00:42-UTC: indexed 0 (skipped 1) results, 0 errors diff --git a/server/bin/gold/test-7.18.txt b/server/bin/gold/test-7.18.txt index 42b01d2e26..bf1904be54 100644 --- a/server/bin/gold/test-7.18.txt +++ b/server/bin/gold/test-7.18.txt @@ -239,7 +239,7 @@ drwxrwxr-x - logs/pbench-audit-server drwxrwxr-x - logs/pbench-index drwxrwxr-x - logs/pbench-index-tool-data -rw-rw-r-- 265 logs/pbench-index-tool-data/pbench-index-tool-data.log --rw-rw-r-- 2640 logs/pbench-index/pbench-index.log +-rw-rw-r-- 2629 logs/pbench-index/pbench-index.log drwxrwxr-x - logs/pbench-unpack-tarballs -rw-rw-r-- 0 logs/pbench-unpack-tarballs/pbench-unpack-tarballs.error -rw-rw-r-- 1271 logs/pbench-unpack-tarballs/pbench-unpack-tarballs.log @@ -311,7 +311,7 @@ drwxrwxr-x - tmp 1970-01-01T00:00:42.000000 DEBUG pbench-index.indexing_tarballs process_tb -- start processing list of tar balls 1970-01-01T00:00:42.000000 INFO pbench-index.indexing_tarballs process_tb -- Starting /var/tmp/pbench-test-server/test-7.18/pbench/archive/fs-version-001/bad-controller/TO-INDEX/test_7.18_2018.02.05T15.31.08.tar.xz (size 1512) 1970-01-01T00:00:42.000000 DEBUG pbench-index.indexing_tarballs process_tb -- open tar ball -1970-01-01T00:00:42.000000 WARNING pbench-index.indexing_tarballs process_tb -- The metadata.log file is curdled in tar ball: /var/tmp/pbench-test-server/test-7.18/pbench/archive/fs-version-001/bad-controller/test_7.18_2018.02.05T15.31.08.tar.xz - error fetching required metadata.log fields, "run.controller ("alphaville.example.com") does not match controller_dir ("bad-controller")" +1970-01-01T00:00:42.000000 WARNING pbench-index.indexing_tarballs emit_error -- Bad metadata.log file encountered: /var/tmp/pbench-test-server/test-7.18/pbench/archive/fs-version-001/bad-controller/test_7.18_2018.02.05T15.31.08.tar.xz - error fetching required metadata.log fields, "run.controller ("alphaville.example.com") does not match controller_dir ("bad-controller")" 1970-01-01T00:00:42.000000 INFO pbench-index.indexing_tarballs process_tb -- Finished /var/tmp/pbench-test-server/test-7.18/pbench/archive/fs-version-001/bad-controller/TO-INDEX/test_7.18_2018.02.05T15.31.08.tar.xz (size 1512) 1970-01-01T00:00:42.000000 DEBUG pbench-index.indexing_tarballs process_tb -- stopped processing list of tar balls 1970-01-01T00:00:42.000000 INFO pbench-index.indexing_tarballs process_tb -- pbench-index.run-1970-01-01T00:00:42-UTC: indexed 0 (skipped 1) results, 0 errors diff --git a/server/bin/gold/test-7.2.0.txt b/server/bin/gold/test-7.2.0.txt index 17b270aacb..ac93a20a1f 100644 --- a/server/bin/gold/test-7.2.0.txt +++ b/server/bin/gold/test-7.2.0.txt @@ -232,7 +232,7 @@ drwxrwxr-x - logs/pbench-audit-server drwxrwxr-x - logs/pbench-index drwxrwxr-x - logs/pbench-index-tool-data -rw-rw-r-- 265 logs/pbench-index-tool-data/pbench-index-tool-data.log --rw-rw-r-- 2302 logs/pbench-index/pbench-index.log +-rw-rw-r-- 2320 logs/pbench-index/pbench-index.log drwxrwxr-x - logs/pbench-unpack-tarballs -rw-rw-r-- 0 logs/pbench-unpack-tarballs/pbench-unpack-tarballs.error -rw-rw-r-- 870 logs/pbench-unpack-tarballs/pbench-unpack-tarballs.log @@ -302,7 +302,7 @@ drwxrwxr-x - tmp 1970-01-01T00:00:42.000000 DEBUG pbench-index.indexing_tarballs process_tb -- start processing list of tar balls 1970-01-01T00:00:42.000000 INFO pbench-index.indexing_tarballs process_tb -- Starting /var/tmp/pbench-test-server/test-7.2.0/pbench/archive/fs-version-001/controller/TO-INDEX/test_7.2.0_1970.01.01T00.42.00.tar.xz (size 1224) 1970-01-01T00:00:42.000000 DEBUG pbench-index.indexing_tarballs process_tb -- open tar ball -1970-01-01T00:00:42.000000 WARNING pbench-index.indexing_tarballs process_tb -- Unsupported tar ball format: /var/tmp/pbench-test-server/test-7.2.0/pbench/archive/fs-version-001/controller/test_7.2.0_1970.01.01T00.42.00.tar.xz - tar ball is missing "test_7.2.0_1970.01.01T00.42.00/metadata.log". +1970-01-01T00:00:42.000000 WARNING pbench-index.indexing_tarballs emit_error -- Tar ball does not contain a metadata.log file: /var/tmp/pbench-test-server/test-7.2.0/pbench/archive/fs-version-001/controller/test_7.2.0_1970.01.01T00.42.00.tar.xz - tar ball is missing "test_7.2.0_1970.01.01T00.42.00/metadata.log". 1970-01-01T00:00:42.000000 INFO pbench-index.indexing_tarballs process_tb -- Finished /var/tmp/pbench-test-server/test-7.2.0/pbench/archive/fs-version-001/controller/TO-INDEX/test_7.2.0_1970.01.01T00.42.00.tar.xz (size 1224) 1970-01-01T00:00:42.000000 DEBUG pbench-index.indexing_tarballs process_tb -- stopped processing list of tar balls 1970-01-01T00:00:42.000000 INFO pbench-index.indexing_tarballs process_tb -- pbench-index.run-1970-01-01T00:00:42-UTC: indexed 0 (skipped 1) results, 0 errors diff --git a/server/bin/gold/test-7.2.1.txt b/server/bin/gold/test-7.2.1.txt index 3157c5b922..d9a0597607 100644 --- a/server/bin/gold/test-7.2.1.txt +++ b/server/bin/gold/test-7.2.1.txt @@ -976,7 +976,7 @@ drwxrwxr-x - logs/pbench-audit-server drwxrwxr-x - logs/pbench-index drwxrwxr-x - logs/pbench-index-tool-data -rw-rw-r-- 265 logs/pbench-index-tool-data/pbench-index-tool-data.log --rw-rw-r-- 2357 logs/pbench-index/pbench-index.log +-rw-rw-r-- 2375 logs/pbench-index/pbench-index.log drwxrwxr-x - logs/pbench-unpack-tarballs -rw-rw-r-- 0 logs/pbench-unpack-tarballs/pbench-unpack-tarballs.error -rw-rw-r-- 861 logs/pbench-unpack-tarballs/pbench-unpack-tarballs.log @@ -1046,7 +1046,7 @@ drwxrwxr-x - tmp 1970-01-01T00:00:42.000000 DEBUG pbench-index.indexing_tarballs process_tb -- start processing list of tar balls 1970-01-01T00:00:42.000000 INFO pbench-index.indexing_tarballs process_tb -- Starting /var/tmp/pbench-test-server/test-7.2.1/pbench/archive/fs-version-001/controller/TO-INDEX/uperf__2016-10-06_16:34:03.tar.xz (size 5809020) 1970-01-01T00:00:42.000000 DEBUG pbench-index.indexing_tarballs process_tb -- open tar ball -1970-01-01T00:00:42.000000 WARNING pbench-index.indexing_tarballs process_tb -- Unsupported tar ball format: /var/tmp/pbench-test-server/test-7.2.1/pbench/archive/fs-version-001/controller/uperf__2016-10-06_16:34:03.tar.xz - directory prefix should be "uperf__2016-10-06_16:34:03", but is "." instead, for tar ball member "./uperf__2016-10-06_16:34:03" +1970-01-01T00:00:42.000000 WARNING pbench-index.indexing_tarballs emit_error -- Tar ball does not contain a metadata.log file: /var/tmp/pbench-test-server/test-7.2.1/pbench/archive/fs-version-001/controller/uperf__2016-10-06_16:34:03.tar.xz - directory prefix should be "uperf__2016-10-06_16:34:03", but is "." instead, for tar ball member "./uperf__2016-10-06_16:34:03" 1970-01-01T00:00:42.000000 INFO pbench-index.indexing_tarballs process_tb -- Finished /var/tmp/pbench-test-server/test-7.2.1/pbench/archive/fs-version-001/controller/TO-INDEX/uperf__2016-10-06_16:34:03.tar.xz (size 5809020) 1970-01-01T00:00:42.000000 DEBUG pbench-index.indexing_tarballs process_tb -- stopped processing list of tar balls 1970-01-01T00:00:42.000000 INFO pbench-index.indexing_tarballs process_tb -- pbench-index.run-1970-01-01T00:00:42-UTC: indexed 0 (skipped 1) results, 0 errors diff --git a/server/bin/gold/test-7.3.txt b/server/bin/gold/test-7.3.txt index f3e7b72a0d..b60bf37e65 100644 --- a/server/bin/gold/test-7.3.txt +++ b/server/bin/gold/test-7.3.txt @@ -233,7 +233,7 @@ drwxrwxr-x - logs/pbench-audit-server drwxrwxr-x - logs/pbench-index drwxrwxr-x - logs/pbench-index-tool-data -rw-rw-r-- 265 logs/pbench-index-tool-data/pbench-index-tool-data.log --rw-rw-r-- 2307 logs/pbench-index/pbench-index.log +-rw-rw-r-- 2296 logs/pbench-index/pbench-index.log drwxrwxr-x - logs/pbench-unpack-tarballs -rw-rw-r-- 0 logs/pbench-unpack-tarballs/pbench-unpack-tarballs.error -rw-rw-r-- 860 logs/pbench-unpack-tarballs/pbench-unpack-tarballs.log @@ -303,7 +303,7 @@ drwxrwxr-x - tmp 1970-01-01T00:00:42.000000 DEBUG pbench-index.indexing_tarballs process_tb -- start processing list of tar balls 1970-01-01T00:00:42.000000 INFO pbench-index.indexing_tarballs process_tb -- Starting /var/tmp/pbench-test-server/test-7.3/pbench/archive/fs-version-001/alphaville/TO-INDEX/test_7.3_2015.09.21T15.31.08.tar.xz (size 1492) 1970-01-01T00:00:42.000000 DEBUG pbench-index.indexing_tarballs process_tb -- open tar ball -1970-01-01T00:00:42.000000 WARNING pbench-index.indexing_tarballs process_tb -- The metadata.log file is curdled in tar ball: /var/tmp/pbench-test-server/test-7.3/pbench/archive/fs-version-001/alphaville/test_7.3_2015.09.21T15.31.08.tar.xz - error fetching required metadata.log fields, "empty pbench.script" +1970-01-01T00:00:42.000000 WARNING pbench-index.indexing_tarballs emit_error -- Bad metadata.log file encountered: /var/tmp/pbench-test-server/test-7.3/pbench/archive/fs-version-001/alphaville/test_7.3_2015.09.21T15.31.08.tar.xz - error fetching required metadata.log fields, "empty pbench.script" 1970-01-01T00:00:42.000000 INFO pbench-index.indexing_tarballs process_tb -- Finished /var/tmp/pbench-test-server/test-7.3/pbench/archive/fs-version-001/alphaville/TO-INDEX/test_7.3_2015.09.21T15.31.08.tar.xz (size 1492) 1970-01-01T00:00:42.000000 DEBUG pbench-index.indexing_tarballs process_tb -- stopped processing list of tar balls 1970-01-01T00:00:42.000000 INFO pbench-index.indexing_tarballs process_tb -- pbench-index.run-1970-01-01T00:00:42-UTC: indexed 0 (skipped 1) results, 0 errors diff --git a/server/bin/pbench-index.py b/server/bin/pbench-index.py index 103daf68ee..3792b51f24 100755 --- a/server/bin/pbench-index.py +++ b/server/bin/pbench-index.py @@ -44,39 +44,6 @@ def main(options, name): All exceptions are caught and logged to syslog with the stacktrace of the exception in a sub-object of the logged JSON document. - Status codes used by es_index and the error below are defined from the - list below to maintain compatibility with the previous code base when - pbench-index was a bash script and invoked index-pbench (yes, a bit - confusing), the predecessor to this program. The codes were used to - sort the errors we encountered processing tar balls in to categories - of retry or not: - - 0 - normal, successful exit, no errors - 1 - Operational error while indexing - 2 - Configuration file not specified - 3 - Bad configuration file - 4 - Tar ball does not contain a metadata.log file - 5 - Bad start run date value encountered - 6 - File Not Found error - 7 - Bad metadata.log file encountered - 8 - Error reading a mapping file for Elasticsearch templates - 9 - Error creating one of the Elasticsearch templates - 10 - Bad hostname in a sosreport - 11 - Failure unpacking the tar ball - 12 - generic error, needs to be investigated and can be retried - after any indexing bugs are fixed. - - Return Values (now a sub-set of the original status codes above): - 0 - Successfully processed all tar balls (errors processing tar - balls are reported in the logs and in index status reports) - 1 - Failed to process one or more tar balls for unknown reasons - (see logs) - 2 - Missing configuration file - 3 - Invalid configuration file - 8 - Unable to load and process expected mapping files - 9 - Unable to update index templates in configured Elasticsearch - instance - Signal Handlers used to establish different patterns for the three behaviors: @@ -121,6 +88,7 @@ def main(options, name): _name_suf = "-tool-data" if options.index_tool_data else "" _name_re = "-re" if options.re_index else "" name = f"{name}{_name_re}{_name_suf}" + error_code = Index.error_code if not options.cfg_name: print( @@ -129,20 +97,20 @@ def main(options, name): " use --config on the command line", file=sys.stderr, ) - return 2 + return error_code["CFG_ERROR"].value idxctx = None try: idxctx = IdxContext(options, name, _dbg=_DEBUG) except (ConfigFileError, ConfigParserError) as e: print(f"{name}: {e}", file=sys.stderr) - return 2 + return error_code["CFG_ERROR"].value except BadConfig as e: print(f"{name}: {e}", file=sys.stderr) - return 3 + return error_code["BAD_CFG"].value except JsonFileError as e: print(f"{name}: {e}", file=sys.stderr) - return 8 + return error_code["MAPPING_ERROR"].value if options.dump_index_patterns: idxctx.templates.dump_idx_patterns() @@ -152,7 +120,7 @@ def main(options, name): idxctx.templates.dump_templates() return 0 - res = 0 + res = error_code["OK"] ARCHIVE_rp = idxctx.config.ARCHIVE @@ -161,23 +129,23 @@ def main(options, name): "INCOMING", INCOMING_rp, idxctx.logger ) if not INCOMING_path: - res = 3 + res = error_code["BAD_CFG"] qdir = idxctx.config.get_conf( "QUARANTINE", "pbench-server", "pbench-quarantine-dir", idxctx.logger ) if not qdir: - res = 3 + res = error_code["BAD_CFG"] else: qdir_path = idxctx.config.get_valid_dir_option( "QDIR", Path(qdir), idxctx.logger ) if not qdir_path: - res = 3 + res = error_code["BAD_CFG"] - if res != 0: + if not res.success: # Exit early if we encounter any errors. - return res + return res.value idxctx.logger.debug("{}.{}: starting", name, idxctx.TS) @@ -190,6 +158,8 @@ def main(options, name): return status +########################################################################### +# Options handling if __name__ == "__main__": run_name = Path(sys.argv[0]).name run_name = run_name if run_name[-3:] != ".py" else run_name[:-3]