)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"282e59ee6ee74b2b84780af948fb522acc577442","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2019-06-06 14:42:40 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Define a new InstanceNotMapped exception"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Ic6c44ae44da7c3b9a1c20e9b24a036063af266ba"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9fb8cfa7_cbc74945","line":8,"updated":"2019-06-06 15:10:06.000000000","message":"Would be nice to explain a bit in the commit message why this change is necessary. My guess is that the ComputeNodeNotFound message could be misleading in the logs if you\u0027re debugging when the actual issue is the instance is not mapped to a node.","commit_id":"91be2532a9203607bd4385bb6aed7aa1c35dfc9e"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"fe909d1c55c0000d4e40bcdd0d706154e294b33a","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2019-06-06 14:42:40 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Define a new InstanceNotMapped exception"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Ic6c44ae44da7c3b9a1c20e9b24a036063af266ba"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9fb8cfa7_96686db9","line":8,"in_reply_to":"9fb8cfa7_cbc74945","updated":"2019-06-10 06:46:11.000000000","message":"yes, you are right:)","commit_id":"91be2532a9203607bd4385bb6aed7aa1c35dfc9e"}],"watcher/common/exception.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"282e59ee6ee74b2b84780af948fb522acc577442","unresolved":false,"context_lines":[{"line_number":447,"context_line":"    msg_fmt \u003d _(\"The instance \u0027%(name)s\u0027 could not be found\")"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":""},{"line_number":450,"context_line":"class InstanceNotMapped(WatcherException):"},{"line_number":451,"context_line":"    msg_fmt \u003d _(\"Can\u0027t find the mapped compute node for instance \u0027%(uuid)\u0027.\")"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_4bbcb9ba","line":450,"range":{"start_line":450,"start_character":24,"end_line":450,"end_character":40},"updated":"2019-06-06 15:10:06.000000000","message":"Do you explicitly want to not extend ComputeResourceNotFound here? I thought about it because of the change here:\n\nhttps://review.opendev.org/#/c/663513/1/watcher/decision_engine/scope/compute.py","commit_id":"91be2532a9203607bd4385bb6aed7aa1c35dfc9e"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"fe909d1c55c0000d4e40bcdd0d706154e294b33a","unresolved":false,"context_lines":[{"line_number":447,"context_line":"    msg_fmt \u003d _(\"The instance \u0027%(name)s\u0027 could not be found\")"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":""},{"line_number":450,"context_line":"class InstanceNotMapped(WatcherException):"},{"line_number":451,"context_line":"    msg_fmt \u003d _(\"Can\u0027t find the mapped compute node for instance \u0027%(uuid)\u0027.\")"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_96adcdea","line":450,"range":{"start_line":450,"start_character":24,"end_line":450,"end_character":40},"in_reply_to":"9fb8cfa7_4bbcb9ba","updated":"2019-06-10 06:46:11.000000000","message":"Done","commit_id":"91be2532a9203607bd4385bb6aed7aa1c35dfc9e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"282e59ee6ee74b2b84780af948fb522acc577442","unresolved":false,"context_lines":[{"line_number":448,"context_line":""},{"line_number":449,"context_line":""},{"line_number":450,"context_line":"class InstanceNotMapped(WatcherException):"},{"line_number":451,"context_line":"    msg_fmt \u003d _(\"Can\u0027t find the mapped compute node for instance \u0027%(uuid)\u0027.\")"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"class ComputeNodeNotFound(ComputeResourceNotFound):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_2b8b851f","line":451,"range":{"start_line":451,"start_character":17,"end_line":451,"end_character":22},"updated":"2019-06-06 15:10:06.000000000","message":"nit: it is good to avoid contractions in messages that could possibly get translated like this.","commit_id":"91be2532a9203607bd4385bb6aed7aa1c35dfc9e"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"fe909d1c55c0000d4e40bcdd0d706154e294b33a","unresolved":false,"context_lines":[{"line_number":448,"context_line":""},{"line_number":449,"context_line":""},{"line_number":450,"context_line":"class InstanceNotMapped(WatcherException):"},{"line_number":451,"context_line":"    msg_fmt \u003d _(\"Can\u0027t find the mapped compute node for instance \u0027%(uuid)\u0027.\")"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"class ComputeNodeNotFound(ComputeResourceNotFound):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_b6a251fb","line":451,"range":{"start_line":451,"start_character":17,"end_line":451,"end_character":22},"in_reply_to":"9fb8cfa7_2b8b851f","updated":"2019-06-10 06:46:11.000000000","message":"Done","commit_id":"91be2532a9203607bd4385bb6aed7aa1c35dfc9e"}],"watcher/decision_engine/model/model_root.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"282e59ee6ee74b2b84780af948fb522acc577442","unresolved":false,"context_lines":[{"line_number":211,"context_line":"                               key\u003dlambda inst: inst.uuid):"},{"line_number":212,"context_line":"            try:"},{"line_number":213,"context_line":"                self.get_node_by_instance_uuid(instance.uuid)"},{"line_number":214,"context_line":"            except (exception.InstanceNotFound, exception.InstanceNotMapped):"},{"line_number":215,"context_line":"                root.append(instance.as_xml_element())"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        return etree.tostring(root, pretty_print\u003dTrue).decode(\u0027utf-8\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_8bd631f1","line":214,"updated":"2019-06-06 15:10:06.000000000","message":"Technically this could also be handling ComputeResourceNotFound because get_node_by_instance_uuid calls _get_by_uuid which raises ComputeResourceNotFound.","commit_id":"91be2532a9203607bd4385bb6aed7aa1c35dfc9e"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"fe909d1c55c0000d4e40bcdd0d706154e294b33a","unresolved":false,"context_lines":[{"line_number":211,"context_line":"                               key\u003dlambda inst: inst.uuid):"},{"line_number":212,"context_line":"            try:"},{"line_number":213,"context_line":"                self.get_node_by_instance_uuid(instance.uuid)"},{"line_number":214,"context_line":"            except (exception.InstanceNotFound, exception.InstanceNotMapped):"},{"line_number":215,"context_line":"                root.append(instance.as_xml_element())"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        return etree.tostring(root, pretty_print\u003dTrue).decode(\u0027utf-8\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_366181d4","line":214,"in_reply_to":"9fb8cfa7_8bd631f1","updated":"2019-06-10 06:46:11.000000000","message":"Done","commit_id":"91be2532a9203607bd4385bb6aed7aa1c35dfc9e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1d11698822afcde924f1b7a5e2ee46c14824bf62","unresolved":false,"context_lines":[{"line_number":211,"context_line":"                               key\u003dlambda inst: inst.uuid):"},{"line_number":212,"context_line":"            try:"},{"line_number":213,"context_line":"                self.get_node_by_instance_uuid(instance.uuid)"},{"line_number":214,"context_line":"            except (exception.InstanceNotFound,"},{"line_number":215,"context_line":"                    exception.ComputeResourceNotFound):"},{"line_number":216,"context_line":"                root.append(instance.as_xml_element())"},{"line_number":217,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9fb8cfa7_e88c4bd8","line":214,"range":{"start_line":214,"start_character":30,"end_line":214,"end_character":46},"updated":"2019-06-11 13:57:31.000000000","message":"This extends ComputeResourceNotFound so technically it\u0027s redundant to have it here with ComputeResourceNotFound since the latter will cover it.","commit_id":"5806455c234208570d93b8ffb11874f22da99fb7"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"f6edf6d982463571aa7628f650f20b7ad7239b2c","unresolved":false,"context_lines":[{"line_number":211,"context_line":"                               key\u003dlambda inst: inst.uuid):"},{"line_number":212,"context_line":"            try:"},{"line_number":213,"context_line":"                self.get_node_by_instance_uuid(instance.uuid)"},{"line_number":214,"context_line":"            except (exception.InstanceNotFound,"},{"line_number":215,"context_line":"                    exception.ComputeResourceNotFound):"},{"line_number":216,"context_line":"                root.append(instance.as_xml_element())"},{"line_number":217,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9fb8cfa7_d10c81a6","line":214,"range":{"start_line":214,"start_character":30,"end_line":214,"end_character":46},"in_reply_to":"9fb8cfa7_e88c4bd8","updated":"2019-06-12 07:29:19.000000000","message":"Done","commit_id":"5806455c234208570d93b8ffb11874f22da99fb7"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"316cb1bf5cb2c1e575fec47d441791cebd543952","unresolved":false,"context_lines":[{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    @lockutils.synchronized(\"model_root\")"},{"line_number":167,"context_line":"    def get_node_by_instance_uuid(self, instance_uuid):"},{"line_number":168,"context_line":"        instance \u003d self._get_by_uuid(instance_uuid)"},{"line_number":169,"context_line":"        for node_uuid in self.neighbors(instance.uuid):"},{"line_number":170,"context_line":"            node \u003d self._get_by_uuid(node_uuid)"},{"line_number":171,"context_line":"            if isinstance(node, element.ComputeNode):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9fb8cfa7_f905ac46","line":168,"range":{"start_line":168,"start_character":19,"end_line":168,"end_character":36},"updated":"2019-06-15 07:57:25.000000000","message":"get_instance_by_uuid is better.","commit_id":"a4d978b8932e00f149b4fe432b4ba912de3e498b"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"0f2b827359e9d1bd0dd13eb94a8b686a3d76615f","unresolved":false,"context_lines":[{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    @lockutils.synchronized(\"model_root\")"},{"line_number":167,"context_line":"    def get_node_by_instance_uuid(self, instance_uuid):"},{"line_number":168,"context_line":"        instance \u003d self._get_by_uuid(instance_uuid)"},{"line_number":169,"context_line":"        for node_uuid in self.neighbors(instance.uuid):"},{"line_number":170,"context_line":"            node \u003d self._get_by_uuid(node_uuid)"},{"line_number":171,"context_line":"            if isinstance(node, element.ComputeNode):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9fb8cfa7_335b4655","line":168,"range":{"start_line":168,"start_character":19,"end_line":168,"end_character":36},"in_reply_to":"9fb8cfa7_4944181c","updated":"2019-06-18 01:38:02.000000000","message":"A little different, when throwing an exception, the information thrown by this method will be more detailed.","commit_id":"a4d978b8932e00f149b4fe432b4ba912de3e498b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e0d427746401e26d7057ba7a4caae9609e399c72","unresolved":false,"context_lines":[{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    @lockutils.synchronized(\"model_root\")"},{"line_number":167,"context_line":"    def get_node_by_instance_uuid(self, instance_uuid):"},{"line_number":168,"context_line":"        instance \u003d self._get_by_uuid(instance_uuid)"},{"line_number":169,"context_line":"        for node_uuid in self.neighbors(instance.uuid):"},{"line_number":170,"context_line":"            node \u003d self._get_by_uuid(node_uuid)"},{"line_number":171,"context_line":"            if isinstance(node, element.ComputeNode):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9fb8cfa7_4944181c","line":168,"range":{"start_line":168,"start_character":19,"end_line":168,"end_character":36},"in_reply_to":"9fb8cfa7_f905ac46","updated":"2019-06-17 14:13:16.000000000","message":"It would do the same thing though wouldn\u0027t it?","commit_id":"a4d978b8932e00f149b4fe432b4ba912de3e498b"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"316cb1bf5cb2c1e575fec47d441791cebd543952","unresolved":false,"context_lines":[{"line_number":167,"context_line":"    def get_node_by_instance_uuid(self, instance_uuid):"},{"line_number":168,"context_line":"        instance \u003d self._get_by_uuid(instance_uuid)"},{"line_number":169,"context_line":"        for node_uuid in self.neighbors(instance.uuid):"},{"line_number":170,"context_line":"            node \u003d self._get_by_uuid(node_uuid)"},{"line_number":171,"context_line":"            if isinstance(node, element.ComputeNode):"},{"line_number":172,"context_line":"                return node"},{"line_number":173,"context_line":"        raise exception.InstanceNotMapped(uuid\u003dinstance_uuid)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9fb8cfa7_1901a038","line":170,"range":{"start_line":170,"start_character":19,"end_line":170,"end_character":36},"updated":"2019-06-15 07:57:25.000000000","message":"get_node_by_uuid is better.","commit_id":"a4d978b8932e00f149b4fe432b4ba912de3e498b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e0d427746401e26d7057ba7a4caae9609e399c72","unresolved":false,"context_lines":[{"line_number":167,"context_line":"    def get_node_by_instance_uuid(self, instance_uuid):"},{"line_number":168,"context_line":"        instance \u003d self._get_by_uuid(instance_uuid)"},{"line_number":169,"context_line":"        for node_uuid in self.neighbors(instance.uuid):"},{"line_number":170,"context_line":"            node \u003d self._get_by_uuid(node_uuid)"},{"line_number":171,"context_line":"            if isinstance(node, element.ComputeNode):"},{"line_number":172,"context_line":"                return node"},{"line_number":173,"context_line":"        raise exception.InstanceNotMapped(uuid\u003dinstance_uuid)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9fb8cfa7_e9486c2f","line":170,"range":{"start_line":170,"start_character":19,"end_line":170,"end_character":36},"in_reply_to":"9fb8cfa7_1901a038","updated":"2019-06-17 14:13:16.000000000","message":"same question","commit_id":"a4d978b8932e00f149b4fe432b4ba912de3e498b"}],"watcher/decision_engine/model/notification/nova.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"282e59ee6ee74b2b84780af948fb522acc577442","unresolved":false,"context_lines":[{"line_number":160,"context_line":"                current_node \u003d ("},{"line_number":161,"context_line":"                    self.cluster_data_model.get_node_by_instance_uuid("},{"line_number":162,"context_line":"                        instance.uuid) or self.get_or_create_node(node.uuid))"},{"line_number":163,"context_line":"            except exception.InstanceNotMapped as exc:"},{"line_number":164,"context_line":"                LOG.exception(exc)"},{"line_number":165,"context_line":"                # If we can\u0027t create the node,"},{"line_number":166,"context_line":"                # we consider the instance as unmapped"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_eb356d47","line":163,"updated":"2019-06-06 15:10:06.000000000","message":"As noted in to_xml get_node_by_instance_uuid could also raise ComputeResourceNotFound - do you want to handle that as well? If you made InstanceNotMapped extend ComputeResourceNotFound then you could just handle ComputeResourceNotFound here and it would cover both cases.","commit_id":"91be2532a9203607bd4385bb6aed7aa1c35dfc9e"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"fe909d1c55c0000d4e40bcdd0d706154e294b33a","unresolved":false,"context_lines":[{"line_number":160,"context_line":"                current_node \u003d ("},{"line_number":161,"context_line":"                    self.cluster_data_model.get_node_by_instance_uuid("},{"line_number":162,"context_line":"                        instance.uuid) or self.get_or_create_node(node.uuid))"},{"line_number":163,"context_line":"            except exception.InstanceNotMapped as exc:"},{"line_number":164,"context_line":"                LOG.exception(exc)"},{"line_number":165,"context_line":"                # If we can\u0027t create the node,"},{"line_number":166,"context_line":"                # we consider the instance as unmapped"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_f685295b","line":163,"in_reply_to":"9fb8cfa7_eb356d47","updated":"2019-06-10 06:46:11.000000000","message":"Done","commit_id":"91be2532a9203607bd4385bb6aed7aa1c35dfc9e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1d11698822afcde924f1b7a5e2ee46c14824bf62","unresolved":false,"context_lines":[{"line_number":159,"context_line":"            try:"},{"line_number":160,"context_line":"                current_node \u003d ("},{"line_number":161,"context_line":"                    self.cluster_data_model.get_node_by_instance_uuid("},{"line_number":162,"context_line":"                        instance.uuid) or self.get_or_create_node(node.uuid))"},{"line_number":163,"context_line":"            except exception.ComputeResourceNotFound as exc:"},{"line_number":164,"context_line":"                LOG.exception(exc)"},{"line_number":165,"context_line":"                # If we can\u0027t create the node,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9fb8cfa7_4811d75c","line":162,"range":{"start_line":162,"start_character":39,"end_line":162,"end_character":77},"updated":"2019-06-11 13:57:31.000000000","message":"If the instance isn\u0027t mapped to a node, isn\u0027t this part of the OR condition dead code because get_node_by_instance_uuid will always raise ComputeResourceNotFound? And it doesn\u0027t look like get_node_by_instance_uuid will ever just return None, it will either return something or raise, so yeah I think this is dead code. It\u0027s unrelated to your change and we could clean it up in a follow up unless I\u0027m wrong.","commit_id":"5806455c234208570d93b8ffb11874f22da99fb7"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"f6edf6d982463571aa7628f650f20b7ad7239b2c","unresolved":false,"context_lines":[{"line_number":159,"context_line":"            try:"},{"line_number":160,"context_line":"                current_node \u003d ("},{"line_number":161,"context_line":"                    self.cluster_data_model.get_node_by_instance_uuid("},{"line_number":162,"context_line":"                        instance.uuid) or self.get_or_create_node(node.uuid))"},{"line_number":163,"context_line":"            except exception.ComputeResourceNotFound as exc:"},{"line_number":164,"context_line":"                LOG.exception(exc)"},{"line_number":165,"context_line":"                # If we can\u0027t create the node,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9fb8cfa7_b1078d82","line":162,"range":{"start_line":162,"start_character":39,"end_line":162,"end_character":77},"in_reply_to":"9fb8cfa7_4811d75c","updated":"2019-06-12 07:29:19.000000000","message":"Yes, I think you\u0027re right, i\u0027ll confirm it again.","commit_id":"5806455c234208570d93b8ffb11874f22da99fb7"}]}
