)]}'
{"watcher/decision_engine/model/collector/nova.py":[{"author":{"_account_id":1028,"name":"tmetsch","username":"tmetsch"},"change_message_id":"b8d5a6642490283dab4adcff9b471b50b4bb1db8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- encoding: utf-8 -*-"},{"line_number":2,"context_line":"# Copyright (c) 2015 b\u003c\u003ecom"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Authors: Jean-Emile DARTOIS \u003cjean-emile.dartois@b-com.com\u003e"},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a3c09a3_41078b81","line":3,"updated":"2017-01-18 09:21:32.000000000","message":"Just a minor - but can we add Intel back in for (c) and authors?","commit_id":"1b91e007eee1202de154ec88ab5a3c58f955289a"},{"author":{"_account_id":1028,"name":"tmetsch","username":"tmetsch"},"change_message_id":"b8d5a6642490283dab4adcff9b471b50b4bb1db8","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        return builder.execute()"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class ModelBuilder(object):"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def __init__(self, osc):"},{"line_number":72,"context_line":"        self.osc \u003d osc"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a3c09a3_01582355","line":69,"updated":"2017-01-18 09:21:32.000000000","message":"Add a note on why there is commented out code :-)","commit_id":"1b91e007eee1202de154ec88ab5a3c58f955289a"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"83500d1dcc698ab83398085f679c895cd6f88ca7","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class ModelBuilder(object):"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def __init__(self, osc):"},{"line_number":72,"context_line":"        self.osc \u003d osc"},{"line_number":73,"context_line":"        self.model \u003d model_root.ModelRoot()"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a3c09a3_36ce6e2e","line":70,"updated":"2017-01-18 08:46:48.000000000","message":"Vincent, please add Note notifying the reviewer that we \nvoluntarily do not remove comment lines, because we\u0027re integrating the rest of code soon.","commit_id":"1b91e007eee1202de154ec88ab5a3c58f955289a"},{"author":{"_account_id":1028,"name":"tmetsch","username":"tmetsch"},"change_message_id":"b8d5a6642490283dab4adcff9b471b50b4bb1db8","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        compute_node \u003d self.build_compute_node(node)"},{"line_number":91,"context_line":"        self.model.add_node(compute_node)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        # # Build \u0026 add disk, memory, network and cpu nodes."},{"line_number":94,"context_line":"        # disk_id, disk_node \u003d self.build_disk_compute_node(base_id, node)"},{"line_number":95,"context_line":"        # self.add_node(disk_id, disk_node)"},{"line_number":96,"context_line":"        # mem_id, mem_node \u003d self.build_memory_compute_node(base_id, node)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a3c09a3_610ac78b","line":93,"updated":"2017-01-18 09:21:32.000000000","message":"Suggestion - add a note that we can encapsulate capabilities of the node (special instruction sets of CPUs) in the attributes; as well as sub-nodes can be added re-presenting e.g. GPUs/Accelerators etc.","commit_id":"1b91e007eee1202de154ec88ab5a3c58f955289a"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"83500d1dcc698ab83398085f679c895cd6f88ca7","unresolved":false,"context_lines":[{"line_number":200,"context_line":"                    cnode_uuid)"},{"line_number":201,"context_line":"                # Connect the instance to its compute node"},{"line_number":202,"context_line":"                self.model.add_edge("},{"line_number":203,"context_line":"                    instance, compute_node, label\u003d\u0027RUNS_ON\u0027)"},{"line_number":204,"context_line":"            except exception.ComputeNodeNotFound:"},{"line_number":205,"context_line":"                continue"},{"line_number":206,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a3c09a3_19a365b3","line":203,"range":{"start_line":203,"start_character":0,"end_line":203,"end_character":60},"updated":"2017-01-18 08:46:48.000000000","message":"we need to create the edge in the opposite way. So:\n           compute_node, instance, label\u003d\u0027HOST\u0027)","commit_id":"1b91e007eee1202de154ec88ab5a3c58f955289a"},{"author":{"_account_id":1028,"name":"tmetsch","username":"tmetsch"},"change_message_id":"b8d5a6642490283dab4adcff9b471b50b4bb1db8","unresolved":false,"context_lines":[{"line_number":200,"context_line":"                    cnode_uuid)"},{"line_number":201,"context_line":"                # Connect the instance to its compute node"},{"line_number":202,"context_line":"                self.model.add_edge("},{"line_number":203,"context_line":"                    instance, compute_node, label\u003d\u0027RUNS_ON\u0027)"},{"line_number":204,"context_line":"            except exception.ComputeNodeNotFound:"},{"line_number":205,"context_line":"                continue"},{"line_number":206,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a3c09a3_846d01ce","line":203,"range":{"start_line":203,"start_character":0,"end_line":203,"end_character":60},"in_reply_to":"7a3c09a3_19a365b3","updated":"2017-01-18 09:21:32.000000000","message":"I\u0027d personally prefer higher layers to lower layers approach. Also encapsulation defines the direction :-)","commit_id":"1b91e007eee1202de154ec88ab5a3c58f955289a"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"83500d1dcc698ab83398085f679c895cd6f88ca7","unresolved":false,"context_lines":[{"line_number":217,"context_line":"            \"uuid\": instance.id,"},{"line_number":218,"context_line":"            \"human_id\": instance.human_id,"},{"line_number":219,"context_line":"            \"memory\": flavor.ram,"},{"line_number":220,"context_line":"            \"disk\": flavor.disk,"},{"line_number":221,"context_line":"            \"vcpus\": flavor.vcpus,"},{"line_number":222,"context_line":"            \"state\": getattr(instance, \"OS-EXT-STS:vm_state\")}"},{"line_number":223,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a3c09a3_390bc18f","line":220,"range":{"start_line":220,"start_character":0,"end_line":220,"end_character":32},"updated":"2017-01-18 08:46:48.000000000","message":"add disk_capacity: flavor.disk,","commit_id":"1b91e007eee1202de154ec88ab5a3c58f955289a"},{"author":{"_account_id":1028,"name":"tmetsch","username":"tmetsch"},"change_message_id":"b8d5a6642490283dab4adcff9b471b50b4bb1db8","unresolved":false,"context_lines":[{"line_number":346,"context_line":"    def execute(self):"},{"line_number":347,"context_line":"        \"\"\"Instantiates the graph with the openstack cluster data."},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        The graph is populated along three layers, service, virtual and"},{"line_number":350,"context_line":"        physical. As each new layer is built connections are made back to"},{"line_number":351,"context_line":"        previous layers."},{"line_number":352,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a3c09a3_012023f6","line":349,"updated":"2017-01-18 09:21:32.000000000","message":"I think this should read \"two layers\" for now :-)","commit_id":"1b91e007eee1202de154ec88ab5a3c58f955289a"}],"watcher/decision_engine/model/element/base.py":[{"author":{"_account_id":1028,"name":"tmetsch","username":"tmetsch"},"change_message_id":"b8d5a6642490283dab4adcff9b471b50b4bb1db8","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":33,"context_line":"class Element(base.WatcherObject, base.WatcherObjectDictCompat):"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    # Initial version"},{"line_number":36,"context_line":"    VERSION \u003d \u00271.0\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a3c09a3_24bfedaa","line":33,"updated":"2017-01-18 09:21:32.000000000","message":"So element currently is the \"fallback\", so as we probably need more nodes in future - e.g. to represent GPUs/Accelerators nodes attach to compute node; what about generalizing the attributes so we do not need an new class for each entity in the DC. Attributes could be such as \u0027type\u0027, \u0027layer\u0027, \u0027category\u0027. Which help a lot when traversing the graph later on.","commit_id":"1b91e007eee1202de154ec88ab5a3c58f955289a"}],"watcher/decision_engine/model/element/node.py":[{"author":{"_account_id":1028,"name":"tmetsch","username":"tmetsch"},"change_message_id":"1fa665ef7e54ec5915e3b0d9661607bad4d81254","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        \"state\": wfields.StringField(default\u003dServiceState.ONLINE.value),"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        \"memory\": wfields.NonNegativeIntegerField(),"},{"line_number":41,"context_line":"        \"disk\": wfields.NonNegativeIntegerField(),"},{"line_number":42,"context_line":"        \"disk_capacity\": wfields.NonNegativeIntegerField(),"},{"line_number":43,"context_line":"        \"vcpus\": wfields.NonNegativeIntegerField(),"},{"line_number":44,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a3c09a3_dac8c457","line":41,"updated":"2017-01-18 09:49:31.000000000","message":"Just a minor - in case of overallocation this currently can become negative.","commit_id":"1b91e007eee1202de154ec88ab5a3c58f955289a"}],"watcher/decision_engine/scope/default.py":[{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"83500d1dcc698ab83398085f679c895cd6f88ca7","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    def remove_nodes_from_model(self, nodes_to_remove, cluster_model):"},{"line_number":163,"context_line":"        for node_name in nodes_to_remove:"},{"line_number":164,"context_line":"            node \u003d cluster_model.get_node_by_uuid(node_name)"},{"line_number":165,"context_line":"            instances \u003d copy.copy(cluster_model.get_node_instances(node))"},{"line_number":166,"context_line":"            for instance in instances:"},{"line_number":167,"context_line":"                self.remove_instance(cluster_model, instance, node_name)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a3c09a3_817b337a","line":164,"range":{"start_line":164,"start_character":50,"end_line":164,"end_character":59},"updated":"2017-01-18 08:46:48.000000000","message":"imho, you should rename this variable : s/node_name/node_uuid","commit_id":"1b91e007eee1202de154ec88ab5a3c58f955289a"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"83500d1dcc698ab83398085f679c895cd6f88ca7","unresolved":false,"context_lines":[{"line_number":162,"context_line":"    def remove_nodes_from_model(self, nodes_to_remove, cluster_model):"},{"line_number":163,"context_line":"        for node_name in nodes_to_remove:"},{"line_number":164,"context_line":"            node \u003d cluster_model.get_node_by_uuid(node_name)"},{"line_number":165,"context_line":"            instances \u003d copy.copy(cluster_model.get_node_instances(node))"},{"line_number":166,"context_line":"            for instance in instances:"},{"line_number":167,"context_line":"                self.remove_instance(cluster_model, instance, node_name)"},{"line_number":168,"context_line":"            cluster_model.remove_node(node)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a3c09a3_e11eb70a","line":165,"range":{"start_line":165,"start_character":0,"end_line":165,"end_character":73},"updated":"2017-01-18 08:46:48.000000000","message":"we already have a copy in get_node_instances() method. you don\u0027t need to copy again here the list","commit_id":"1b91e007eee1202de154ec88ab5a3c58f955289a"}],"watcher/decision_engine/strategy/strategies/basic_consolidation.py":[{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"83500d1dcc698ab83398085f679c895cd6f88ca7","unresolved":false,"context_lines":[{"line_number":386,"context_line":"            if node.status \u003d\u003d element.ServiceState.ENABLED.value:"},{"line_number":387,"context_line":"                self.number_of_enabled_nodes +\u003d 1"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"            count \u003d self.compute_model.get_node_instances(node)"},{"line_number":390,"context_line":"            if len(count) \u003e 0:"},{"line_number":391,"context_line":"                result \u003d self.calculate_score_node(node)"},{"line_number":392,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a3c09a3_61c00751","line":389,"range":{"start_line":389,"start_character":12,"end_line":389,"end_character":17},"updated":"2017-01-18 08:46:48.000000000","message":"s/count/instances","commit_id":"1b91e007eee1202de154ec88ab5a3c58f955289a"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"83500d1dcc698ab83398085f679c895cd6f88ca7","unresolved":false,"context_lines":[{"line_number":393,"context_line":"                # The node has not VMs"},{"line_number":394,"context_line":"                result \u003d 0"},{"line_number":395,"context_line":"            if len(count) \u003e 0:"},{"line_number":396,"context_line":"                score.append((node.uuid, result))"},{"line_number":397,"context_line":"        return score"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"    def node_and_instance_score(self, sorted_scores):"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a3c09a3_c198db7a","line":396,"range":{"start_line":396,"start_character":0,"end_line":396,"end_character":49},"updated":"2017-01-18 08:46:48.000000000","message":"this line can be move in the first condition block above.","commit_id":"1b91e007eee1202de154ec88ab5a3c58f955289a"}]}
