)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"ae7acd6c5c6625c3fa0eee1cacb299f0bc2a8863","unresolved":false,"context_lines":[{"line_number":7,"context_line":"DHCP: protect against case when device name is None"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"There are edge cases when the agent attempts to unplug an interface and"},{"line_number":10,"context_line":"the device does not exist."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I6917ec94f685f3dd3bff6aa1d43dc56aab76274a"},{"line_number":13,"context_line":"Closes-bug: #1498370"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"9a1a9d01_100cf53f","line":10,"updated":"2015-09-29 02:32:52.000000000","message":"Can you elaborate this situation for reviewers? Why does it happen? Anything race condition?","commit_id":"154be88662b3e873fba565561968ee650e8d139d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"efd42c689a8cb4d318f747da89a8fa11744bae9e","unresolved":false,"context_lines":[{"line_number":7,"context_line":"DHCP: protect against case when device name is None"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"There are edge cases when the agent attempts to unplug an interface and"},{"line_number":10,"context_line":"the device does not exist."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I6917ec94f685f3dd3bff6aa1d43dc56aab76274a"},{"line_number":13,"context_line":"Closes-bug: #1498370"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"9a1a9d01_d91b0172","line":10,"in_reply_to":"9a1a9d01_100cf53f","updated":"2015-09-29 07:50:20.000000000","message":"Can you please look at the bug. It happens when I spin up a new vanilla devstack environment.\nIt reproduces every time","commit_id":"154be88662b3e873fba565561968ee650e8d139d"}],"neutron/agent/linux/dhcp.py":[{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"ae7acd6c5c6625c3fa0eee1cacb299f0bc2a8863","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        self._remove_config_files()"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    def _destroy_namespace_and_port(self):"},{"line_number":225,"context_line":"        if self.interface_name:"},{"line_number":226,"context_line":"            try:"},{"line_number":227,"context_line":"                self.device_manager.destroy(self.network, self.interface_name)"},{"line_number":228,"context_line":"            except RuntimeError:"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a1a9d01_5047cd76","line":225,"updated":"2015-09-29 02:32:52.000000000","message":"I\u0027m not sure what is the situation about self.interface_name\u003dNone. Don\u0027t we need add warn or log against this?","commit_id":"154be88662b3e873fba565561968ee650e8d139d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"efd42c689a8cb4d318f747da89a8fa11744bae9e","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        self._remove_config_files()"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    def _destroy_namespace_and_port(self):"},{"line_number":225,"context_line":"        if self.interface_name:"},{"line_number":226,"context_line":"            try:"},{"line_number":227,"context_line":"                self.device_manager.destroy(self.network, self.interface_name)"},{"line_number":228,"context_line":"            except RuntimeError:"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a1a9d01_f92fe585","line":225,"in_reply_to":"9a1a9d01_5047cd76","updated":"2015-09-29 07:50:20.000000000","message":"i will add a log message not sure how that is gonna help.\nat the moment i have a dhcp log file that is full of traces for this error.","commit_id":"154be88662b3e873fba565561968ee650e8d139d"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"3314b9285ac4139679d9d2a391df9e385e25cc5b","unresolved":false,"context_lines":[{"line_number":224,"context_line":"    def _destroy_namespace_and_port(self):"},{"line_number":225,"context_line":"        if self.interface_name:"},{"line_number":226,"context_line":"            try:"},{"line_number":227,"context_line":"                self.device_manager.destroy(self.network, self.interface_name)"},{"line_number":228,"context_line":"            except RuntimeError:"},{"line_number":229,"context_line":"                LOG.warning(_LW(\u0027Failed trying to delete interface: %s\u0027),"},{"line_number":230,"context_line":"                            self.interface_name)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a1a9d01_402fdb87","line":227,"updated":"2015-09-29 17:40:58.000000000","message":"small nit: I think it would be better to handle the None case in device_manager.destory()","commit_id":"1f4f344ce005199e537674031e6dff069ad16e6f"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"e681f81744e72b9f42242bcfc57a2f2864c6c194","unresolved":false,"context_lines":[{"line_number":224,"context_line":"    def _destroy_namespace_and_port(self):"},{"line_number":225,"context_line":"        if self.interface_name:"},{"line_number":226,"context_line":"            try:"},{"line_number":227,"context_line":"                self.device_manager.destroy(self.network, self.interface_name)"},{"line_number":228,"context_line":"            except RuntimeError:"},{"line_number":229,"context_line":"                LOG.warning(_LW(\u0027Failed trying to delete interface: %s\u0027),"},{"line_number":230,"context_line":"                            self.interface_name)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a1a9d01_46dfa9d5","line":227,"in_reply_to":"9a1a9d01_2f5de146","updated":"2015-10-01 08:39:04.000000000","message":"in retrospect it is better to do this in destroy","commit_id":"1f4f344ce005199e537674031e6dff069ad16e6f"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"f284e227db480b10c1b024ea7f1ae6162c0b5cba","unresolved":false,"context_lines":[{"line_number":224,"context_line":"    def _destroy_namespace_and_port(self):"},{"line_number":225,"context_line":"        if self.interface_name:"},{"line_number":226,"context_line":"            try:"},{"line_number":227,"context_line":"                self.device_manager.destroy(self.network, self.interface_name)"},{"line_number":228,"context_line":"            except RuntimeError:"},{"line_number":229,"context_line":"                LOG.warning(_LW(\u0027Failed trying to delete interface: %s\u0027),"},{"line_number":230,"context_line":"                            self.interface_name)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a1a9d01_2f5de146","line":227,"in_reply_to":"9a1a9d01_402fdb87","updated":"2015-09-30 06:03:24.000000000","message":"kevin suggested that we do it here","commit_id":"1f4f344ce005199e537674031e6dff069ad16e6f"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"22eb85a38e16d1f1b7c71b4cb8acecbb9d5e54a8","unresolved":false,"context_lines":[{"line_number":229,"context_line":"                LOG.warning(_LW(\u0027Failed trying to delete interface: %s\u0027),"},{"line_number":230,"context_line":"                            self.interface_name)"},{"line_number":231,"context_line":"        else:"},{"line_number":232,"context_line":"            LOG.warning(_LW(\u0027No interface exists!\u0027))"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        if self.conf.dhcp_delete_namespaces and self.network.namespace:"},{"line_number":235,"context_line":"            ns_ip \u003d ip_lib.IPWrapper(namespace\u003dself.network.namespace)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a1a9d01_a23936a6","line":232,"updated":"2015-09-29 09:26:13.000000000","message":"It seems we don\u0027t end text with punctuation mark","commit_id":"1f4f344ce005199e537674031e6dff069ad16e6f"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"11e1c56d02da57c1d03b26650294353202edab2f","unresolved":false,"context_lines":[{"line_number":229,"context_line":"                LOG.warning(_LW(\u0027Failed trying to delete interface: %s\u0027),"},{"line_number":230,"context_line":"                            self.interface_name)"},{"line_number":231,"context_line":"        else:"},{"line_number":232,"context_line":"            LOG.warning(_LW(\u0027No interface exists!\u0027))"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        if self.conf.dhcp_delete_namespaces and self.network.namespace:"},{"line_number":235,"context_line":"            ns_ip \u003d ip_lib.IPWrapper(namespace\u003dself.network.namespace)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a1a9d01_6710035a","line":232,"in_reply_to":"9a1a9d01_a23936a6","updated":"2015-09-29 13:45:40.000000000","message":"Let\u0027s follow the existing style.","commit_id":"1f4f344ce005199e537674031e6dff069ad16e6f"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"94b7a83b4122219eb5df6d36e4f8e2896b4abd75","unresolved":false,"context_lines":[{"line_number":1228,"context_line":"        if device_name:"},{"line_number":1229,"context_line":"            self.driver.unplug(device_name, namespace\u003dnetwork.namespace)"},{"line_number":1230,"context_line":"        else:"},{"line_number":1231,"context_line":"            LOG.warning(_LW(\u0027No interface exists\u0027))"},{"line_number":1232,"context_line":""},{"line_number":1233,"context_line":"        self.plugin.release_dhcp_port(network.id,"},{"line_number":1234,"context_line":"                                      self.get_device_id(network))"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_7d858fab","line":1231,"updated":"2015-10-01 12:46:16.000000000","message":"I think the message should include details about what operation is being attempted.","commit_id":"7b15e0d7a64aaa867f2212fe18f8a862c244e575"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"3abf55f39c358a99b14c41337a1936b99535ca53","unresolved":false,"context_lines":[{"line_number":1228,"context_line":"        if device_name:"},{"line_number":1229,"context_line":"            self.driver.unplug(device_name, namespace\u003dnetwork.namespace)"},{"line_number":1230,"context_line":"        else:"},{"line_number":1231,"context_line":"            LOG.warning(_LW(\u0027No interface exists\u0027))"},{"line_number":1232,"context_line":""},{"line_number":1233,"context_line":"        self.plugin.release_dhcp_port(network.id,"},{"line_number":1234,"context_line":"                                      self.get_device_id(network))"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a2fa921_5390b095","line":1231,"in_reply_to":"9a1a9d01_5f5bad54","updated":"2015-10-05 22:45:03.000000000","message":"Done","commit_id":"7b15e0d7a64aaa867f2212fe18f8a862c244e575"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"2ddca8b5cce71aebcec5436de741ae5f79e8b9ee","unresolved":false,"context_lines":[{"line_number":1228,"context_line":"        if device_name:"},{"line_number":1229,"context_line":"            self.driver.unplug(device_name, namespace\u003dnetwork.namespace)"},{"line_number":1230,"context_line":"        else:"},{"line_number":1231,"context_line":"            LOG.warning(_LW(\u0027No interface exists\u0027))"},{"line_number":1232,"context_line":""},{"line_number":1233,"context_line":"        self.plugin.release_dhcp_port(network.id,"},{"line_number":1234,"context_line":"                                      self.get_device_id(network))"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_ff9e4162","line":1231,"in_reply_to":"9a1a9d01_7d858fab","updated":"2015-10-02 13:21:01.000000000","message":"What do you suggest, information from the network?","commit_id":"7b15e0d7a64aaa867f2212fe18f8a862c244e575"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"537f5994d750c0e2623f43ec7b803c1189690e42","unresolved":false,"context_lines":[{"line_number":1228,"context_line":"        if device_name:"},{"line_number":1229,"context_line":"            self.driver.unplug(device_name, namespace\u003dnetwork.namespace)"},{"line_number":1230,"context_line":"        else:"},{"line_number":1231,"context_line":"            LOG.warning(_LW(\u0027No interface exists\u0027))"},{"line_number":1232,"context_line":""},{"line_number":1233,"context_line":"        self.plugin.release_dhcp_port(network.id,"},{"line_number":1234,"context_line":"                                      self.get_device_id(network))"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_5f5bad54","line":1231,"in_reply_to":"9a1a9d01_ff9e4162","updated":"2015-10-02 13:30:02.000000000","message":"Information about the network would be good along with the operation (destroy/delete) being performed.  Maybe something like ... \"No interface exists while attempting to delete device on network %s\".","commit_id":"7b15e0d7a64aaa867f2212fe18f8a862c244e575"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"b91723c1763c7ac0ecf374419c6ce6aa08577384","unresolved":false,"context_lines":[{"line_number":1228,"context_line":"        if device_name:"},{"line_number":1229,"context_line":"            self.driver.unplug(device_name, namespace\u003dnetwork.namespace)"},{"line_number":1230,"context_line":"        else:"},{"line_number":1231,"context_line":"            LOG.warning(_LW(\u0027No interface exists for network %s\u0027),"},{"line_number":1232,"context_line":"                        self.network.id)"},{"line_number":1233,"context_line":""},{"line_number":1234,"context_line":"        self.plugin.release_dhcp_port(network.id,"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a2fa921_da7e09ae","line":1231,"updated":"2015-10-06 07:12:00.000000000","message":"Sorry about the nitpicking, but I don\u0027t think this is a warning condition since it\u0027s a race that can validly happen. Probably just debug is fine.","commit_id":"c5b9f19d6e0992fc4c197200d9979c25126849a5"}],"neutron/agent/linux/interface.py":[{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"a66264eab0c3e4ba682c42cf1b406a34c357c408","unresolved":false,"context_lines":[{"line_number":295,"context_line":"            self.DEV_NAME_PREFIX \u003d \u0027ns-\u0027"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"    def _get_tap_name(self, dev_name, prefix\u003dNone):"},{"line_number":298,"context_line":"        if self.conf.ovs_use_veth and dev_name:"},{"line_number":299,"context_line":"            dev_name \u003d dev_name.replace(prefix or self.DEV_NAME_PREFIX,"},{"line_number":300,"context_line":"                                        n_const.TAP_DEVICE_PREFIX)"},{"line_number":301,"context_line":"        return dev_name"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a1a9d01_1762e2ad","line":298,"updated":"2015-09-27 09:14:35.000000000","message":"hope the codes after the _get_tap_name can deal with none dev_name","commit_id":"4ae0be67ab698336c1ab00039e171756a9cc2910"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"9e28952bc64b56d1b4daf7dd03433b67dba9fa3e","unresolved":false,"context_lines":[{"line_number":295,"context_line":"            self.DEV_NAME_PREFIX \u003d \u0027ns-\u0027"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"    def _get_tap_name(self, dev_name, prefix\u003dNone):"},{"line_number":298,"context_line":"        if self.conf.ovs_use_veth and dev_name:"},{"line_number":299,"context_line":"            dev_name \u003d dev_name.replace(prefix or self.DEV_NAME_PREFIX,"},{"line_number":300,"context_line":"                                        n_const.TAP_DEVICE_PREFIX)"},{"line_number":301,"context_line":"        return dev_name"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a1a9d01_b7dd3644","line":298,"in_reply_to":"9a1a9d01_1762e2ad","updated":"2015-09-27 09:26:45.000000000","message":"they seem to deal with it quite well, but your point below is better","commit_id":"4ae0be67ab698336c1ab00039e171756a9cc2910"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"a66264eab0c3e4ba682c42cf1b406a34c357c408","unresolved":false,"context_lines":[{"line_number":350,"context_line":"        if self.conf.ovs_use_veth:"},{"line_number":351,"context_line":"            root_dev.link.set_up()"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"    def unplug(self, device_name, bridge\u003dNone, namespace\u003dNone, prefix\u003dNone):"},{"line_number":354,"context_line":"        \"\"\"Unplug the interface.\"\"\""},{"line_number":355,"context_line":"        if not bridge:"},{"line_number":356,"context_line":"            bridge \u003d self.conf.ovs_integration_bridge"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a1a9d01_d75b0af5","line":353,"updated":"2015-09-27 09:14:35.000000000","message":"maybe we can deal with none device_name here, or more earlier.","commit_id":"4ae0be67ab698336c1ab00039e171756a9cc2910"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"9e28952bc64b56d1b4daf7dd03433b67dba9fa3e","unresolved":false,"context_lines":[{"line_number":350,"context_line":"        if self.conf.ovs_use_veth:"},{"line_number":351,"context_line":"            root_dev.link.set_up()"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"    def unplug(self, device_name, bridge\u003dNone, namespace\u003dNone, prefix\u003dNone):"},{"line_number":354,"context_line":"        \"\"\"Unplug the interface.\"\"\""},{"line_number":355,"context_line":"        if not bridge:"},{"line_number":356,"context_line":"            bridge \u003d self.conf.ovs_integration_bridge"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a1a9d01_d7e0eafc","line":353,"in_reply_to":"9a1a9d01_d75b0af5","updated":"2015-09-27 09:26:45.000000000","message":"Done","commit_id":"4ae0be67ab698336c1ab00039e171756a9cc2910"}],"neutron/tests/unit/agent/dhcp/test_agent.py":[{"author":{"_account_id":14615,"name":"Sergey Belous","email":"belous.py@gmail.com","username":"sbelous"},"change_message_id":"9ce571c7dacdd2d74ed0b2995b00abf5161f6e96","unresolved":false,"context_lines":[{"line_number":1409,"context_line":"            dh.destroy(fake_net, None)"},{"line_number":1410,"context_line":""},{"line_number":1411,"context_line":"            dvr_cls.assert_called_once_with(cfg.CONF)"},{"line_number":1412,"context_line":"            plugin.assert_has_calls("},{"line_number":1413,"context_line":"                [mock.call.release_dhcp_port(fake_net.id, mock.ANY)])"},{"line_number":1414,"context_line":""},{"line_number":1415,"context_line":"    def test_get_interface_name(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a2fa921_2a34a7dc","line":1412,"updated":"2015-10-05 15:14:46.000000000","message":"I tried to run this test without any changes in neutron/agent/linux/dhcp.py and it passed. I guess, we must check, that self.driver.unplug not called if device_name is None, is it?","commit_id":"7b15e0d7a64aaa867f2212fe18f8a862c244e575"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"3abf55f39c358a99b14c41337a1936b99535ca53","unresolved":false,"context_lines":[{"line_number":1409,"context_line":"            dh.destroy(fake_net, None)"},{"line_number":1410,"context_line":""},{"line_number":1411,"context_line":"            dvr_cls.assert_called_once_with(cfg.CONF)"},{"line_number":1412,"context_line":"            plugin.assert_has_calls("},{"line_number":1413,"context_line":"                [mock.call.release_dhcp_port(fake_net.id, mock.ANY)])"},{"line_number":1414,"context_line":""},{"line_number":1415,"context_line":"    def test_get_interface_name(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a2fa921_13e9d81a","line":1412,"in_reply_to":"7a2fa921_2a34a7dc","updated":"2015-10-05 22:45:03.000000000","message":"Done","commit_id":"7b15e0d7a64aaa867f2212fe18f8a862c244e575"}],"neutron/tests/unit/agent/linux/test_dhcp.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"d926965e59399270fa02c6fda69fb204eb02d5b2","unresolved":false,"context_lines":[{"line_number":959,"context_line":""},{"line_number":960,"context_line":"        self.assertEqual(ip.return_value.netns.delete.call_count, 0)"},{"line_number":961,"context_line":""},{"line_number":962,"context_line":"    def test_disablei_interface_none(self):"},{"line_number":963,"context_line":"        self.conf.set_override(\u0027dhcp_delete_namespaces\u0027, False)"},{"line_number":964,"context_line":"        attrs_to_mock \u003d dict([(a, mock.DEFAULT) for a in"},{"line_number":965,"context_line":"                              [\u0027active\u0027]])"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a1a9d01_69b1e8e0","line":962,"updated":"2015-09-28 14:47:33.000000000","message":"oooof!!","commit_id":"8cfc065142aa166d71e4f23165bd925a3df059fb"}]}
