Пример #1
0
    def print_db_delta_adj(
        self, key, value, kvstore_adj_node_names, decision_adj_dbs, json
    ):
        """ Returns status code. 0 = success, 1 = failure"""

        kvstore_adj_db = deserialize_thrift_object(
            value.value, lsdb_types.AdjacencyDatabase
        )
        node_name = kvstore_adj_db.thisNodeName
        kvstore_adj_node_names.add(node_name)
        if node_name not in decision_adj_dbs:
            print(
                printing.render_vertical_table(
                    [["node {}'s adj db is missing in Decision".format(node_name)]]
                )
            )
            return 1
        decision_adj_db = decision_adj_dbs[node_name]

        return_code = 0
        if json:
            tags = ("in_decision", "in_kvstore", "changed_in_decision_and_kvstore")
            adj_list_deltas = utils.find_adj_list_deltas(
                decision_adj_db.adjacencies, kvstore_adj_db.adjacencies, tags=tags
            )
            deltas_json, return_code = utils.adj_list_deltas_json(
                adj_list_deltas, tags=tags
            )
            if return_code:
                utils.print_json(deltas_json)
        else:
            lines = utils.sprint_adj_db_delta(kvstore_adj_db, decision_adj_db)
            if lines:
                print(
                    printing.render_vertical_table(
                        [
                            [
                                "node {}'s adj db in Decision out of sync with "
                                "KvStore's".format(node_name)
                            ]
                        ]
                    )
                )
                print("\n".join(lines))
                return_code = 1

        return return_code
Пример #2
0
    def test_find_adj_list_deltas(self):
        adjs_old = [
            self.create_adjacency("nodeA", "ifaceX", metric=10),
            self.create_adjacency("nodeA", "ifaceY", metric=10),
            self.create_adjacency("nodeB", "ifaceX", metric=10),
            self.create_adjacency("nodeC", "ifaceX", metric=10),
        ]

        adjs_new = [
            self.create_adjacency("nodeA", "ifaceX", metric=10),
            self.create_adjacency("nodeB", "ifaceX", metric=20),
            self.create_adjacency("nodeD", "ifaceX", metric=10),
        ]

        delta_list = find_adj_list_deltas(adjs_old, adjs_new)
        self.assertEqual(4, len(delta_list))
        d1, d2, d3, d4 = delta_list

        self.assertEqual(("NEIGHBOR_DOWN", adjs_old[1], None), d1)
        self.assertEqual(("NEIGHBOR_DOWN", adjs_old[3], None), d2)
        self.assertEqual(("NEIGHBOR_UP", None, adjs_new[2]), d3)
        self.assertEqual(("NEIGHBOR_UPDATE", adjs_old[2], adjs_new[1]), d4)
Пример #3
0
    def print_db_delta(self, key, value, kvstore_adj_node_names,
                       kvstore_prefix_node_names, decision_adj_dbs,
                       decision_prefix_dbs, json):
        ''' Returns status code. 0 = success, 1 = failure'''

        if key.startswith(Consts.ADJ_DB_MARKER):
            kvstore_adj_db = deserialize_thrift_object(
                value.value, lsdb_types.AdjacencyDatabase)
            node_name = kvstore_adj_db.thisNodeName
            kvstore_adj_node_names.add(node_name)
            if node_name not in decision_adj_dbs:
                print(
                    printing.render_vertical_table([[
                        "node {}'s adj db is missing in Decision".format(
                            node_name)
                    ]]))
                return 1
            decision_adj_db = decision_adj_dbs[node_name]

            return_code = 0
            if json:
                tags = ('in_decision', 'in_kvstore',
                        'changed_in_decision_and_kvstore')
                adj_list_deltas = utils.find_adj_list_deltas(
                    decision_adj_db.adjacencies,
                    kvstore_adj_db.adjacencies,
                    tags=tags)
                deltas_json, return_code = utils.adj_list_deltas_json(
                    adj_list_deltas, tags=tags)
                if return_code:
                    utils.print_json(deltas_json)
            else:
                lines = utils.sprint_adj_db_delta(kvstore_adj_db,
                                                  decision_adj_db)
                if lines:
                    print(
                        printing.render_vertical_table([[
                            "node {}'s adj db in Decision out of sync with KvStore's"
                            .format(node_name)
                        ]]))
                    print("\n".join(lines))
                    return_code = 1

            return return_code

        if key.startswith(Consts.PREFIX_DB_MARKER):
            kvstore_prefix_db = deserialize_thrift_object(
                value.value, lsdb_types.PrefixDatabase)
            node_name = kvstore_prefix_db.thisNodeName
            kvstore_prefix_node_names.add(node_name)
            if node_name not in decision_prefix_dbs:
                print(
                    printing.render_vertical_table([[
                        "node {}'s prefix db is missing in Decision".format(
                            node_name)
                    ]]))
                return 1
            decision_prefix_db = decision_prefix_dbs[node_name]
            decision_prefix_set = {}
            utils.update_global_prefix_db(decision_prefix_set,
                                          decision_prefix_db)
            lines = utils.sprint_prefixes_db_delta(decision_prefix_set,
                                                   kvstore_prefix_db)
            if lines:
                print(
                    printing.render_vertical_table([[
                        "node {}'s prefix db in Decision out of sync with KvStore's"
                        .format(node_name)
                    ]]))
                print("\n".join(lines))
                return 1

            return 0