From: Kefu Chai Date: Sat, 20 Feb 2021 06:08:34 +0000 (+0800) Subject: mgr/diskprediction_local: raise if Predictor cannot be initialized X-Git-Tag: v17.1.0~2905^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a6ee76cb128f593f1f1b9ebcc913ab9c2f2d154c;p=ceph.git mgr/diskprediction_local: raise if Predictor cannot be initialized simpler this way. Signed-off-by: Kefu Chai --- diff --git a/src/pybind/mgr/diskprediction_local/module.py b/src/pybind/mgr/diskprediction_local/module.py index 31b1ccf925e..a51e2d41216 100644 --- a/src/pybind/mgr/diskprediction_local/module.py +++ b/src/pybind/mgr/diskprediction_local/module.py @@ -141,9 +141,10 @@ class Module(MgrModule): if obj_predictor is None: self.log.error('invalid value received for MODULE_OPTIONS.predictor_model') return predicted_result - ret = obj_predictor.initialize("{}/models/{}".format(get_diskfailurepredictor_path(), self.predictor_model)) - if ret is not None: - self.log.error('Error initializing predictor') + try: + obj_predictor.initialize("{}/models/{}".format(get_diskfailurepredictor_path(), self.predictor_model)) + except Exception as e: + self.log.error('Error initializing predictor: %s', e) return predicted_result if len(health_data) >= 6: diff --git a/src/pybind/mgr/diskprediction_local/predictor.py b/src/pybind/mgr/diskprediction_local/predictor.py index e2b7fc4e720..daf57aafa5f 100644 --- a/src/pybind/mgr/diskprediction_local/predictor.py +++ b/src/pybind/mgr/diskprediction_local/predictor.py @@ -96,20 +96,19 @@ class RHDiskFailurePredictor(Predictor): # read config file as json, if it exists config_path = os.path.join(model_dirpath, self.CONFIG_FILE) if not os.path.isfile(config_path): - return "Missing config file: " + config_path - else: - with open(config_path) as f_conf: - self.model_context = json.load(f_conf) + raise Exception("Missing config file: " + config_path) + with open(config_path) as f_conf: + self.model_context = json.load(f_conf) # ensure all manufacturers whose context is defined in config file # have models and scalers saved inside model_dirpath for manufacturer in self.model_context: scaler_path = os.path.join(model_dirpath, manufacturer + "_scaler.pkl") if not os.path.isfile(scaler_path): - return "Missing scaler file: {}".format(scaler_path) + raise Exception(f"Missing scaler file: {scaler_path}") model_path = os.path.join(model_dirpath, manufacturer + "_predictor.pkl") if not os.path.isfile(model_path): - return "Missing model file: {}".format(model_path) + raise Exception(f"Missing model file: {model_path}") self.model_dirpath = model_dirpath @@ -277,16 +276,15 @@ class PSDiskFailurePredictor(Predictor): config_path = os.path.join(model_dirpath, self.CONFIG_FILE) if not os.path.isfile(config_path): - return "Missing config file: " + config_path - else: - with open(config_path) as f_conf: - self.model_context = json.load(f_conf) + raise Exception(f"Missing config file: {config_path}") + with open(config_path) as f_conf: + self.model_context = json.load(f_conf) for model_name in self.model_context: model_path = os.path.join(model_dirpath, model_name) if not os.path.isfile(model_path): - return "Missing model file: " + model_path + raise Exception(f"Missing model file: {model_path}") self.model_dirpath = model_dirpath