From a23c6fa0ceb7ff1471b32784063735be62c990aa Mon Sep 17 00:00:00 2001 From: vrvarma Date: Tue, 27 Nov 2018 11:18:48 -0500 Subject: osdf pci-opt response will have only the updates Change the pci-optimization responses to only have the updates Return Error message in case of failures or no solutions Change-Id: Ia2efc7dc1e5cbcdc2c9425a3f58b840130d759ed Signed-off-by: vrvarma Issue-ID: OPTFRA-404 --- osdf/optimizers/pciopt/pci_opt_processor.py | 33 ++++++++++++++++++----------- osdf/optimizers/pciopt/solver/optimizer.py | 7 +++--- osdf/optimizers/pciopt/solver/pci_utils.py | 1 + 3 files changed, 26 insertions(+), 15 deletions(-) diff --git a/osdf/optimizers/pciopt/pci_opt_processor.py b/osdf/optimizers/pciopt/pci_opt_processor.py index f774b65..da87b83 100644 --- a/osdf/optimizers/pciopt/pci_opt_processor.py +++ b/osdf/optimizers/pciopt/pci_opt_processor.py @@ -17,6 +17,7 @@ # import traceback + from requests import RequestException from osdf.logging.osdf_logging import metrics_log, MH, error_log @@ -66,15 +67,16 @@ def process_pci_optimation(request_json, osdf_config, flat_policies): def get_solutions(cell_info_list, network_cell_info, request_json): + status, solutions = build_solution_list(cell_info_list, network_cell_info, request_json) return { "transactionId": request_json['requestInfo']['transactionId'], "requestId": request_json["requestInfo"]["requestId"], "requestStatus": "completed", - "statusMessage": "success", + "statusMessage": status, "solutions": [ { 'networkId': request_json['cellInfo']['networkId'], - 'pciSolutions': build_solution_list(cell_info_list, network_cell_info, request_json) + 'pciSolutions': solutions } ] } @@ -82,13 +84,20 @@ def get_solutions(cell_info_list, network_cell_info, request_json): def build_solution_list(cell_info_list, network_cell_info, request_json): solution_list = [] - # for cell in request_json['cellInfo']['cellIdList']: - opt_solution = optimize(network_cell_info, cell_info_list) - sol = opt_solution[0]['pci'] - for k, v in sol.items(): - response = { - 'cellId': get_cell_id(network_cell_info, k), - 'pci': get_pci_value(network_cell_info, v) - } - solution_list.append(response) - return solution_list + status = "success" + req_id = request_json["requestInfo"]["requestId"] + try: + opt_solution = optimize(network_cell_info, cell_info_list) + sol = opt_solution[0]['pci'] + for k, v in sol.items(): + old_pci = get_pci_value(network_cell_info, k) + if old_pci != v: + response = { + 'cellId': get_cell_id(network_cell_info, k), + 'pci': v + } + solution_list.append(response) + except RuntimeError: + error_log.error("Failed finding solution for {} {}".format(req_id, traceback.format_exc())) + status = "failed" + return status, solution_list diff --git a/osdf/optimizers/pciopt/solver/optimizer.py b/osdf/optimizers/pciopt/solver/optimizer.py index 91e693c..5a1a5c2 100644 --- a/osdf/optimizers/pciopt/solver/optimizer.py +++ b/osdf/optimizers/pciopt/solver/optimizer.py @@ -64,7 +64,7 @@ def add_to_neighbor_list(network_cell_info, cell, neighbor_list): for nbr in cell.get('nbr_list', []): host_id = cell['id'] nbr_id = get_id(network_cell_info, nbr['cellId']) - if host_id != nbr_id: + if nbr_id and host_id != nbr_id: entry = sorted([host_id, nbr_id]) neighbor_list.add((entry[0], entry[1])) @@ -74,8 +74,9 @@ def get_second_level_neighbor(network_cell_info): for cell in network_cell_info['cell_list']: comb_list = build_second_level_list(network_cell_info, cell) for comb in comb_list: - s = sorted(comb) - second_neighbor_list.add((s[0], s[1])) + if comb[0] and comb[1]: + s = sorted(comb) + second_neighbor_list.add((s[0], s[1])) return sorted(second_neighbor_list) diff --git a/osdf/optimizers/pciopt/solver/pci_utils.py b/osdf/optimizers/pciopt/solver/pci_utils.py index 71b5dd2..df46d1b 100644 --- a/osdf/optimizers/pciopt/solver/pci_utils.py +++ b/osdf/optimizers/pciopt/solver/pci_utils.py @@ -30,6 +30,7 @@ def get_cell_id(network_cell_info, id): return i['cell_id'] return None + def get_pci_value(network_cell_info, id): cell_id = get_cell_id(network_cell_info, id) for i in network_cell_info['cell_list']: -- cgit 1.2.3-korg