)]}'
{"watcher/decision_engine/strategy/strategies/vm_workload_consolidation.py":[{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"c7c7aa4477385960d4de21539c9034ebc4c526c8","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from oslo_log import log"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from watcher._i18n import _LE"},{"line_number":23,"context_line":"from watcher.common.exception import NoDataFound"},{"line_number":24,"context_line":"from watcher.common.exception import WatcherException"},{"line_number":25,"context_line":"from watcher.decision_engine.model import hypervisor_state as hyper_state"},{"line_number":26,"context_line":"from watcher.decision_engine.model import resource"},{"line_number":27,"context_line":"from watcher.decision_engine.model import vm_state"}],"source_content_type":"text/x-python","patch_set":5,"id":"5aef4532_cf9e2d62","line":24,"range":{"start_line":23,"start_character":0,"end_line":24,"end_character":53},"updated":"2016-03-10 16:34:20.000000000","message":"According to http://docs.openstack.org/developer/hacking/#imports, you should import the module exception (and not the object itself)","commit_id":"473d67c2f5163a2240b66d4b0e10b1708ad9334d"},{"author":{"_account_id":20969,"name":"Vojtech Cima","email":"cima@zhaw.ch","username":"vojtechcima"},"change_message_id":"9150026945b8b7f228f04859addd0ad494f890f3","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from oslo_log import log"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from watcher._i18n import _LE"},{"line_number":23,"context_line":"from watcher.common.exception import NoDataFound"},{"line_number":24,"context_line":"from watcher.common.exception import WatcherException"},{"line_number":25,"context_line":"from watcher.decision_engine.model import hypervisor_state as hyper_state"},{"line_number":26,"context_line":"from watcher.decision_engine.model import resource"},{"line_number":27,"context_line":"from watcher.decision_engine.model import vm_state"}],"source_content_type":"text/x-python","patch_set":5,"id":"3afc51ec_358a34c0","line":24,"range":{"start_line":23,"start_character":0,"end_line":24,"end_character":53},"in_reply_to":"5aef4532_cf9e2d62","updated":"2016-03-14 09:23:19.000000000","message":"Noted.","commit_id":"473d67c2f5163a2240b66d4b0e10b1708ad9334d"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"c7c7aa4477385960d4de21539c9034ebc4c526c8","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    def ceilometer(self, ceilometer):"},{"line_number":58,"context_line":"        self._ceilometer \u003d ceilometer"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def activate_hypervisor(self, hypervisor):"},{"line_number":61,"context_line":"        \"\"\"Adds an action for hypervisor activation into the solution."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        :param hypervisor: hypervisor object"}],"source_content_type":"text/x-python","patch_set":5,"id":"5aef4532_b2e18a2c","line":60,"range":{"start_line":60,"start_character":34,"end_line":60,"end_character":44},"updated":"2016-03-10 16:34:20.000000000","message":"ditto","commit_id":"473d67c2f5163a2240b66d4b0e10b1708ad9334d"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"c7c7aa4477385960d4de21539c9034ebc4c526c8","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    def ceilometer(self, ceilometer):"},{"line_number":58,"context_line":"        self._ceilometer \u003d ceilometer"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def activate_hypervisor(self, hypervisor):"},{"line_number":61,"context_line":"        \"\"\"Adds an action for hypervisor activation into the solution."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        :param hypervisor: hypervisor object"}],"source_content_type":"text/x-python","patch_set":5,"id":"5aef4532_7294228a","line":60,"range":{"start_line":60,"start_character":8,"end_line":60,"end_character":27},"updated":"2016-03-10 16:34:20.000000000","message":"hypervisor is not, from my point of view, the correct term.\nYou do not activate the hypervisor (qemu or other), but you will just enable the Nova compute service on a host.\n\nIMO, try to use Nova terminology because you will manipulate nova objects by using nova api. And I note, the term \u0027hypervisor\u0027 used in Watcher is wrongly used. It could be addressed by another bug/patchset.","commit_id":"473d67c2f5163a2240b66d4b0e10b1708ad9334d"},{"author":{"_account_id":20969,"name":"Vojtech Cima","email":"cima@zhaw.ch","username":"vojtechcima"},"change_message_id":"9150026945b8b7f228f04859addd0ad494f890f3","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    def ceilometer(self, ceilometer):"},{"line_number":58,"context_line":"        self._ceilometer \u003d ceilometer"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def activate_hypervisor(self, hypervisor):"},{"line_number":61,"context_line":"        \"\"\"Adds an action for hypervisor activation into the solution."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        :param hypervisor: hypervisor object"}],"source_content_type":"text/x-python","patch_set":5,"id":"3afc51ec_d55f9070","line":60,"range":{"start_line":60,"start_character":8,"end_line":60,"end_character":27},"in_reply_to":"5aef4532_7294228a","updated":"2016-03-14 09:23:19.000000000","message":"I tried to be consistent with Watcher terminology here. Wacher model contains a list of \"hypervisors\". This function adds an action modifying \"hypervisor state\".  Do you really think it\u0027s a good idea use the nova terms here? Nevertheless I agree that using hypervisor in this context a bit confusing.","commit_id":"473d67c2f5163a2240b66d4b0e10b1708ad9334d"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"c7c7aa4477385960d4de21539c9034ebc4c526c8","unresolved":false,"context_lines":[{"line_number":71,"context_line":"            input_parameters\u003dparams)"},{"line_number":72,"context_line":"        self.number_of_released_hypervisors -\u003d 1"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def deactivate_hypervisor(self, hypervisor):"},{"line_number":75,"context_line":"        \"\"\"Adds an action for hypervisor deactivation into the solution."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        :param hypervisor: hypervisor object"}],"source_content_type":"text/x-python","patch_set":5,"id":"5aef4532_92e0ce2a","line":74,"range":{"start_line":74,"start_character":8,"end_line":74,"end_character":29},"updated":"2016-03-10 16:34:20.000000000","message":"ditto","commit_id":"473d67c2f5163a2240b66d4b0e10b1708ad9334d"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"c7c7aa4477385960d4de21539c9034ebc4c526c8","unresolved":false,"context_lines":[{"line_number":85,"context_line":"            input_parameters\u003dparams)"},{"line_number":86,"context_line":"        self.number_of_released_hypervisors +\u003d 1"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def add_migration(self, vm_uuid, src_hypervisor,"},{"line_number":89,"context_line":"                      dst_hypervisor, model):"},{"line_number":90,"context_line":"        \"\"\"Adds an action for VM migration into the solution."},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5aef4532_92c72e95","line":88,"range":{"start_line":88,"start_character":37,"end_line":88,"end_character":51},"updated":"2016-03-10 16:34:20.000000000","message":"ditto","commit_id":"473d67c2f5163a2240b66d4b0e10b1708ad9334d"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"c7c7aa4477385960d4de21539c9034ebc4c526c8","unresolved":false,"context_lines":[{"line_number":85,"context_line":"            input_parameters\u003dparams)"},{"line_number":86,"context_line":"        self.number_of_released_hypervisors +\u003d 1"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def add_migration(self, vm_uuid, src_hypervisor,"},{"line_number":89,"context_line":"                      dst_hypervisor, model):"},{"line_number":90,"context_line":"        \"\"\"Adds an action for VM migration into the solution."},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5aef4532_f2d5d242","line":88,"range":{"start_line":88,"start_character":28,"end_line":88,"end_character":35},"updated":"2016-03-10 16:34:20.000000000","message":"ditto","commit_id":"473d67c2f5163a2240b66d4b0e10b1708ad9334d"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"c7c7aa4477385960d4de21539c9034ebc4c526c8","unresolved":false,"context_lines":[{"line_number":85,"context_line":"            input_parameters\u003dparams)"},{"line_number":86,"context_line":"        self.number_of_released_hypervisors +\u003d 1"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def add_migration(self, vm_uuid, src_hypervisor,"},{"line_number":89,"context_line":"                      dst_hypervisor, model):"},{"line_number":90,"context_line":"        \"\"\"Adds an action for VM migration into the solution."},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5aef4532_ef9a0913","line":88,"range":{"start_line":88,"start_character":8,"end_line":88,"end_character":21},"updated":"2016-03-10 16:34:20.000000000","message":"s/add_migration/migrate_server\n. migrate is the action\n. server is the resource type according nova terminology","commit_id":"473d67c2f5163a2240b66d4b0e10b1708ad9334d"},{"author":{"_account_id":20969,"name":"Vojtech Cima","email":"cima@zhaw.ch","username":"vojtechcima"},"change_message_id":"9150026945b8b7f228f04859addd0ad494f890f3","unresolved":false,"context_lines":[{"line_number":85,"context_line":"            input_parameters\u003dparams)"},{"line_number":86,"context_line":"        self.number_of_released_hypervisors +\u003d 1"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def add_migration(self, vm_uuid, src_hypervisor,"},{"line_number":89,"context_line":"                      dst_hypervisor, model):"},{"line_number":90,"context_line":"        \"\"\"Adds an action for VM migration into the solution."},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3afc51ec_f5e8cc7e","line":88,"range":{"start_line":88,"start_character":8,"end_line":88,"end_character":21},"in_reply_to":"5aef4532_ef9a0913","updated":"2016-03-14 09:23:19.000000000","message":"Strategy only generates a solution which contains a list of actions but doesn\u0027t actually triggers the actions. This could be refactored to \"add_migration_action\". In this fashion functions (de)activate_hypervisor should be refactor to something like add_(de)activate_hypervisor_action.","commit_id":"473d67c2f5163a2240b66d4b0e10b1708ad9334d"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"c7c7aa4477385960d4de21539c9034ebc4c526c8","unresolved":false,"context_lines":[{"line_number":125,"context_line":"                                 input_parameters\u003dparams)"},{"line_number":126,"context_line":"        self.number_of_migrations +\u003d 1"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def deactivate_unused_hypervisors(self, model):"},{"line_number":129,"context_line":"        \"\"\"Generates actions for deactivation of unused hypervisors."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        :param model: model_root object"}],"source_content_type":"text/x-python","patch_set":5,"id":"5aef4532_3243ba14","line":128,"range":{"start_line":128,"start_character":8,"end_line":128,"end_character":37},"updated":"2016-03-10 16:34:20.000000000","message":"ditto","commit_id":"473d67c2f5163a2240b66d4b0e10b1708ad9334d"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"c7c7aa4477385960d4de21539c9034ebc4c526c8","unresolved":false,"context_lines":[{"line_number":128,"context_line":"    def deactivate_unused_hypervisors(self, model):"},{"line_number":129,"context_line":"        \"\"\"Generates actions for deactivation of unused hypervisors."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        :param model: model_root object"},{"line_number":132,"context_line":"        :return: None"},{"line_number":133,"context_line":"        \"\"\""},{"line_number":134,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5aef4532_72f702d3","line":131,"range":{"start_line":131,"start_character":22,"end_line":131,"end_character":39},"updated":"2016-03-10 16:34:20.000000000","message":"what is model_root ? the cluster data model ?","commit_id":"473d67c2f5163a2240b66d4b0e10b1708ad9334d"},{"author":{"_account_id":20969,"name":"Vojtech Cima","email":"cima@zhaw.ch","username":"vojtechcima"},"change_message_id":"9150026945b8b7f228f04859addd0ad494f890f3","unresolved":false,"context_lines":[{"line_number":128,"context_line":"    def deactivate_unused_hypervisors(self, model):"},{"line_number":129,"context_line":"        \"\"\"Generates actions for deactivation of unused hypervisors."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        :param model: model_root object"},{"line_number":132,"context_line":"        :return: None"},{"line_number":133,"context_line":"        \"\"\""},{"line_number":134,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3afc51ec_959a2813","line":131,"range":{"start_line":131,"start_character":22,"end_line":131,"end_character":39},"in_reply_to":"5aef4532_72f702d3","updated":"2016-03-14 09:23:19.000000000","message":"yes, however, this is in the code refered as ModelRoot - https://github.com/openstack/watcher/blob/master/watcher/decision_engine/model/model_root.py#L27","commit_id":"473d67c2f5163a2240b66d4b0e10b1708ad9334d"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"c7c7aa4477385960d4de21539c9034ebc4c526c8","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        return deepcopy(model)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def get_vm_utilization(self, vm_uuid, model, period\u003d3600, aggr\u003d\u0027avg\u0027):"},{"line_number":149,"context_line":"        \"\"\"Collects cpu, ram and disk utilization statistics of a vm"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        :param vm_uuid: vm object"}],"source_content_type":"text/x-python","patch_set":5,"id":"5aef4532_f2d83255","line":148,"range":{"start_line":148,"start_character":12,"end_line":148,"end_character":14},"updated":"2016-03-10 16:34:20.000000000","message":"s/vm/server","commit_id":"473d67c2f5163a2240b66d4b0e10b1708ad9334d"},{"author":{"_account_id":20969,"name":"Vojtech Cima","email":"cima@zhaw.ch","username":"vojtechcima"},"change_message_id":"9150026945b8b7f228f04859addd0ad494f890f3","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        return deepcopy(model)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def get_vm_utilization(self, vm_uuid, model, period\u003d3600, aggr\u003d\u0027avg\u0027):"},{"line_number":149,"context_line":"        \"\"\"Collects cpu, ram and disk utilization statistics of a vm"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        :param vm_uuid: vm object"}],"source_content_type":"text/x-python","patch_set":5,"id":"3afc51ec_35b19490","line":148,"range":{"start_line":148,"start_character":12,"end_line":148,"end_character":14},"in_reply_to":"5aef4532_f2d83255","updated":"2016-03-14 09:23:19.000000000","message":"In the watcher cluster model there is no mention of \"server\". Nova servers are referred to as VMs.","commit_id":"473d67c2f5163a2240b66d4b0e10b1708ad9334d"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"c7c7aa4477385960d4de21539c9034ebc4c526c8","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        \"\"\"Collect cpu, ram and disk utilization statistics of a hypervisor"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"        :param hypervisor: hypervisor object"},{"line_number":219,"context_line":"        :param model: model_root object"},{"line_number":220,"context_line":"        :param period: seconds"},{"line_number":221,"context_line":"        :param aggr: string"},{"line_number":222,"context_line":"        :return: dict(cpu(number of cores used), ram(MB used), disk(B used))"}],"source_content_type":"text/x-python","patch_set":5,"id":"5aef4532_32b61af9","line":219,"range":{"start_line":219,"start_character":22,"end_line":219,"end_character":32},"updated":"2016-03-10 16:34:20.000000000","message":"ditto","commit_id":"473d67c2f5163a2240b66d4b0e10b1708ad9334d"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"bc8985c80aa14a5865ce73c8d4c9d9778330c5d8","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from oslo_log import log"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from watcher._i18n import _LE"},{"line_number":23,"context_line":"from watcher.common.exception import NoDataFound"},{"line_number":24,"context_line":"from watcher.common.exception import WatcherException"},{"line_number":25,"context_line":"from watcher.decision_engine.model import hypervisor_state as hyper_state"},{"line_number":26,"context_line":"from watcher.decision_engine.model import resource"},{"line_number":27,"context_line":"from watcher.decision_engine.model import vm_state"}],"source_content_type":"text/x-python","patch_set":6,"id":"1af94dfe_0dd1dd57","line":24,"range":{"start_line":23,"start_character":0,"end_line":24,"end_character":53},"updated":"2016-03-16 14:32:22.000000000","message":"nit: can you import the module instead of importing the class please? (see http://docs.openstack.org/developer/hacking/#imports)","commit_id":"40589ef3e0dd36b36bc7f5a57f73bc4f20dab335"},{"author":{"_account_id":20969,"name":"Vojtech Cima","email":"cima@zhaw.ch","username":"vojtechcima"},"change_message_id":"616c9d88bb1dc3c8b08ebc389ba7a8ee1a4c6e00","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from oslo_log import log"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from watcher._i18n import _LE"},{"line_number":23,"context_line":"from watcher.common.exception import NoDataFound"},{"line_number":24,"context_line":"from watcher.common.exception import WatcherException"},{"line_number":25,"context_line":"from watcher.decision_engine.model import hypervisor_state as hyper_state"},{"line_number":26,"context_line":"from watcher.decision_engine.model import resource"},{"line_number":27,"context_line":"from watcher.decision_engine.model import vm_state"}],"source_content_type":"text/x-python","patch_set":6,"id":"1af94dfe_76ef091e","line":24,"range":{"start_line":23,"start_character":0,"end_line":24,"end_character":53},"in_reply_to":"1af94dfe_0dd1dd57","updated":"2016-03-18 16:43:44.000000000","message":"Done","commit_id":"40589ef3e0dd36b36bc7f5a57f73bc4f20dab335"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"bc8985c80aa14a5865ce73c8d4c9d9778330c5d8","unresolved":false,"context_lines":[{"line_number":37,"context_line":"class VMWorkloadConsolidation(base.BaseStrategy):"},{"line_number":38,"context_line":"    DEFAULT_NAME \u003d \u0027vm_workload_consolidation\u0027"},{"line_number":39,"context_line":"    DEFAULT_DESCRIPTION \u003d \u0027VM Workload Consolidation Strategy\u0027"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def __init__(self, name\u003dDEFAULT_NAME, description\u003dDEFAULT_DESCRIPTION,"},{"line_number":42,"context_line":"                 osc\u003dNone):"},{"line_number":43,"context_line":"        super(VMWorkloadConsolidation, self).__init__(name, description, osc)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1af94dfe_2d9db959","line":40,"updated":"2016-03-16 14:32:22.000000000","message":"Can you provide a docstring here following the same kind of template as used in the basic_consolidation strategy? (see https://github.com/openstack/watcher/blob/master/watcher/decision_engine/strategy/strategies/basic_consolidation.py#L45)\n\nFYI, the docstring of plugins are dynamically loaded to generate the HTML documentation.","commit_id":"40589ef3e0dd36b36bc7f5a57f73bc4f20dab335"},{"author":{"_account_id":20969,"name":"Vojtech Cima","email":"cima@zhaw.ch","username":"vojtechcima"},"change_message_id":"616c9d88bb1dc3c8b08ebc389ba7a8ee1a4c6e00","unresolved":false,"context_lines":[{"line_number":37,"context_line":"class VMWorkloadConsolidation(base.BaseStrategy):"},{"line_number":38,"context_line":"    DEFAULT_NAME \u003d \u0027vm_workload_consolidation\u0027"},{"line_number":39,"context_line":"    DEFAULT_DESCRIPTION \u003d \u0027VM Workload Consolidation Strategy\u0027"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def __init__(self, name\u003dDEFAULT_NAME, description\u003dDEFAULT_DESCRIPTION,"},{"line_number":42,"context_line":"                 osc\u003dNone):"},{"line_number":43,"context_line":"        super(VMWorkloadConsolidation, self).__init__(name, description, osc)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1af94dfe_d8fd67b2","line":40,"in_reply_to":"1af94dfe_2d9db959","updated":"2016-03-18 16:43:44.000000000","message":"Done","commit_id":"40589ef3e0dd36b36bc7f5a57f73bc4f20dab335"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"bc8985c80aa14a5865ce73c8d4c9d9778330c5d8","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        vm \u003d model.get_vm_from_id(vm_uuid)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        if vm.state !\u003d vm_state.VMState.ACTIVE:"},{"line_number":102,"context_line":"            \u0027\u0027\u0027"},{"line_number":103,"context_line":"            Watcher curently only supports live VM migration which"},{"line_number":104,"context_line":"            requires VM to be active and both hypervisors to share"},{"line_number":105,"context_line":"            storage. When supported, the block migration may be used"},{"line_number":106,"context_line":"            as a fallback migration mechanism."},{"line_number":107,"context_line":"            TODO check whether this works and consider better exception"},{"line_number":108,"context_line":"            \u0027\u0027\u0027"},{"line_number":109,"context_line":"            LOG.error(\u0027Cannot live migrate VM %s in state %s.\u0027 %"},{"line_number":110,"context_line":"                      (vm_uuid, vm.state.value))"},{"line_number":111,"context_line":"            raise WatcherException"}],"source_content_type":"text/x-python","patch_set":6,"id":"1af94dfe_d5fdb73b","line":108,"range":{"start_line":102,"start_character":12,"end_line":108,"end_character":15},"updated":"2016-03-16 14:32:22.000000000","message":"We now also support block live migration (see https://review.openstack.org/#/c/284164/)\nWe plan later on to make the actipns configurable any time soon as well (see blueprint plugins-parameters)","commit_id":"40589ef3e0dd36b36bc7f5a57f73bc4f20dab335"},{"author":{"_account_id":20969,"name":"Vojtech Cima","email":"cima@zhaw.ch","username":"vojtechcima"},"change_message_id":"616c9d88bb1dc3c8b08ebc389ba7a8ee1a4c6e00","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        vm \u003d model.get_vm_from_id(vm_uuid)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        if vm.state !\u003d vm_state.VMState.ACTIVE:"},{"line_number":102,"context_line":"            \u0027\u0027\u0027"},{"line_number":103,"context_line":"            Watcher curently only supports live VM migration which"},{"line_number":104,"context_line":"            requires VM to be active and both hypervisors to share"},{"line_number":105,"context_line":"            storage. When supported, the block migration may be used"},{"line_number":106,"context_line":"            as a fallback migration mechanism."},{"line_number":107,"context_line":"            TODO check whether this works and consider better exception"},{"line_number":108,"context_line":"            \u0027\u0027\u0027"},{"line_number":109,"context_line":"            LOG.error(\u0027Cannot live migrate VM %s in state %s.\u0027 %"},{"line_number":110,"context_line":"                      (vm_uuid, vm.state.value))"},{"line_number":111,"context_line":"            raise WatcherException"}],"source_content_type":"text/x-python","patch_set":6,"id":"1af94dfe_dbc28152","line":108,"range":{"start_line":102,"start_character":12,"end_line":108,"end_character":15},"in_reply_to":"1af94dfe_d5fdb73b","updated":"2016-03-18 16:43:44.000000000","message":"I see that block live migration is triggered if live migration fails. Does it mean you want to keep the logic which is taking care of migration type only in he applier module?\n\nIf there is a way of triggering block live migration directly before attempting live migration, the process of selecting the right migration type could be partially moved to strategies and prevent live migrations to fail in some obvious cases.","commit_id":"40589ef3e0dd36b36bc7f5a57f73bc4f20dab335"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"4f4aa1db8080e5c4be59cd1b40d9166c4538e2a0","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        vm \u003d model.get_vm_from_id(vm_uuid)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        if vm.state !\u003d vm_state.VMState.ACTIVE:"},{"line_number":102,"context_line":"            \u0027\u0027\u0027"},{"line_number":103,"context_line":"            Watcher curently only supports live VM migration which"},{"line_number":104,"context_line":"            requires VM to be active and both hypervisors to share"},{"line_number":105,"context_line":"            storage. When supported, the block migration may be used"},{"line_number":106,"context_line":"            as a fallback migration mechanism."},{"line_number":107,"context_line":"            TODO check whether this works and consider better exception"},{"line_number":108,"context_line":"            \u0027\u0027\u0027"},{"line_number":109,"context_line":"            LOG.error(\u0027Cannot live migrate VM %s in state %s.\u0027 %"},{"line_number":110,"context_line":"                      (vm_uuid, vm.state.value))"},{"line_number":111,"context_line":"            raise WatcherException"}],"source_content_type":"text/x-python","patch_set":6,"id":"1af94dfe_3ea433b8","line":108,"range":{"start_line":102,"start_character":12,"end_line":108,"end_character":15},"in_reply_to":"1af94dfe_dbc28152","updated":"2016-03-18 17:03:21.000000000","message":"The try-fail-retry approach that has been merged is only a temporary fix. Indeed, I would argue that we should leave this up to the actions which will should know the right configuration. BTW Nova now supports an auto-discovery for the live migration (see blueprint making-live-migration-api-friendly and PS https://review.openstack.org/#/c/275585)","commit_id":"40589ef3e0dd36b36bc7f5a57f73bc4f20dab335"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"bc8985c80aa14a5865ce73c8d4c9d9778330c5d8","unresolved":false,"context_lines":[{"line_number":106,"context_line":"            as a fallback migration mechanism."},{"line_number":107,"context_line":"            TODO check whether this works and consider better exception"},{"line_number":108,"context_line":"            \u0027\u0027\u0027"},{"line_number":109,"context_line":"            LOG.error(\u0027Cannot live migrate VM %s in state %s.\u0027 %"},{"line_number":110,"context_line":"                      (vm_uuid, vm.state.value))"},{"line_number":111,"context_line":"            raise WatcherException"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        migration_type \u003d \u0027live\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"1af94dfe_fc2ee0f8","line":110,"range":{"start_line":109,"start_character":12,"end_line":110,"end_character":48},"updated":"2016-03-16 14:32:22.000000000","message":"can you wrap this string into the _LE() i18n function please?\nAlso, since you have 2 variables to interpolate, can you name them? (see http://docs.openstack.org/developer/oslo.i18n/guidelines.html#adding-variables-to-translated-messages)","commit_id":"40589ef3e0dd36b36bc7f5a57f73bc4f20dab335"},{"author":{"_account_id":20969,"name":"Vojtech Cima","email":"cima@zhaw.ch","username":"vojtechcima"},"change_message_id":"616c9d88bb1dc3c8b08ebc389ba7a8ee1a4c6e00","unresolved":false,"context_lines":[{"line_number":106,"context_line":"            as a fallback migration mechanism."},{"line_number":107,"context_line":"            TODO check whether this works and consider better exception"},{"line_number":108,"context_line":"            \u0027\u0027\u0027"},{"line_number":109,"context_line":"            LOG.error(\u0027Cannot live migrate VM %s in state %s.\u0027 %"},{"line_number":110,"context_line":"                      (vm_uuid, vm.state.value))"},{"line_number":111,"context_line":"            raise WatcherException"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        migration_type \u003d \u0027live\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"1af94dfe_71ef131e","line":110,"range":{"start_line":109,"start_character":12,"end_line":110,"end_character":48},"in_reply_to":"1af94dfe_fc2ee0f8","updated":"2016-03-18 16:43:44.000000000","message":"Done","commit_id":"40589ef3e0dd36b36bc7f5a57f73bc4f20dab335"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"bc8985c80aa14a5865ce73c8d4c9d9778330c5d8","unresolved":false,"context_lines":[{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        ram_alloc_metric \u003d \u0027memory\u0027"},{"line_number":165,"context_line":"        disk_alloc_metric \u003d \u0027disk.root.size\u0027"},{"line_number":166,"context_line":"        vm_cpu_util \u003d \\"},{"line_number":167,"context_line":"            self.ceilometer.statistic_aggregation(resource_id\u003dvm_uuid,"},{"line_number":168,"context_line":"                                                  meter_name\u003dcpu_util_metric,"},{"line_number":169,"context_line":"                                                  period\u003dperiod,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1af94dfe_ff3a5297","line":166,"range":{"start_line":166,"start_character":22,"end_line":166,"end_character":23},"updated":"2016-03-16 14:32:22.000000000","message":"As a whole, can you avoid \u0027\\\u0027 to escape an end of line and instead wrap your expression in \u0027()\u0027?\n(This is one not a hard rule, just a nice to have)","commit_id":"40589ef3e0dd36b36bc7f5a57f73bc4f20dab335"},{"author":{"_account_id":20969,"name":"Vojtech Cima","email":"cima@zhaw.ch","username":"vojtechcima"},"change_message_id":"616c9d88bb1dc3c8b08ebc389ba7a8ee1a4c6e00","unresolved":false,"context_lines":[{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        ram_alloc_metric \u003d \u0027memory\u0027"},{"line_number":165,"context_line":"        disk_alloc_metric \u003d \u0027disk.root.size\u0027"},{"line_number":166,"context_line":"        vm_cpu_util \u003d \\"},{"line_number":167,"context_line":"            self.ceilometer.statistic_aggregation(resource_id\u003dvm_uuid,"},{"line_number":168,"context_line":"                                                  meter_name\u003dcpu_util_metric,"},{"line_number":169,"context_line":"                                                  period\u003dperiod,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1af94dfe_78089328","line":166,"range":{"start_line":166,"start_character":22,"end_line":166,"end_character":23},"in_reply_to":"1af94dfe_ff3a5297","updated":"2016-03-18 16:43:44.000000000","message":"Done","commit_id":"40589ef3e0dd36b36bc7f5a57f73bc4f20dab335"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"bc8985c80aa14a5865ce73c8d4c9d9778330c5d8","unresolved":false,"context_lines":[{"line_number":348,"context_line":"           VM running on hypervisor C which can be achieved with"},{"line_number":349,"context_line":"           one migration instead of two."},{"line_number":350,"context_line":"         * A-\u003eB, B-\u003eA \u003d\u003e remove A-\u003eB and B-\u003eA as they do not result"},{"line_number":351,"context_line":"           in a new VM placement."},{"line_number":352,"context_line":"        :param model: model_root object"},{"line_number":353,"context_line":"        \"\"\""},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"        migrate_actions \u003d ("}],"source_content_type":"text/x-python","patch_set":6,"id":"1af94dfe_526ffdc4","line":352,"range":{"start_line":351,"start_character":33,"end_line":352,"end_character":8},"updated":"2016-03-16 14:32:22.000000000","message":"nit: can you add a blank line here please?","commit_id":"40589ef3e0dd36b36bc7f5a57f73bc4f20dab335"},{"author":{"_account_id":20969,"name":"Vojtech Cima","email":"cima@zhaw.ch","username":"vojtechcima"},"change_message_id":"616c9d88bb1dc3c8b08ebc389ba7a8ee1a4c6e00","unresolved":false,"context_lines":[{"line_number":348,"context_line":"           VM running on hypervisor C which can be achieved with"},{"line_number":349,"context_line":"           one migration instead of two."},{"line_number":350,"context_line":"         * A-\u003eB, B-\u003eA \u003d\u003e remove A-\u003eB and B-\u003eA as they do not result"},{"line_number":351,"context_line":"           in a new VM placement."},{"line_number":352,"context_line":"        :param model: model_root object"},{"line_number":353,"context_line":"        \"\"\""},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"        migrate_actions \u003d ("}],"source_content_type":"text/x-python","patch_set":6,"id":"1af94dfe_d8b8c713","line":352,"range":{"start_line":351,"start_character":33,"end_line":352,"end_character":8},"in_reply_to":"1af94dfe_526ffdc4","updated":"2016-03-18 16:43:44.000000000","message":"Done","commit_id":"40589ef3e0dd36b36bc7f5a57f73bc4f20dab335"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"bc8985c80aa14a5865ce73c8d4c9d9778330c5d8","unresolved":false,"context_lines":[{"line_number":381,"context_line":"        the least CPU utilized VM first as live migration these"},{"line_number":382,"context_line":"        generaly causes less troubles. This phase results in a cluster"},{"line_number":383,"context_line":"        with no overloaded hypervisors."},{"line_number":384,"context_line":"        :param model: model_root object"},{"line_number":385,"context_line":"        :param cc: dictionary containing resource capacity coefficients"},{"line_number":386,"context_line":"        * This phase is be able to activate turned off hypervisors (if needed"},{"line_number":387,"context_line":"        and any available) in the case of the resource capacity provided by"},{"line_number":388,"context_line":"        active hypervisors is not able to accomodate all the load."}],"source_content_type":"text/x-python","patch_set":6,"id":"1af94dfe_28480787","line":385,"range":{"start_line":384,"start_character":0,"end_line":385,"end_character":71},"updated":"2016-03-16 14:32:22.000000000","message":"nit: can you move this below the comment that follows? I would also add an extra blank line to make it easier to read/","commit_id":"40589ef3e0dd36b36bc7f5a57f73bc4f20dab335"},{"author":{"_account_id":20969,"name":"Vojtech Cima","email":"cima@zhaw.ch","username":"vojtechcima"},"change_message_id":"616c9d88bb1dc3c8b08ebc389ba7a8ee1a4c6e00","unresolved":false,"context_lines":[{"line_number":381,"context_line":"        the least CPU utilized VM first as live migration these"},{"line_number":382,"context_line":"        generaly causes less troubles. This phase results in a cluster"},{"line_number":383,"context_line":"        with no overloaded hypervisors."},{"line_number":384,"context_line":"        :param model: model_root object"},{"line_number":385,"context_line":"        :param cc: dictionary containing resource capacity coefficients"},{"line_number":386,"context_line":"        * This phase is be able to activate turned off hypervisors (if needed"},{"line_number":387,"context_line":"        and any available) in the case of the resource capacity provided by"},{"line_number":388,"context_line":"        active hypervisors is not able to accomodate all the load."}],"source_content_type":"text/x-python","patch_set":6,"id":"1af94dfe_b8c7bb94","line":385,"range":{"start_line":384,"start_character":0,"end_line":385,"end_character":71},"in_reply_to":"1af94dfe_28480787","updated":"2016-03-18 16:43:44.000000000","message":"Done","commit_id":"40589ef3e0dd36b36bc7f5a57f73bc4f20dab335"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"bc8985c80aa14a5865ce73c8d4c9d9778330c5d8","unresolved":false,"context_lines":[{"line_number":451,"context_line":"         * Consolidation phase - handling under-utilized resources"},{"line_number":452,"context_line":"         * Solution optimization - reducing number of migrations"},{"line_number":453,"context_line":"         * Deactivation of unused hypervisors"},{"line_number":454,"context_line":"        :param original_model: root_model object"},{"line_number":455,"context_line":"        * A capacity coefficient (cc) might be used to adjust optimization"},{"line_number":456,"context_line":"        thresholds. Different resources may require different coefficient"},{"line_number":457,"context_line":"        values as well as setting up different coefficient values in both"}],"source_content_type":"text/x-python","patch_set":6,"id":"1af94dfe_a82b7793","line":454,"range":{"start_line":454,"start_character":8,"end_line":454,"end_character":48},"updated":"2016-03-16 14:32:22.000000000","message":"ditto","commit_id":"40589ef3e0dd36b36bc7f5a57f73bc4f20dab335"},{"author":{"_account_id":20969,"name":"Vojtech Cima","email":"cima@zhaw.ch","username":"vojtechcima"},"change_message_id":"616c9d88bb1dc3c8b08ebc389ba7a8ee1a4c6e00","unresolved":false,"context_lines":[{"line_number":451,"context_line":"         * Consolidation phase - handling under-utilized resources"},{"line_number":452,"context_line":"         * Solution optimization - reducing number of migrations"},{"line_number":453,"context_line":"         * Deactivation of unused hypervisors"},{"line_number":454,"context_line":"        :param original_model: root_model object"},{"line_number":455,"context_line":"        * A capacity coefficient (cc) might be used to adjust optimization"},{"line_number":456,"context_line":"        thresholds. Different resources may require different coefficient"},{"line_number":457,"context_line":"        values as well as setting up different coefficient values in both"}],"source_content_type":"text/x-python","patch_set":6,"id":"1af94dfe_98ad9feb","line":454,"range":{"start_line":454,"start_character":8,"end_line":454,"end_character":48},"in_reply_to":"1af94dfe_a82b7793","updated":"2016-03-18 16:43:44.000000000","message":"Done","commit_id":"40589ef3e0dd36b36bc7f5a57f73bc4f20dab335"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"bc8985c80aa14a5865ce73c8d4c9d9778330c5d8","unresolved":false,"context_lines":[{"line_number":468,"context_line":""},{"line_number":469,"context_line":"        LOG.info(\"Executing Smart Strategy\")"},{"line_number":470,"context_line":"        model \u003d self.get_prediction_model(original_model)"},{"line_number":471,"context_line":"        cru \u003d self.get_relative_cluster_utilization(model)"},{"line_number":472,"context_line":"        self.ceilometer_vm_data_cache \u003d dict()"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"        cc \u003d {\u0027cpu\u0027: 1.0, \u0027ram\u0027: 1.0, \u0027disk\u0027: 1.0}"}],"source_content_type":"text/x-python","patch_set":6,"id":"1af94dfe_fcbd40d8","line":471,"range":{"start_line":471,"start_character":8,"end_line":471,"end_character":11},"updated":"2016-03-16 14:32:22.000000000","message":"s/cru/rcu","commit_id":"40589ef3e0dd36b36bc7f5a57f73bc4f20dab335"},{"author":{"_account_id":20969,"name":"Vojtech Cima","email":"cima@zhaw.ch","username":"vojtechcima"},"change_message_id":"616c9d88bb1dc3c8b08ebc389ba7a8ee1a4c6e00","unresolved":false,"context_lines":[{"line_number":468,"context_line":""},{"line_number":469,"context_line":"        LOG.info(\"Executing Smart Strategy\")"},{"line_number":470,"context_line":"        model \u003d self.get_prediction_model(original_model)"},{"line_number":471,"context_line":"        cru \u003d self.get_relative_cluster_utilization(model)"},{"line_number":472,"context_line":"        self.ceilometer_vm_data_cache \u003d dict()"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"        cc \u003d {\u0027cpu\u0027: 1.0, \u0027ram\u0027: 1.0, \u0027disk\u0027: 1.0}"}],"source_content_type":"text/x-python","patch_set":6,"id":"1af94dfe_78c9b3ab","line":471,"range":{"start_line":471,"start_character":8,"end_line":471,"end_character":11},"in_reply_to":"1af94dfe_fcbd40d8","updated":"2016-03-18 16:43:44.000000000","message":"Done","commit_id":"40589ef3e0dd36b36bc7f5a57f73bc4f20dab335"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"bc8985c80aa14a5865ce73c8d4c9d9778330c5d8","unresolved":false,"context_lines":[{"line_number":485,"context_line":"        # Deactivate unused hypervisors"},{"line_number":486,"context_line":"        self.deactivate_unused_hypervisors(model)"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"        cru_after \u003d self.get_relative_cluster_utilization(model)"},{"line_number":489,"context_line":"        info \u003d {"},{"line_number":490,"context_line":"            \u0027number_of_migrations\u0027: self.number_of_migrations,"},{"line_number":491,"context_line":"            \u0027number_of_released_hypervisors\u0027:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1af94dfe_3c2a082d","line":488,"range":{"start_line":488,"start_character":8,"end_line":488,"end_character":17},"updated":"2016-03-16 14:32:22.000000000","message":"s/cru_after/rcu_after","commit_id":"40589ef3e0dd36b36bc7f5a57f73bc4f20dab335"},{"author":{"_account_id":20969,"name":"Vojtech Cima","email":"cima@zhaw.ch","username":"vojtechcima"},"change_message_id":"616c9d88bb1dc3c8b08ebc389ba7a8ee1a4c6e00","unresolved":false,"context_lines":[{"line_number":485,"context_line":"        # Deactivate unused hypervisors"},{"line_number":486,"context_line":"        self.deactivate_unused_hypervisors(model)"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"        cru_after \u003d self.get_relative_cluster_utilization(model)"},{"line_number":489,"context_line":"        info \u003d {"},{"line_number":490,"context_line":"            \u0027number_of_migrations\u0027: self.number_of_migrations,"},{"line_number":491,"context_line":"            \u0027number_of_released_hypervisors\u0027:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1af94dfe_f8e66342","line":488,"range":{"start_line":488,"start_character":8,"end_line":488,"end_character":17},"in_reply_to":"1af94dfe_3c2a082d","updated":"2016-03-18 16:43:44.000000000","message":"Done","commit_id":"40589ef3e0dd36b36bc7f5a57f73bc4f20dab335"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"bc8985c80aa14a5865ce73c8d4c9d9778330c5d8","unresolved":false,"context_lines":[{"line_number":497,"context_line":"        LOG.debug(info)"},{"line_number":498,"context_line":""},{"line_number":499,"context_line":"        self.solution.model \u003d model"},{"line_number":500,"context_line":"        self.solution.efficacy \u003d cru_after[\u0027cpu\u0027]"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"        return self.solution"}],"source_content_type":"text/x-python","patch_set":6,"id":"1af94dfe_3c868813","line":500,"range":{"start_line":500,"start_character":33,"end_line":500,"end_character":42},"updated":"2016-03-16 14:32:22.000000000","message":"ditto","commit_id":"40589ef3e0dd36b36bc7f5a57f73bc4f20dab335"},{"author":{"_account_id":20969,"name":"Vojtech Cima","email":"cima@zhaw.ch","username":"vojtechcima"},"change_message_id":"616c9d88bb1dc3c8b08ebc389ba7a8ee1a4c6e00","unresolved":false,"context_lines":[{"line_number":497,"context_line":"        LOG.debug(info)"},{"line_number":498,"context_line":""},{"line_number":499,"context_line":"        self.solution.model \u003d model"},{"line_number":500,"context_line":"        self.solution.efficacy \u003d cru_after[\u0027cpu\u0027]"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"        return self.solution"}],"source_content_type":"text/x-python","patch_set":6,"id":"1af94dfe_d8e1e72b","line":500,"range":{"start_line":500,"start_character":33,"end_line":500,"end_character":42},"in_reply_to":"1af94dfe_3c868813","updated":"2016-03-18 16:43:44.000000000","message":"Done","commit_id":"40589ef3e0dd36b36bc7f5a57f73bc4f20dab335"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"e054bb5c68e8129c3fc314aae644a15217aeecd4","unresolved":false,"context_lines":[{"line_number":28,"context_line":"from watcher.metrics_engine.cluster_history import ceilometer \\"},{"line_number":29,"context_line":"    as ceilometer_cluster_history"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"from copy import deepcopy"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa0719c6_063a9736","line":31,"range":{"start_line":31,"start_character":0,"end_line":31,"end_character":25},"updated":"2016-03-21 08:28:09.000000000","message":"Can you make sure your imports are sorted as described in http://docs.openstack.org/developer/hacking/#real-world-import-order-examples ?\nIn this case this is part of the standard library so it should move in the first import block whereas the \u0027olso_log\u0027 import line 20 should be in the second block (3rd party imports)","commit_id":"a541358b58fd34079b6a067188924d2d33c80749"}],"watcher/tests/decision_engine/strategy/strategies/faker_cluster_and_metrics.py":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"bc8985c80aa14a5865ce73c8d4c9d9778330c5d8","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        mem \u003d resource.Resource(resource.ResourceType.memory)"},{"line_number":44,"context_line":"        num_cores \u003d resource.Resource(resource.ResourceType.cpu_cores)"},{"line_number":45,"context_line":"        disk \u003d resource.Resource(resource.ResourceType.disk)"},{"line_number":46,"context_line":"        disk_capacity \u003d\\"},{"line_number":47,"context_line":"            resource.Resource(resource.ResourceType.disk_capacity)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        current_state_cluster.create_resource(mem)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1af94dfe_b2ff61a9","line":46,"range":{"start_line":46,"start_character":22,"end_line":46,"end_character":23},"updated":"2016-03-16 14:32:22.000000000","message":"missing whitespace here","commit_id":"40589ef3e0dd36b36bc7f5a57f73bc4f20dab335"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"bc8985c80aa14a5865ce73c8d4c9d9778330c5d8","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        mem \u003d resource.Resource(resource.ResourceType.memory)"},{"line_number":44,"context_line":"        num_cores \u003d resource.Resource(resource.ResourceType.cpu_cores)"},{"line_number":45,"context_line":"        disk \u003d resource.Resource(resource.ResourceType.disk)"},{"line_number":46,"context_line":"        disk_capacity \u003d\\"},{"line_number":47,"context_line":"            resource.Resource(resource.ResourceType.disk_capacity)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        current_state_cluster.create_resource(mem)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1af94dfe_92fa25bc","line":46,"range":{"start_line":46,"start_character":23,"end_line":46,"end_character":24},"updated":"2016-03-16 14:32:22.000000000","message":"same remark as previously: can you avoid backslahes for line breaks? Instead, can you wrap your expressions in parenthesis?","commit_id":"40589ef3e0dd36b36bc7f5a57f73bc4f20dab335"}],"watcher/tests/decision_engine/strategy/strategies/test_vm_workload_consolidation.py":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"bc8985c80aa14a5865ce73c8d4c9d9778330c5d8","unresolved":false,"context_lines":[{"line_number":17,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":18,"context_line":"# limitations under the License."},{"line_number":19,"context_line":"#"},{"line_number":20,"context_line":"from watcher.tests import base"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import mock"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from watcher.decision_engine.strategy.strategies.vm_workload_consolidation \\"},{"line_number":25,"context_line":"    import VMWorkloadConsolidation"},{"line_number":26,"context_line":"from watcher.tests.decision_engine.strategy.strategies \\"},{"line_number":27,"context_line":"    import faker_cluster_and_metrics"}],"source_content_type":"text/x-python","patch_set":6,"id":"1af94dfe_753dc3ba","line":24,"range":{"start_line":20,"start_character":0,"end_line":24,"end_character":4},"updated":"2016-03-16 14:32:22.000000000","message":"Can you follow the import order as described in http://docs.openstack.org/developer/hacking/#import-order-template ?","commit_id":"40589ef3e0dd36b36bc7f5a57f73bc4f20dab335"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"bc8985c80aa14a5865ce73c8d4c9d9778330c5d8","unresolved":false,"context_lines":[{"line_number":22,"context_line":"import mock"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from watcher.decision_engine.strategy.strategies.vm_workload_consolidation \\"},{"line_number":25,"context_line":"    import VMWorkloadConsolidation"},{"line_number":26,"context_line":"from watcher.tests.decision_engine.strategy.strategies \\"},{"line_number":27,"context_line":"    import faker_cluster_and_metrics"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1af94dfe_b202c109","line":25,"range":{"start_line":25,"start_character":4,"end_line":25,"end_character":34},"updated":"2016-03-16 14:32:22.000000000","message":"nit: can you import the module instead of the class?","commit_id":"40589ef3e0dd36b36bc7f5a57f73bc4f20dab335"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"e054bb5c68e8129c3fc314aae644a15217aeecd4","unresolved":false,"context_lines":[{"line_number":22,"context_line":"import mock"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from watcher.decision_engine.strategy.strategies.vm_workload_consolidation \\"},{"line_number":25,"context_line":"    import VMWorkloadConsolidation"},{"line_number":26,"context_line":"from watcher.tests.decision_engine.strategy.strategies \\"},{"line_number":27,"context_line":"    import faker_cluster_and_metrics"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa0719c6_666d5332","line":25,"range":{"start_line":25,"start_character":4,"end_line":25,"end_character":34},"updated":"2016-03-21 08:28:09.000000000","message":"nit: can you import the module instead of the class?","commit_id":"a541358b58fd34079b6a067188924d2d33c80749"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"e054bb5c68e8129c3fc314aae644a15217aeecd4","unresolved":false,"context_lines":[{"line_number":17,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":18,"context_line":"# limitations under the License."},{"line_number":19,"context_line":"#"},{"line_number":20,"context_line":"from watcher.tests import base"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import mock"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from watcher.decision_engine.strategy.strategies.vm_workload_consolidation \\"},{"line_number":25,"context_line":"    import VMWorkloadConsolidation"},{"line_number":26,"context_line":"from watcher.tests.decision_engine.strategy.strategies \\"},{"line_number":27,"context_line":"    import faker_cluster_and_metrics"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class TestSmartConsolidation(base.BaseTestCase):"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa0719c6_6626f317","line":27,"range":{"start_line":20,"start_character":0,"end_line":27,"end_character":36},"updated":"2016-03-21 08:28:09.000000000","message":"You missed my comment on PS 6 -\u003e\nCan you follow the import order as described in http://docs.openstack.org/developer/hacking/#import-order-template ?","commit_id":"a541358b58fd34079b6a067188924d2d33c80749"}]}
