)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"e60e75a39931f3c9ff1b93e5f6a0085b944fd236","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"https://review.openstack.org/349248"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"DocImpact - two new methods have been added - plug and unplug"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Change-Id: Iee2bdfc544c2a029df8accaab1a167e42e7b13d4"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"bacf61ea_3469d526","line":18,"updated":"2016-08-02 15:40:29.000000000","message":"if you want to document this in the devref, go right ahead in this patch. Otherwise there\u0027s no point in creating a doc bug.","commit_id":"b6b8dc7c153a871caa692c6f8a17789abba09d01"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"cf8f5b8b059691d789cb74334ac4afd73749b9d4","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"https://review.openstack.org/349248"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"DocImpact - two new methods have been added - plug and unplug"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Change-Id: Iee2bdfc544c2a029df8accaab1a167e42e7b13d4"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"bacf61ea_5f58c156","line":18,"in_reply_to":"bacf61ea_3469d526","updated":"2016-08-03 08:43:25.000000000","message":"i have removed the docimpact","commit_id":"b6b8dc7c153a871caa692c6f8a17789abba09d01"}],"neutron/agent/linux/dhcp.py":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"e8014ca91f8bfe5afbdd6567906352a52e2c6bbe","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        self.conf \u003d conf"},{"line_number":127,"context_line":"        self.network \u003d network"},{"line_number":128,"context_line":"        self.process_monitor \u003d process_monitor"},{"line_number":129,"context_line":"        device_manager_cls \u003d importutils.import_class(conf.device_manager)"},{"line_number":130,"context_line":"        self.device_manager \u003d device_manager_cls(self.conf, plugin)"},{"line_number":131,"context_line":"        self.version \u003d version"},{"line_number":132,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"bacf61ea_a6add8ea","line":129,"updated":"2016-08-01 16:22:21.000000000","message":"You got this hierarchy Dnsmasq -\u003e DhcpLocalProcess -\u003e DhcpBase. The Dnsmasq is your pluggable dhcp_driver. Why can\u0027t you bring your own that brings its own device_manager?\n\nThe plug/unplug refactoring can stay as it\u0027s cosmetic.","commit_id":"d40f3f805f8f782a1197ee2602dc17a1bdb1aec0"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"6d73768911db636b9500888695fea4ca4ee7fb08","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        self.conf \u003d conf"},{"line_number":127,"context_line":"        self.network \u003d network"},{"line_number":128,"context_line":"        self.process_monitor \u003d process_monitor"},{"line_number":129,"context_line":"        device_manager_cls \u003d importutils.import_class(conf.device_manager)"},{"line_number":130,"context_line":"        self.device_manager \u003d device_manager_cls(self.conf, plugin)"},{"line_number":131,"context_line":"        self.version \u003d version"},{"line_number":132,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"bacf61ea_e64350ad","line":129,"in_reply_to":"bacf61ea_a6add8ea","updated":"2016-08-01 16:33:40.000000000","message":"Yes, good point. Let me investigate and hopefully that is something that we can do.","commit_id":"d40f3f805f8f782a1197ee2602dc17a1bdb1aec0"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"91aaff14c746ff9dd19a591c19f581abcb735d1f","unresolved":false,"context_lines":[{"line_number":1215,"context_line":"            # delete all devices except current active DHCP port device"},{"line_number":1216,"context_line":"            if d.name !\u003d dev_name:"},{"line_number":1217,"context_line":"                LOG.debug(\"Found stale device %s, deleting\", d.name)"},{"line_number":1218,"context_line":"                self.driver.unplug(d.name, namespace\u003dnetwork.namespace)"},{"line_number":1219,"context_line":""},{"line_number":1220,"context_line":"    def plug(self, network, port, interface_name):"},{"line_number":1221,"context_line":"        self.driver.plug(network.id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"bacf61ea_14717c0f","line":1218,"updated":"2016-08-01 12:34:09.000000000","message":"Why not call self.unplug here as well?","commit_id":"d40f3f805f8f782a1197ee2602dc17a1bdb1aec0"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"6d73768911db636b9500888695fea4ca4ee7fb08","unresolved":false,"context_lines":[{"line_number":1215,"context_line":"            # delete all devices except current active DHCP port device"},{"line_number":1216,"context_line":"            if d.name !\u003d dev_name:"},{"line_number":1217,"context_line":"                LOG.debug(\"Found stale device %s, deleting\", d.name)"},{"line_number":1218,"context_line":"                self.driver.unplug(d.name, namespace\u003dnetwork.namespace)"},{"line_number":1219,"context_line":""},{"line_number":1220,"context_line":"    def plug(self, network, port, interface_name):"},{"line_number":1221,"context_line":"        self.driver.plug(network.id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"bacf61ea_66000067","line":1218,"in_reply_to":"bacf61ea_14717c0f","updated":"2016-08-01 16:33:40.000000000","message":"good catch. my bad","commit_id":"d40f3f805f8f782a1197ee2602dc17a1bdb1aec0"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"f491d1a3050428841d62b6c888dd699f8821698d","unresolved":false,"context_lines":[{"line_number":1214,"context_line":"                LOG.debug(\"Found stale device %s, deleting\", d.name)"},{"line_number":1215,"context_line":"                self.unplug(d.name, network)"},{"line_number":1216,"context_line":""},{"line_number":1217,"context_line":"    def plug(self, network, port, interface_name):"},{"line_number":1218,"context_line":"        self.driver.plug(network.id,"},{"line_number":1219,"context_line":"                         port.id,"},{"line_number":1220,"context_line":"                         interface_name,"}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_dd07601b","line":1217,"range":{"start_line":1217,"start_character":8,"end_line":1217,"end_character":13},"updated":"2016-08-04 07:13:23.000000000","message":"It seems that this method is not called directly from out of class. If so, I prefer \"_plug\".","commit_id":"0eac7e98e4483c00cdca7a3f4b3c517b23e54a8f"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"4a9db2a962b8e5b68be2daf54648c980c404678c","unresolved":false,"context_lines":[{"line_number":1214,"context_line":"                LOG.debug(\"Found stale device %s, deleting\", d.name)"},{"line_number":1215,"context_line":"                self.unplug(d.name, network)"},{"line_number":1216,"context_line":""},{"line_number":1217,"context_line":"    def plug(self, network, port, interface_name):"},{"line_number":1218,"context_line":"        self.driver.plug(network.id,"},{"line_number":1219,"context_line":"                         port.id,"},{"line_number":1220,"context_line":"                         interface_name,"}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_58dd3713","line":1217,"range":{"start_line":1217,"start_character":8,"end_line":1217,"end_character":13},"in_reply_to":"bacf61ea_44bd58d6","updated":"2016-08-04 09:46:32.000000000","message":"If my understanding is right, the underscore name is used to signify that the method should only be accessed internally. It doesn\u0027t prohibit override. Do you mean that subclass._plug() is called from the outside of the subclass?","commit_id":"0eac7e98e4483c00cdca7a3f4b3c517b23e54a8f"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"325d85cb7302e280e2c5a09d1e5b912747641b8a","unresolved":false,"context_lines":[{"line_number":1214,"context_line":"                LOG.debug(\"Found stale device %s, deleting\", d.name)"},{"line_number":1215,"context_line":"                self.unplug(d.name, network)"},{"line_number":1216,"context_line":""},{"line_number":1217,"context_line":"    def plug(self, network, port, interface_name):"},{"line_number":1218,"context_line":"        self.driver.plug(network.id,"},{"line_number":1219,"context_line":"                         port.id,"},{"line_number":1220,"context_line":"                         interface_name,"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa7ab95a_35af067e","line":1217,"range":{"start_line":1217,"start_character":8,"end_line":1217,"end_character":13},"in_reply_to":"bacf61ea_58dd3713","updated":"2016-08-30 15:33:42.000000000","message":"I would\u0027ve opted for public myself. A number of other methods are public in this class as is the driver/plugin/conf (attributes) and it seems natural to expose this as public. Just my $0.02.","commit_id":"0eac7e98e4483c00cdca7a3f4b3c517b23e54a8f"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"45b537f0a3442f58eb2bd683b30816475615920d","unresolved":false,"context_lines":[{"line_number":1214,"context_line":"                LOG.debug(\"Found stale device %s, deleting\", d.name)"},{"line_number":1215,"context_line":"                self.unplug(d.name, network)"},{"line_number":1216,"context_line":""},{"line_number":1217,"context_line":"    def plug(self, network, port, interface_name):"},{"line_number":1218,"context_line":"        self.driver.plug(network.id,"},{"line_number":1219,"context_line":"                         port.id,"},{"line_number":1220,"context_line":"                         interface_name,"}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_44bd58d6","line":1217,"range":{"start_line":1217,"start_character":8,"end_line":1217,"end_character":13},"in_reply_to":"bacf61ea_dd07601b","updated":"2016-08-04 08:27:21.000000000","message":"please see the commit message - we plan to override the method. That is why it is \"public\" and not private.","commit_id":"0eac7e98e4483c00cdca7a3f4b3c517b23e54a8f"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"b721357d7806c93f7fda8152b6363b61472f41db","unresolved":false,"context_lines":[{"line_number":1215,"context_line":"                self.unplug(d.name, network)"},{"line_number":1216,"context_line":""},{"line_number":1217,"context_line":"    def plug(self, network, port, interface_name):"},{"line_number":1218,"context_line":"        self.driver.plug(network.id,"},{"line_number":1219,"context_line":"                         port.id,"},{"line_number":1220,"context_line":"                         interface_name,"},{"line_number":1221,"context_line":"                         port.mac_address,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a89bdaa_5059ac59","line":1218,"updated":"2016-09-05 11:51:18.000000000","message":"driver is already a pluggable interface, why is that not enough?","commit_id":"0eac7e98e4483c00cdca7a3f4b3c517b23e54a8f"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"40b420ab20056e1bddbfd54b03e64fc0ee1599dd","unresolved":false,"context_lines":[{"line_number":1215,"context_line":"                self.unplug(d.name, network)"},{"line_number":1216,"context_line":""},{"line_number":1217,"context_line":"    def plug(self, network, port, interface_name):"},{"line_number":1218,"context_line":"        self.driver.plug(network.id,"},{"line_number":1219,"context_line":"                         port.id,"},{"line_number":1220,"context_line":"                         interface_name,"},{"line_number":1221,"context_line":"                         port.mac_address,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a89bdaa_93889e24","line":1218,"in_reply_to":"9a89bdaa_5059ac59","updated":"2016-09-05 11:58:01.000000000","message":"the problem is that the DeviceManager is hard coded and this essentially what we would like to override. So by doing this we are able to do that","commit_id":"0eac7e98e4483c00cdca7a3f4b3c517b23e54a8f"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"c19765c2cce5af427a28445022118970db3d4125","unresolved":false,"context_lines":[{"line_number":1215,"context_line":"                self.unplug(d.name, network)"},{"line_number":1216,"context_line":""},{"line_number":1217,"context_line":"    def plug(self, network, port, interface_name):"},{"line_number":1218,"context_line":"        self.driver.plug(network.id,"},{"line_number":1219,"context_line":"                         port.id,"},{"line_number":1220,"context_line":"                         interface_name,"},{"line_number":1221,"context_line":"                         port.mac_address,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a89bdaa_f6ec78c9","line":1218,"in_reply_to":"9a89bdaa_93889e24","updated":"2016-09-05 12:16:43.000000000","message":"I meant the interface in the manager is pluggable. But i see the issue is that you want access to data not passed into that lower level.","commit_id":"0eac7e98e4483c00cdca7a3f4b3c517b23e54a8f"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"f491d1a3050428841d62b6c888dd699f8821698d","unresolved":false,"context_lines":[{"line_number":1281,"context_line":"        \"\"\"Update device settings for the network\u0027s DHCP on this host.\"\"\""},{"line_number":1282,"context_line":"        self._set_default_route(network, device_name)"},{"line_number":1283,"context_line":""},{"line_number":1284,"context_line":"    def unplug(self, device_name, network):"},{"line_number":1285,"context_line":"        self.driver.unplug(device_name, namespace\u003dnetwork.namespace)"},{"line_number":1286,"context_line":""},{"line_number":1287,"context_line":"    def destroy(self, network, device_name):"}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_3d303c01","line":1284,"range":{"start_line":1284,"start_character":8,"end_line":1284,"end_character":14},"updated":"2016-08-04 07:13:23.000000000","message":"ditto","commit_id":"0eac7e98e4483c00cdca7a3f4b3c517b23e54a8f"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"45b537f0a3442f58eb2bd683b30816475615920d","unresolved":false,"context_lines":[{"line_number":1281,"context_line":"        \"\"\"Update device settings for the network\u0027s DHCP on this host.\"\"\""},{"line_number":1282,"context_line":"        self._set_default_route(network, device_name)"},{"line_number":1283,"context_line":""},{"line_number":1284,"context_line":"    def unplug(self, device_name, network):"},{"line_number":1285,"context_line":"        self.driver.unplug(device_name, namespace\u003dnetwork.namespace)"},{"line_number":1286,"context_line":""},{"line_number":1287,"context_line":"    def destroy(self, network, device_name):"}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_c4c9487b","line":1284,"range":{"start_line":1284,"start_character":8,"end_line":1284,"end_character":14},"in_reply_to":"bacf61ea_3d303c01","updated":"2016-08-04 08:27:21.000000000","message":"same point here","commit_id":"0eac7e98e4483c00cdca7a3f4b3c517b23e54a8f"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"325d85cb7302e280e2c5a09d1e5b912747641b8a","unresolved":false,"context_lines":[{"line_number":1281,"context_line":"        \"\"\"Update device settings for the network\u0027s DHCP on this host.\"\"\""},{"line_number":1282,"context_line":"        self._set_default_route(network, device_name)"},{"line_number":1283,"context_line":""},{"line_number":1284,"context_line":"    def unplug(self, device_name, network):"},{"line_number":1285,"context_line":"        self.driver.unplug(device_name, namespace\u003dnetwork.namespace)"},{"line_number":1286,"context_line":""},{"line_number":1287,"context_line":"    def destroy(self, network, device_name):"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa7ab95a_f52d9efe","line":1284,"range":{"start_line":1284,"start_character":8,"end_line":1284,"end_character":14},"in_reply_to":"bacf61ea_c4c9487b","updated":"2016-08-30 15:33:42.000000000","message":"Nit: it would be nice to have docstrings for these new methods: http://docs.openstack.org/developer/hacking/#docstrings","commit_id":"0eac7e98e4483c00cdca7a3f4b3c517b23e54a8f"}],"releasenotes/notes/pluggable-device-manager-83dea315bb223973.yaml":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"e60e75a39931f3c9ff1b93e5f6a0085b944fd236","unresolved":false,"context_lines":[{"line_number":3,"context_line":"    Enable the device manager used by the DHCP agent"},{"line_number":4,"context_line":"    to be overriden."},{"line_number":5,"context_line":"features:"},{"line_number":6,"context_line":"  - Two new methods have been added to the class to enable"},{"line_number":7,"context_line":"    it to be overriden. These two methods are plug and unplug."},{"line_number":8,"context_line":"    This enables plugins to override if they wish."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"bacf61ea_94da4116","line":6,"updated":"2016-08-02 15:40:29.000000000","message":"this is not worth releasing, please remove.","commit_id":"b6b8dc7c153a871caa692c6f8a17789abba09d01"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"cf8f5b8b059691d789cb74334ac4afd73749b9d4","unresolved":false,"context_lines":[{"line_number":3,"context_line":"    Enable the device manager used by the DHCP agent"},{"line_number":4,"context_line":"    to be overriden."},{"line_number":5,"context_line":"features:"},{"line_number":6,"context_line":"  - Two new methods have been added to the class to enable"},{"line_number":7,"context_line":"    it to be overriden. These two methods are plug and unplug."},{"line_number":8,"context_line":"    This enables plugins to override if they wish."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"bacf61ea_4a3481dd","line":6,"in_reply_to":"bacf61ea_94da4116","updated":"2016-08-03 08:43:25.000000000","message":"Done","commit_id":"b6b8dc7c153a871caa692c6f8a17789abba09d01"}]}
