)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"6afd022a6cf0324a0a69701b99caa875a276c4a1","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Aaron Rosen \u003caaronorosen@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-03-04 15:35:20 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Send network-changed notifations to nova"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch hooks into the same notifcation location that we use"},{"line_number":10,"context_line":"to dispatch notifcations to the dhcp-agents when fixed_ips change. This patch"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAVn%2F%2Fn0w%3D","line":7,"updated":"2014-03-05 02:22:16.000000000","message":"notifation -\u003e notifications","commit_id":"01a5abf9ef52570288d105552d18e2378bda06a0"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"6ff505c668d16931563da3b00e7801d4e021daa3","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Aaron Rosen \u003caaronorosen@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-03-04 15:35:20 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Send network-changed notifations to nova"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch hooks into the same notifcation location that we use"},{"line_number":10,"context_line":"to dispatch notifcations to the dhcp-agents when fixed_ips change. This patch"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAVn%2F%2FnP4%3D","line":7,"in_reply_to":"AAAAVn%2F%2Fn0w%3D","updated":"2014-03-05 03:07:47.000000000","message":"Done","commit_id":"01a5abf9ef52570288d105552d18e2378bda06a0"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"6afd022a6cf0324a0a69701b99caa875a276c4a1","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Send network-changed notifations to nova"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch hooks into the same notifcation location that we use"},{"line_number":10,"context_line":"to dispatch notifcations to the dhcp-agents when fixed_ips change. This patch"},{"line_number":11,"context_line":"notifies nova whenever a floatingip or fixed_ip is updated."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAVn%2F%2Fn0s%3D","line":9,"updated":"2014-03-05 02:22:16.000000000","message":"notifcation location -\u003e notification logic","commit_id":"01a5abf9ef52570288d105552d18e2378bda06a0"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"6ff505c668d16931563da3b00e7801d4e021daa3","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Send network-changed notifations to nova"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch hooks into the same notifcation location that we use"},{"line_number":10,"context_line":"to dispatch notifcations to the dhcp-agents when fixed_ips change. This patch"},{"line_number":11,"context_line":"notifies nova whenever a floatingip or fixed_ip is updated."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAVn%2F%2FnPw%3D","line":9,"in_reply_to":"AAAAVn%2F%2Fn0s%3D","updated":"2014-03-05 03:07:47.000000000","message":"Done","commit_id":"01a5abf9ef52570288d105552d18e2378bda06a0"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"6afd022a6cf0324a0a69701b99caa875a276c4a1","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Send network-changed notifations to nova"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch hooks into the same notifcation location that we use"},{"line_number":10,"context_line":"to dispatch notifcations to the dhcp-agents when fixed_ips change. This patch"},{"line_number":11,"context_line":"notifies nova whenever a floatingip or fixed_ip is updated."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Implements blueprint: nova-event-callback"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAVn%2F%2Fn0k%3D","line":10,"updated":"2014-03-05 02:22:16.000000000","message":"notifcations -\u003e notifications","commit_id":"01a5abf9ef52570288d105552d18e2378bda06a0"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"6ff505c668d16931563da3b00e7801d4e021daa3","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Send network-changed notifations to nova"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch hooks into the same notifcation location that we use"},{"line_number":10,"context_line":"to dispatch notifcations to the dhcp-agents when fixed_ips change. This patch"},{"line_number":11,"context_line":"notifies nova whenever a floatingip or fixed_ip is updated."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Implements blueprint: nova-event-callback"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAVn%2F%2FnPs%3D","line":10,"in_reply_to":"AAAAVn%2F%2Fn0k%3D","updated":"2014-03-05 03:07:47.000000000","message":"Done","commit_id":"01a5abf9ef52570288d105552d18e2378bda06a0"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ba1069a2a01ac9e68c3440a3edc31fc212012d7b","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Send network-changed notifications to nova"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch hooks into the same notification logic that we use"},{"line_number":10,"context_line":"to dispatch notifications to the dhcp-agents when fixed_ips change. This patch"},{"line_number":11,"context_line":"notifies nova whenever a floatingip or fixed_ip is updated."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Implements blueprint: nova-event-callback"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"AAAAVn%2F%2FH%2F0%3D","line":10,"updated":"2014-03-08 19:47:40.000000000","message":"L.9-10 looks unnecessary.","commit_id":"59ea4d3ae2daa8e3a71aac8a7f420155473e4eb8"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"d750892f1e55e6962307a7cef43da8e7df4c5483","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Send network-changed notifications to nova"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch hooks into the same notification logic that we use"},{"line_number":10,"context_line":"to dispatch notifications to the dhcp-agents when fixed_ips change. This patch"},{"line_number":11,"context_line":"notifies nova whenever a floatingip or fixed_ip is updated."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Implements blueprint: nova-event-callback"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"AAAAVn%2F%2FHnw%3D","line":10,"in_reply_to":"AAAAVn%2F%2FH%2F0%3D","updated":"2014-03-09 02:51:52.000000000","message":"Done","commit_id":"59ea4d3ae2daa8e3a71aac8a7f420155473e4eb8"}],"etc/neutron.conf":[{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"1d6b672877dfb73bdb5dbca5ab8093e03abc0a9d","unresolved":false,"context_lines":[{"line_number":298,"context_line":""},{"line_number":299,"context_line":"# Send notifications to nova when port data (fixed_ips/floatingips) change"},{"line_number":300,"context_line":"# so nova can update it\u0027s cache."},{"line_number":301,"context_line":"# notify_nova_port_change \u003d True"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"# URL for connection to nova (Only supports one nova region currently)."},{"line_number":304,"context_line":"# nova_url \u003d http://127.0.0.1:8774"}],"source_content_type":"text/plain","patch_set":8,"id":"AAAAVn%2F%2FFAE%3D","line":301,"updated":"2014-03-10 05:30:51.000000000","message":"Do you want the name of this setting to be more like line 297? --\u003e notify_nova_on_port_data_changes","commit_id":"59ea4d3ae2daa8e3a71aac8a7f420155473e4eb8"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"d22c36328569a83f7c35a9ef54d932a83bc63047","unresolved":false,"context_lines":[{"line_number":298,"context_line":""},{"line_number":299,"context_line":"# Send notifications to nova when port data (fixed_ips/floatingips) change"},{"line_number":300,"context_line":"# so nova can update it\u0027s cache."},{"line_number":301,"context_line":"# notify_nova_port_change \u003d True"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"# URL for connection to nova (Only supports one nova region currently)."},{"line_number":304,"context_line":"# nova_url \u003d http://127.0.0.1:8774"}],"source_content_type":"text/plain","patch_set":8,"id":"AAAAVn%2F%2B%2Fn4%3D","line":301,"in_reply_to":"AAAAVn%2F%2FAao%3D","updated":"2014-03-10 20:16:10.000000000","message":"I sent this to false though i think we should leave this one to be true since we need notify_nova_on_port_status_changes to be true as nova now waits on port to go active by default.  Setting this to True should be pretty safe imho though :)","commit_id":"59ea4d3ae2daa8e3a71aac8a7f420155473e4eb8"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"5f3f9825849fe647e1b15bb1cdd41fb8694baa49","unresolved":false,"context_lines":[{"line_number":298,"context_line":""},{"line_number":299,"context_line":"# Send notifications to nova when port data (fixed_ips/floatingips) change"},{"line_number":300,"context_line":"# so nova can update it\u0027s cache."},{"line_number":301,"context_line":"# notify_nova_port_change \u003d True"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"# URL for connection to nova (Only supports one nova region currently)."},{"line_number":304,"context_line":"# nova_url \u003d http://127.0.0.1:8774"}],"source_content_type":"text/plain","patch_set":8,"id":"AAAAVn%2F%2FAao%3D","line":301,"in_reply_to":"AAAAVn%2F%2FAug%3D","updated":"2014-03-10 19:04:13.000000000","message":"Done","commit_id":"59ea4d3ae2daa8e3a71aac8a7f420155473e4eb8"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"21ac704d00d700631bee970fe20e3076f5a64204","unresolved":false,"context_lines":[{"line_number":298,"context_line":""},{"line_number":299,"context_line":"# Send notifications to nova when port data (fixed_ips/floatingips) change"},{"line_number":300,"context_line":"# so nova can update it\u0027s cache."},{"line_number":301,"context_line":"# notify_nova_port_change \u003d True"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"# URL for connection to nova (Only supports one nova region currently)."},{"line_number":304,"context_line":"# nova_url \u003d http://127.0.0.1:8774"}],"source_content_type":"text/plain","patch_set":8,"id":"AAAAVn%2F%2FAug%3D","line":301,"in_reply_to":"AAAAVn%2F%2FBVM%3D","updated":"2014-03-10 18:19:27.000000000","message":"+1.  I think it makes sense to disable it by default for icehouse until we resolve the inevitable issues.  Once it\u0027s stable, we can consider backporting the fixes to icehouse and enabling in the stable gate so that people who choose to use it can be assured of reliability.","commit_id":"59ea4d3ae2daa8e3a71aac8a7f420155473e4eb8"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"2c2356639328189adbe975750eeb65c773270ebe","unresolved":false,"context_lines":[{"line_number":298,"context_line":""},{"line_number":299,"context_line":"# Send notifications to nova when port data (fixed_ips/floatingips) change"},{"line_number":300,"context_line":"# so nova can update it\u0027s cache."},{"line_number":301,"context_line":"# notify_nova_port_change \u003d True"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"# URL for connection to nova (Only supports one nova region currently)."},{"line_number":304,"context_line":"# nova_url \u003d http://127.0.0.1:8774"}],"source_content_type":"text/plain","patch_set":8,"id":"AAAAVn%2F%2FBVM%3D","line":301,"in_reply_to":"AAAAVn%2F%2FE7Y%3D","updated":"2014-03-10 16:59:02.000000000","message":"I am a coward and I don\u0027t want to enable it by default for icehouse.\nI am confident the feature is well designed and implemented even better, but, as stated earlier, I am a coward, and I would vote for enabling notifications by default as soon as Juno gates open.","commit_id":"59ea4d3ae2daa8e3a71aac8a7f420155473e4eb8"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"f30b04f4538333a8c85cd2e7daae2c056c21b3e8","unresolved":false,"context_lines":[{"line_number":298,"context_line":""},{"line_number":299,"context_line":"# Send notifications to nova when port data (fixed_ips/floatingips) change"},{"line_number":300,"context_line":"# so nova can update it\u0027s cache."},{"line_number":301,"context_line":"# notify_nova_port_change \u003d True"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"# URL for connection to nova (Only supports one nova region currently)."},{"line_number":304,"context_line":"# nova_url \u003d http://127.0.0.1:8774"}],"source_content_type":"text/plain","patch_set":8,"id":"AAAAVn%2F%2FE7Y%3D","line":301,"in_reply_to":"AAAAVn%2F%2FFAE%3D","updated":"2014-03-10 05:54:30.000000000","message":"Done","commit_id":"59ea4d3ae2daa8e3a71aac8a7f420155473e4eb8"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"5454af34618ec767ed0d6f3c8d833e2afd97177d","unresolved":false,"context_lines":[{"line_number":298,"context_line":""},{"line_number":299,"context_line":"# Send notifications to nova when port data (fixed_ips/floatingips) change"},{"line_number":300,"context_line":"# so nova can update it\u0027s cache."},{"line_number":301,"context_line":"# notify_nova_on_port_data_changes \u003d False"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"# URL for connection to nova (Only supports one nova region currently)."},{"line_number":304,"context_line":"# nova_url \u003d http://127.0.0.1:8774"}],"source_content_type":"text/plain","patch_set":9,"id":"AAAAVn%2F%2B%2FYs%3D","line":301,"updated":"2014-03-10 20:44:45.000000000","message":"I didn\u0027t realize Nova is waiting on notifications by default.  I don\u0027t think we have a choice but to enable notifications by default as well, or we\u0027re not holding up our end of the bargain.","commit_id":"d102b53f1b0d36102734546fe472fe474208ee9c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"3e66d2968bbae7bb03ac6bec6e749832ed273099","unresolved":false,"context_lines":[{"line_number":298,"context_line":""},{"line_number":299,"context_line":"# Send notifications to nova when port data (fixed_ips/floatingips) change"},{"line_number":300,"context_line":"# so nova can update it\u0027s cache."},{"line_number":301,"context_line":"# notify_nova_on_port_data_changes \u003d False"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"# URL for connection to nova (Only supports one nova region currently)."},{"line_number":304,"context_line":"# nova_url \u003d http://127.0.0.1:8774"}],"source_content_type":"text/plain","patch_set":9,"id":"AAAAVn%2F%2B%2B6s%3D","line":301,"in_reply_to":"AAAAVn%2F%2B%2FYs%3D","updated":"2014-03-10 21:46:42.000000000","message":"I agree.","commit_id":"d102b53f1b0d36102734546fe472fe474208ee9c"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"2e018fcb58766e76c9403ab5de347d5c49aa44ce","unresolved":false,"context_lines":[{"line_number":296,"context_line":"# Send notification to nova when port status is active."},{"line_number":297,"context_line":"# notify_nova_on_port_status_changes \u003d True"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"# Send notifications to nova when port data (fixed_ips/floatingips) change"},{"line_number":300,"context_line":"# so nova can update it\u0027s cache."},{"line_number":301,"context_line":"# notify_nova_on_port_data_changes \u003d True"},{"line_number":302,"context_line":""}],"source_content_type":"text/plain","patch_set":15,"id":"AAAAVn%2F%2B90E%3D","line":299,"updated":"2014-03-11 00:51:21.000000000","message":"I apologize if this is a stupid question, but is there a reason for granular notification configuration?  Presumably these are critical or we wouldn\u0027t be defaulting them to true, so maybe it makes sense to have a single configuration value \u0027notify_nova_on_changes\u0027.","commit_id":"f9718d089415316dc6e74bc9e9078bfc2f10cf1a"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"0fe9e3766b3b0788c0d3106f8d22df3c7a74c955","unresolved":false,"context_lines":[{"line_number":296,"context_line":"# Send notification to nova when port status is active."},{"line_number":297,"context_line":"# notify_nova_on_port_status_changes \u003d True"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"# Send notifications to nova when port data (fixed_ips/floatingips) change"},{"line_number":300,"context_line":"# so nova can update it\u0027s cache."},{"line_number":301,"context_line":"# notify_nova_on_port_data_changes \u003d True"},{"line_number":302,"context_line":""}],"source_content_type":"text/plain","patch_set":15,"id":"AAAAVn%2F%2B9hM%3D","line":299,"in_reply_to":"AAAAVn%2F%2B90E%3D","updated":"2014-03-11 02:03:42.000000000","message":"My though was that if a plugin didn\u0027t implement status correctly they could disable the status notification from being set and just have nova boot the instance.\n\nThat\u0027s why i wanted to break them into to options.","commit_id":"f9718d089415316dc6e74bc9e9078bfc2f10cf1a"}],"neutron/api/v2/base.py":[{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"ef3fe8068aa79e4f56d8f0dc89034b81f188dd3e","unresolved":false,"context_lines":[{"line_number":413,"context_line":"                kwargs.update({self._resource: body})"},{"line_number":414,"context_line":"                obj \u003d obj_creator(request.context, **kwargs)"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"                self._nova_callback.notify_nova_of_network_change("},{"line_number":417,"context_line":"                    action, {}, {self._resource: obj})"},{"line_number":418,"context_line":"                return notify({self._resource: self._view(request.context,"},{"line_number":419,"context_line":"                                                          obj)})"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAVn%2F%2FS54%3D","line":416,"updated":"2014-03-07 00:30:30.000000000","message":"If you decide to adopt my naming suggestion in review 75253 then this could read:\n\n  self._nova_notifier.send_network_change(...)","commit_id":"736853432a41ef7ce2dfdc4d76f0a63414db8639"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"22e713c910e3c3928ff0e3598fb9d3532a2ef5dd","unresolved":false,"context_lines":[{"line_number":413,"context_line":"                kwargs.update({self._resource: body})"},{"line_number":414,"context_line":"                obj \u003d obj_creator(request.context, **kwargs)"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"                self._nova_callback.notify_nova_of_network_change("},{"line_number":417,"context_line":"                    action, {}, {self._resource: obj})"},{"line_number":418,"context_line":"                return notify({self._resource: self._view(request.context,"},{"line_number":419,"context_line":"                                                          obj)})"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAVn%2F%2FLfc%3D","line":416,"in_reply_to":"AAAAVn%2F%2FS54%3D","updated":"2014-03-07 20:20:46.000000000","message":"Done","commit_id":"736853432a41ef7ce2dfdc4d76f0a63414db8639"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ba1069a2a01ac9e68c3440a3edc31fc212012d7b","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import copy"},{"line_number":19,"context_line":"import netaddr"},{"line_number":20,"context_line":"import webob.exc"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FICQ%3D","line":18,"updated":"2014-03-08 19:47:40.000000000","message":"Nit: a blank line here.","commit_id":"59ea4d3ae2daa8e3a71aac8a7f420155473e4eb8"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"5f3f9825849fe647e1b15bb1cdd41fb8694baa49","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import copy"},{"line_number":19,"context_line":"import netaddr"},{"line_number":20,"context_line":"import webob.exc"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FAaA%3D","line":18,"in_reply_to":"AAAAVn%2F%2FHns%3D","updated":"2014-03-10 19:04:13.000000000","message":"Actually no?","commit_id":"59ea4d3ae2daa8e3a71aac8a7f420155473e4eb8"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"d750892f1e55e6962307a7cef43da8e7df4c5483","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import copy"},{"line_number":19,"context_line":"import netaddr"},{"line_number":20,"context_line":"import webob.exc"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FHns%3D","line":18,"in_reply_to":"AAAAVn%2F%2FICQ%3D","updated":"2014-03-09 02:51:52.000000000","message":"Done","commit_id":"59ea4d3ae2daa8e3a71aac8a7f420155473e4eb8"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"43ff1e70e89e34060f616a73072c1f5bc164d93b","unresolved":false,"context_lines":[{"line_number":481,"context_line":"                          \u0027default\u0027 not in value)]"},{"line_number":482,"context_line":"        orig_obj \u003d self._item(request, id, field_list\u003dfield_list,"},{"line_number":483,"context_line":"                              parent_id\u003dparent_id)"},{"line_number":484,"context_line":"        orignal_object_copy \u003d copy.copy(orig_obj)"},{"line_number":485,"context_line":"        orig_obj.update(body[self._resource])"},{"line_number":486,"context_line":"        try:"},{"line_number":487,"context_line":"            policy.enforce(request.context,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FE20%3D","line":484,"updated":"2014-03-10 06:19:41.000000000","message":"nit:  should be original_object_copy","commit_id":"59ea4d3ae2daa8e3a71aac8a7f420155473e4eb8"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"5f3f9825849fe647e1b15bb1cdd41fb8694baa49","unresolved":false,"context_lines":[{"line_number":481,"context_line":"                          \u0027default\u0027 not in value)]"},{"line_number":482,"context_line":"        orig_obj \u003d self._item(request, id, field_list\u003dfield_list,"},{"line_number":483,"context_line":"                              parent_id\u003dparent_id)"},{"line_number":484,"context_line":"        orignal_object_copy \u003d copy.copy(orig_obj)"},{"line_number":485,"context_line":"        orig_obj.update(body[self._resource])"},{"line_number":486,"context_line":"        try:"},{"line_number":487,"context_line":"            policy.enforce(request.context,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FAZE%3D","line":484,"in_reply_to":"AAAAVn%2F%2FAtA%3D","updated":"2014-03-10 19:04:13.000000000","message":"Done","commit_id":"59ea4d3ae2daa8e3a71aac8a7f420155473e4eb8"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"21ac704d00d700631bee970fe20e3076f5a64204","unresolved":false,"context_lines":[{"line_number":481,"context_line":"                          \u0027default\u0027 not in value)]"},{"line_number":482,"context_line":"        orig_obj \u003d self._item(request, id, field_list\u003dfield_list,"},{"line_number":483,"context_line":"                              parent_id\u003dparent_id)"},{"line_number":484,"context_line":"        orignal_object_copy \u003d copy.copy(orig_obj)"},{"line_number":485,"context_line":"        orig_obj.update(body[self._resource])"},{"line_number":486,"context_line":"        try:"},{"line_number":487,"context_line":"            policy.enforce(request.context,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FAtA%3D","line":484,"in_reply_to":"AAAAVn%2F%2FE20%3D","updated":"2014-03-10 18:19:27.000000000","message":"It probably makes sense to be consistent with the existing abreviation and use \u0027orig\u0027 instead.","commit_id":"59ea4d3ae2daa8e3a71aac8a7f420155473e4eb8"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"5be1c2daa73032964bc14cd45d10276c573eaf2e","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            agent_notifiers.get(const.AGENT_TYPE_DHCP) or"},{"line_number":78,"context_line":"            dhcp_rpc_agent_api.DhcpAgentNotifyAPI()"},{"line_number":79,"context_line":"        )"},{"line_number":80,"context_line":"        self._nova_notifier \u003d nova.Notifier()"},{"line_number":81,"context_line":"        self._member_actions \u003d member_actions"},{"line_number":82,"context_line":"        self._primary_key \u003d self._get_primary_key()"},{"line_number":83,"context_line":"        if self._allow_pagination and self._native_pagination:"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAVn%2F%2B4rQ%3D","line":80,"updated":"2014-03-11 14:56:03.000000000","message":"self._nova_notifier \u003d nova.Notifier(plugin)","commit_id":"b64bbe4bb7650724f4b820bc2e3ec6ffd9c9c9e7"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"727b65732be6b3c1dda5f597f3b233f71570d0f4","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            agent_notifiers.get(const.AGENT_TYPE_DHCP) or"},{"line_number":78,"context_line":"            dhcp_rpc_agent_api.DhcpAgentNotifyAPI()"},{"line_number":79,"context_line":"        )"},{"line_number":80,"context_line":"        self._nova_notifier \u003d nova.Notifier()"},{"line_number":81,"context_line":"        self._member_actions \u003d member_actions"},{"line_number":82,"context_line":"        self._primary_key \u003d self._get_primary_key()"},{"line_number":83,"context_line":"        if self._allow_pagination and self._native_pagination:"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAVn%2F%2B4SY%3D","line":80,"in_reply_to":"AAAAVn%2F%2B4rQ%3D","updated":"2014-03-11 15:25:31.000000000","message":"I had this before but the problem is calling from the db_base_class.","commit_id":"b64bbe4bb7650724f4b820bc2e3ec6ffd9c9c9e7"}],"neutron/callbacks/nova.py":[{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"6afd022a6cf0324a0a69701b99caa875a276c4a1","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            return True"},{"line_number":53,"context_line":"        return False"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def update(self, action, original_obj, returned_obj):"},{"line_number":56,"context_line":"        if not cfg.CONF.notify_nova_port_change:"},{"line_number":57,"context_line":"            return"},{"line_number":58,"context_line":"        if action \u003d\u003d \u0027update_port\u0027:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FnYA%3D","line":55,"updated":"2014-03-05 02:22:16.000000000","message":"Would a more descriptive name be appropriate here?  Maybe notify_nova_of_network_change?\n\nAlso, this method is unnecessarily complicated.  Please refactor for clarity and testability, e.g.\n\ndef notify():\n  if updated_port:\n    event \u003d get_port_event()\n  elif updated_ip:\n    event \u003d get_ip_event()\n  if event:\n     send_event(event)","commit_id":"01a5abf9ef52570288d105552d18e2378bda06a0"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"e7675a029523bf1d0376763a5c81d595ed76f3b7","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            return True"},{"line_number":53,"context_line":"        return False"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def update(self, action, original_obj, returned_obj):"},{"line_number":56,"context_line":"        if not cfg.CONF.notify_nova_port_change:"},{"line_number":57,"context_line":"            return"},{"line_number":58,"context_line":"        if action \u003d\u003d \u0027update_port\u0027:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FlVM%3D","line":55,"in_reply_to":"AAAAVn%2F%2FnYA%3D","updated":"2014-03-05 08:29:39.000000000","message":"+1","commit_id":"01a5abf9ef52570288d105552d18e2378bda06a0"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"6ff505c668d16931563da3b00e7801d4e021daa3","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            return True"},{"line_number":53,"context_line":"        return False"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def update(self, action, original_obj, returned_obj):"},{"line_number":56,"context_line":"        if not cfg.CONF.notify_nova_port_change:"},{"line_number":57,"context_line":"            return"},{"line_number":58,"context_line":"        if action \u003d\u003d \u0027update_port\u0027:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FnEQ%3D","line":55,"in_reply_to":"AAAAVn%2F%2FnYA%3D","updated":"2014-03-05 03:07:47.000000000","message":"Will come back to this in the next, next patch set. Want to get this running in the CI first.","commit_id":"01a5abf9ef52570288d105552d18e2378bda06a0"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"6afd022a6cf0324a0a69701b99caa875a276c4a1","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        if action \u003d\u003d \u0027update_port\u0027:"},{"line_number":59,"context_line":"            port \u003d returned_obj[\u0027port\u0027]"},{"line_number":60,"context_line":"            if self._is_compute_port(port):"},{"line_number":61,"context_line":"                event \u003d {\u0027name\u0027: \u0027network-changed\u0027,"},{"line_number":62,"context_line":"                         \u0027server_uuid\u0027: port[\u0027device_id\u0027],"},{"line_number":63,"context_line":"                         \u0027status\u0027: \u0027completed\u0027}"},{"line_number":64,"context_line":"                self.notify_nova([event])"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FnyU%3D","line":61,"updated":"2014-03-05 02:22:16.000000000","message":"What do you think about creating a first-class event object that gets serialized to a dict as needed?  There\u0027s no need to use dicts internally for well-defined interfaces despite what the current codebase suggests.","commit_id":"01a5abf9ef52570288d105552d18e2378bda06a0"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"6afd022a6cf0324a0a69701b99caa875a276c4a1","unresolved":false,"context_lines":[{"line_number":72,"context_line":"                           original_obj[\u0027port_id\u0027])"},{"line_number":73,"context_line":"            except KeyError:"},{"line_number":74,"context_line":"                # NOTE(arosen): there is a bug in neutron that allows"},{"line_number":75,"context_line":"                # disassociate floatingip to reutrn successfully even if"},{"line_number":76,"context_line":"                # there isn\u0027t a port_id assocaited. Remove once that is fixed."},{"line_number":77,"context_line":"                return"},{"line_number":78,"context_line":"            ctx \u003d context.get_admin_context()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FnzA%3D","line":75,"updated":"2014-03-05 02:22:16.000000000","message":"reutrn -\u003e return","commit_id":"01a5abf9ef52570288d105552d18e2378bda06a0"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"6ff505c668d16931563da3b00e7801d4e021daa3","unresolved":false,"context_lines":[{"line_number":72,"context_line":"                           original_obj[\u0027port_id\u0027])"},{"line_number":73,"context_line":"            except KeyError:"},{"line_number":74,"context_line":"                # NOTE(arosen): there is a bug in neutron that allows"},{"line_number":75,"context_line":"                # disassociate floatingip to reutrn successfully even if"},{"line_number":76,"context_line":"                # there isn\u0027t a port_id assocaited. Remove once that is fixed."},{"line_number":77,"context_line":"                return"},{"line_number":78,"context_line":"            ctx \u003d context.get_admin_context()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FnEk%3D","line":75,"in_reply_to":"AAAAVn%2F%2FnzA%3D","updated":"2014-03-05 03:07:47.000000000","message":"Done","commit_id":"01a5abf9ef52570288d105552d18e2378bda06a0"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"e7675a029523bf1d0376763a5c81d595ed76f3b7","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                # disassociate floatingip to reutrn successfully even if"},{"line_number":76,"context_line":"                # there isn\u0027t a port_id assocaited. Remove once that is fixed."},{"line_number":77,"context_line":"                return"},{"line_number":78,"context_line":"            ctx \u003d context.get_admin_context()"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"            # NOTE(arosen): this cannot be set in __init__ currently since"},{"line_number":81,"context_line":"            # this class is initalized at the sametime as NeutronManager()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FlUU%3D","line":78,"updated":"2014-03-05 08:29:39.000000000","message":"+1 too","commit_id":"01a5abf9ef52570288d105552d18e2378bda06a0"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"57e3636124fcb03208ab3dc4d2c11f65884b4b92","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                # disassociate floatingip to reutrn successfully even if"},{"line_number":76,"context_line":"                # there isn\u0027t a port_id assocaited. Remove once that is fixed."},{"line_number":77,"context_line":"                return"},{"line_number":78,"context_line":"            ctx \u003d context.get_admin_context()"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"            # NOTE(arosen): this cannot be set in __init__ currently since"},{"line_number":81,"context_line":"            # this class is initalized at the sametime as NeutronManager()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FnEA%3D","line":78,"updated":"2014-03-05 03:12:31.000000000","message":"Move to line 85?","commit_id":"01a5abf9ef52570288d105552d18e2378bda06a0"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"6afd022a6cf0324a0a69701b99caa875a276c4a1","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            # NOTE(arosen): this cannot be set in __init__ currently since"},{"line_number":81,"context_line":"            # this class is initalized at the sametime as NeutronManager()"},{"line_number":82,"context_line":"            # which is decorated with synchronized()"},{"line_number":83,"context_line":"            if not self._plugin:"},{"line_number":84,"context_line":"                self._plugin \u003d manager.NeutronManager.get_plugin()"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"            port \u003d self._plugin.get_port(ctx, port_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2Fnw8%3D","line":83,"updated":"2014-03-05 02:22:16.000000000","message":"Please perform lazy loading of the plugin in a property rather than inline.","commit_id":"01a5abf9ef52570288d105552d18e2378bda06a0"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"d035a1f579c900f1503be843f541fb4c2da23478","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            # NOTE(arosen): this cannot be set in __init__ currently since"},{"line_number":81,"context_line":"            # this class is initalized at the sametime as NeutronManager()"},{"line_number":82,"context_line":"            # which is decorated with synchronized()"},{"line_number":83,"context_line":"            if not self._plugin:"},{"line_number":84,"context_line":"                self._plugin \u003d manager.NeutronManager.get_plugin()"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"            port \u003d self._plugin.get_port(ctx, port_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FfSo%3D","line":83,"in_reply_to":"AAAAVn%2F%2FlSk%3D","updated":"2014-03-05 19:39:31.000000000","message":"Yes, that is the intent (and a mutator to match).  \n\nIn this case there is no performance benefit from extracting plugin initialization, since loading is already lazy.  The intent  is to encapsulate initialization so this method doesn\u0027t have to worry about it and mocking can be done for the property rather than the get_plugin().","commit_id":"01a5abf9ef52570288d105552d18e2378bda06a0"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"e7675a029523bf1d0376763a5c81d595ed76f3b7","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            # NOTE(arosen): this cannot be set in __init__ currently since"},{"line_number":81,"context_line":"            # this class is initalized at the sametime as NeutronManager()"},{"line_number":82,"context_line":"            # which is decorated with synchronized()"},{"line_number":83,"context_line":"            if not self._plugin:"},{"line_number":84,"context_line":"                self._plugin \u003d manager.NeutronManager.get_plugin()"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"            port \u003d self._plugin.get_port(ctx, port_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FlSk%3D","line":83,"in_reply_to":"AAAAVn%2F%2Fnw8%3D","updated":"2014-03-05 08:29:39.000000000","message":"Something like?\n\n@attribute\ndef _plugin(self):\n    if not self._plugin_ref:\n        self._plugin_ref \u003d manager.NeutronManager.get_plugin()\n    return self._plugin_ref\n\n\nI agree with you, we\u0027ve lots of performance problems in neutron, even\nwhen they are really small, they end summing up to bigger numbers.","commit_id":"01a5abf9ef52570288d105552d18e2378bda06a0"}],"neutron/common/config.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"57e3636124fcb03208ab3dc4d2c11f65884b4b92","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                       \" active\")),"},{"line_number":88,"context_line":"    cfg.BoolOpt(\u0027notify_nova_port_change\u0027, default\u003dFalse,"},{"line_number":89,"context_line":"                help\u003d_(\"Send notification to nova when port data (fixed_ip/\""},{"line_number":90,"context_line":"                       \"floatingip changed so nova can update it\u0027s cache.\")),"},{"line_number":91,"context_line":"    cfg.StrOpt(\u0027nova_url\u0027,"},{"line_number":92,"context_line":"               default\u003d\u0027http://127.0.0.1:8774\u0027,"},{"line_number":93,"context_line":"               help\u003d_(\u0027URL for connection to nova\u0027)),"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FnPA%3D","line":90,"updated":"2014-03-05 03:12:31.000000000","message":"nits:\ns/floatingip/floatingip)  (missing close-parens)\ns/changed/changes\ns/it\u0027s/its","commit_id":"01a5abf9ef52570288d105552d18e2378bda06a0"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"2c2356639328189adbe975750eeb65c773270ebe","unresolved":false,"context_lines":[{"line_number":85,"context_line":"                help\u003d_(\"Send notification to nova when port status changes\")),"},{"line_number":86,"context_line":"    cfg.BoolOpt(\u0027notify_nova_port_change\u0027, default\u003dTrue,"},{"line_number":87,"context_line":"                help\u003d_(\"Send notification to nova when port data (fixed_ips/\""},{"line_number":88,"context_line":"                       \"floatingip) changes so nova can update it\u0027s cache.\")),"},{"line_number":89,"context_line":"    cfg.StrOpt(\u0027nova_url\u0027,"},{"line_number":90,"context_line":"               default\u003d\u0027http://127.0.0.1:8774\u0027,"},{"line_number":91,"context_line":"               help\u003d_(\u0027URL for connection to nova\u0027)),"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FBTg%3D","line":88,"updated":"2014-03-10 16:59:02.000000000","message":"Should be \"its\" rather than \"it\u0027s\".\nps: if \"it\u0027s\" is correct as well, do you mind explaining me why? That\u0027s something I never understood.","commit_id":"59ea4d3ae2daa8e3a71aac8a7f420155473e4eb8"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"21ac704d00d700631bee970fe20e3076f5a64204","unresolved":false,"context_lines":[{"line_number":85,"context_line":"                help\u003d_(\"Send notification to nova when port status changes\")),"},{"line_number":86,"context_line":"    cfg.BoolOpt(\u0027notify_nova_port_change\u0027, default\u003dTrue,"},{"line_number":87,"context_line":"                help\u003d_(\"Send notification to nova when port data (fixed_ips/\""},{"line_number":88,"context_line":"                       \"floatingip) changes so nova can update it\u0027s cache.\")),"},{"line_number":89,"context_line":"    cfg.StrOpt(\u0027nova_url\u0027,"},{"line_number":90,"context_line":"               default\u003d\u0027http://127.0.0.1:8774\u0027,"},{"line_number":91,"context_line":"               help\u003d_(\u0027URL for connection to nova\u0027)),"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FAr0%3D","line":88,"in_reply_to":"AAAAVn%2F%2FBTg%3D","updated":"2014-03-10 18:19:27.000000000","message":"it\u0027s -\u003e contraction for \u0027it is\u0027, \u0027it\u0027s raining\u0027\nits -\u003e possessive pronoun, \"its name\"","commit_id":"59ea4d3ae2daa8e3a71aac8a7f420155473e4eb8"}],"neutron/extensions/l3.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"5be1c2daa73032964bc14cd45d10276c573eaf2e","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        \u0027port_id\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":120,"context_line":"                    \u0027validate\u0027: {\u0027type:uuid_or_none\u0027: None},"},{"line_number":121,"context_line":"                    \u0027is_visible\u0027: True, \u0027default\u0027: None,"},{"line_number":122,"context_line":"                    \u0027required_by_policy\u0027: True},"},{"line_number":123,"context_line":"        \u0027fixed_ip_address\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":124,"context_line":"                             \u0027validate\u0027: {\u0027type:ip_address_or_none\u0027: None},"},{"line_number":125,"context_line":"                             \u0027is_visible\u0027: True, \u0027default\u0027: None},"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAVn%2F%2B4q0%3D","line":122,"updated":"2014-03-11 14:56:03.000000000","message":"???","commit_id":"b64bbe4bb7650724f4b820bc2e3ec6ffd9c9c9e7"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"727b65732be6b3c1dda5f597f3b233f71570d0f4","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        \u0027port_id\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":120,"context_line":"                    \u0027validate\u0027: {\u0027type:uuid_or_none\u0027: None},"},{"line_number":121,"context_line":"                    \u0027is_visible\u0027: True, \u0027default\u0027: None,"},{"line_number":122,"context_line":"                    \u0027required_by_policy\u0027: True},"},{"line_number":123,"context_line":"        \u0027fixed_ip_address\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":124,"context_line":"                             \u0027validate\u0027: {\u0027type:ip_address_or_none\u0027: None},"},{"line_number":125,"context_line":"                             \u0027is_visible\u0027: True, \u0027default\u0027: None},"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAVn%2F%2B4Tc%3D","line":122,"in_reply_to":"AAAAVn%2F%2B4q0%3D","updated":"2014-03-11 15:25:31.000000000","message":"This was needed because I need port_id returned by the policy engine so that I can get it to look up the device_id in the notify code.","commit_id":"b64bbe4bb7650724f4b820bc2e3ec6ffd9c9c9e7"}],"neutron/notifiers/nova.py":[{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"43ff1e70e89e34060f616a73072c1f5bc164d93b","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        self._plugin_ref \u003d None"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def _is_compute_port(self, port):"},{"line_number":56,"context_line":"        if port[\u0027device_id\u0027] and port[\u0027device_owner\u0027].startswith(\u0027compute\u0027):"},{"line_number":57,"context_line":"            return True"},{"line_number":58,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FE2c%3D","line":55,"updated":"2014-03-10 06:19:41.000000000","message":"this logic seems quite common and probably used in other places. Please consider to move it into common placeholder","commit_id":"59ea4d3ae2daa8e3a71aac8a7f420155473e4eb8"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"5f3f9825849fe647e1b15bb1cdd41fb8694baa49","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        self._plugin_ref \u003d None"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def _is_compute_port(self, port):"},{"line_number":56,"context_line":"        if port[\u0027device_id\u0027] and port[\u0027device_owner\u0027].startswith(\u0027compute\u0027):"},{"line_number":57,"context_line":"            return True"},{"line_number":58,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FASs%3D","line":55,"in_reply_to":"AAAAVn%2F%2FE2c%3D","updated":"2014-03-10 19:04:13.000000000","message":"Done","commit_id":"59ea4d3ae2daa8e3a71aac8a7f420155473e4eb8"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ba1069a2a01ac9e68c3440a3edc31fc212012d7b","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    def _plugin(self):"},{"line_number":66,"context_line":"        # NOTE(arosen): this cannot be set in __init__ currently since"},{"line_number":67,"context_line":"        # this class is initalized at the sametime as NeutronManager()"},{"line_number":68,"context_line":"        # which is decorated with synchronized()"},{"line_number":69,"context_line":"        if not self._plugin_ref:"},{"line_number":70,"context_line":"            self._plugin_ref \u003d manager.NeutronManager.get_plugin()"},{"line_number":71,"context_line":"        return self._plugin_ref"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FIBE%3D","line":68,"updated":"2014-03-08 19:47:40.000000000","message":"Question: Where is synchronized decorator used?\n\nI understand we cannot call get_plugin in __init__.","commit_id":"59ea4d3ae2daa8e3a71aac8a7f420155473e4eb8"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"2112d1e37b57a6d2d68d0409c271acf1ff9c82a9","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    def _plugin(self):"},{"line_number":66,"context_line":"        # NOTE(arosen): this cannot be set in __init__ currently since"},{"line_number":67,"context_line":"        # this class is initalized at the sametime as NeutronManager()"},{"line_number":68,"context_line":"        # which is decorated with synchronized()"},{"line_number":69,"context_line":"        if not self._plugin_ref:"},{"line_number":70,"context_line":"            self._plugin_ref \u003d manager.NeutronManager.get_plugin()"},{"line_number":71,"context_line":"        return self._plugin_ref"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FHlE%3D","line":68,"in_reply_to":"AAAAVn%2F%2FHno%3D","updated":"2014-03-09 04:27:45.000000000","message":"Thanks. I missed it.","commit_id":"59ea4d3ae2daa8e3a71aac8a7f420155473e4eb8"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"d750892f1e55e6962307a7cef43da8e7df4c5483","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    def _plugin(self):"},{"line_number":66,"context_line":"        # NOTE(arosen): this cannot be set in __init__ currently since"},{"line_number":67,"context_line":"        # this class is initalized at the sametime as NeutronManager()"},{"line_number":68,"context_line":"        # which is decorated with synchronized()"},{"line_number":69,"context_line":"        if not self._plugin_ref:"},{"line_number":70,"context_line":"            self._plugin_ref \u003d manager.NeutronManager.get_plugin()"},{"line_number":71,"context_line":"        return self._plugin_ref"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FHno%3D","line":68,"in_reply_to":"AAAAVn%2F%2FIBE%3D","updated":"2014-03-09 02:51:52.000000000","message":"https://github.com/openstack/neutron/blob/master/neutron/manager.py#L197","commit_id":"59ea4d3ae2daa8e3a71aac8a7f420155473e4eb8"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"21ac704d00d700631bee970fe20e3076f5a64204","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        # NOTE(arosen): this cannot be set in __init__ currently since"},{"line_number":67,"context_line":"        # this class is initalized at the sametime as NeutronManager()"},{"line_number":68,"context_line":"        # which is decorated with synchronized()"},{"line_number":69,"context_line":"        if not self._plugin_ref:"},{"line_number":70,"context_line":"            self._plugin_ref \u003d manager.NeutronManager.get_plugin()"},{"line_number":71,"context_line":"        return self._plugin_ref"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FArA%3D","line":69,"updated":"2014-03-10 18:19:27.000000000","message":"(Suggestion only) Consider using the hasattr idiom and skip initialization in __init__:\n\nif not hasattr(self, \u0027_plugin_ref\u0027):\n  ..","commit_id":"59ea4d3ae2daa8e3a71aac8a7f420155473e4eb8"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"5f3f9825849fe647e1b15bb1cdd41fb8694baa49","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        # NOTE(arosen): this cannot be set in __init__ currently since"},{"line_number":67,"context_line":"        # this class is initalized at the sametime as NeutronManager()"},{"line_number":68,"context_line":"        # which is decorated with synchronized()"},{"line_number":69,"context_line":"        if not self._plugin_ref:"},{"line_number":70,"context_line":"            self._plugin_ref \u003d manager.NeutronManager.get_plugin()"},{"line_number":71,"context_line":"        return self._plugin_ref"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FASM%3D","line":69,"in_reply_to":"AAAAVn%2F%2FArA%3D","updated":"2014-03-10 19:04:13.000000000","message":"having _plugin_ref in the __init__ method allows me to easily monkey patch for testing.","commit_id":"59ea4d3ae2daa8e3a71aac8a7f420155473e4eb8"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"21ac704d00d700631bee970fe20e3076f5a64204","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            self._plugin_ref \u003d manager.NeutronManager.get_plugin()"},{"line_number":71,"context_line":"        return self._plugin_ref"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def send_network_change(self, action, original_obj,"},{"line_number":74,"context_line":"                            returned_obj):"},{"line_number":75,"context_line":"        \"\"\"Called when a network change is made that nova cares about."},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FAo0%3D","line":73,"updated":"2014-03-10 18:19:27.000000000","message":"As per a comment on Patch #1:\n\nThis method is unnecessarily complicated. Please refactor for clarity and testability, e.g.\n\ndef notify():\n  if updated_port:\n    event \u003d get_port_event()\n  elif updated_ip:\n    event \u003d get_ip_event()\n  if event:\n     send_event(event)","commit_id":"59ea4d3ae2daa8e3a71aac8a7f420155473e4eb8"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"5f3f9825849fe647e1b15bb1cdd41fb8694baa49","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            self._plugin_ref \u003d manager.NeutronManager.get_plugin()"},{"line_number":71,"context_line":"        return self._plugin_ref"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def send_network_change(self, action, original_obj,"},{"line_number":74,"context_line":"                            returned_obj):"},{"line_number":75,"context_line":"        \"\"\"Called when a network change is made that nova cares about."},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FAN0%3D","line":73,"in_reply_to":"AAAAVn%2F%2FAo0%3D","updated":"2014-03-10 19:04:13.000000000","message":"Done","commit_id":"59ea4d3ae2daa8e3a71aac8a7f420155473e4eb8"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"21ac704d00d700631bee970fe20e3076f5a64204","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                            returned_obj):"},{"line_number":75,"context_line":"        \"\"\"Called when a network change is made that nova cares about."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        :param action: - the event that occured."},{"line_number":78,"context_line":"        :param original_obj: the previous value of resource before action."},{"line_number":79,"context_line":"        :param returned_obj: the body returned to client as result of action."},{"line_number":80,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FAq0%3D","line":77,"updated":"2014-03-10 18:19:27.000000000","message":"superfluous leading dash","commit_id":"59ea4d3ae2daa8e3a71aac8a7f420155473e4eb8"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"5f3f9825849fe647e1b15bb1cdd41fb8694baa49","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                            returned_obj):"},{"line_number":75,"context_line":"        \"\"\"Called when a network change is made that nova cares about."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        :param action: - the event that occured."},{"line_number":78,"context_line":"        :param original_obj: the previous value of resource before action."},{"line_number":79,"context_line":"        :param returned_obj: the body returned to client as result of action."},{"line_number":80,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FASE%3D","line":77,"in_reply_to":"AAAAVn%2F%2FAq0%3D","updated":"2014-03-10 19:04:13.000000000","message":"Done","commit_id":"59ea4d3ae2daa8e3a71aac8a7f420155473e4eb8"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"43ff1e70e89e34060f616a73072c1f5bc164d93b","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        event \u003d None"},{"line_number":86,"context_line":"        if action \u003d\u003d \u0027update_port\u0027:"},{"line_number":87,"context_line":"            port \u003d returned_obj[\u0027port\u0027]"},{"line_number":88,"context_line":"            if self._is_compute_port(port):"},{"line_number":89,"context_line":"                event \u003d self._get_network_changed_event(port[\u0027device_id\u0027])"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        elif action in [\u0027update_floatingip\u0027, \u0027create_floatingip\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FE08%3D","line":88,"updated":"2014-03-10 06:19:41.000000000","message":"please consider check for is_compute_port before entering into different actions cases. It can be done once, no need to call on line 88 and 107. Also, if I understand correctly, if its not compute port, there is no event to notify.","commit_id":"59ea4d3ae2daa8e3a71aac8a7f420155473e4eb8"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"5f3f9825849fe647e1b15bb1cdd41fb8694baa49","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        event \u003d None"},{"line_number":86,"context_line":"        if action \u003d\u003d \u0027update_port\u0027:"},{"line_number":87,"context_line":"            port \u003d returned_obj[\u0027port\u0027]"},{"line_number":88,"context_line":"            if self._is_compute_port(port):"},{"line_number":89,"context_line":"                event \u003d self._get_network_changed_event(port[\u0027device_id\u0027])"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        elif action in [\u0027update_floatingip\u0027, \u0027create_floatingip\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FAOQ%3D","line":88,"in_reply_to":"AAAAVn%2F%2FE08%3D","updated":"2014-03-10 19:04:13.000000000","message":"Done","commit_id":"59ea4d3ae2daa8e3a71aac8a7f420155473e4eb8"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ba1069a2a01ac9e68c3440a3edc31fc212012d7b","unresolved":false,"context_lines":[{"line_number":132,"context_line":"            return"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        # We only want to notify about nova ports."},{"line_number":135,"context_line":"        if (not port.device_owner or"},{"line_number":136,"context_line":"            not port.device_owner.startswith(\u0027compute\u0027)):"},{"line_number":137,"context_line":"            return"},{"line_number":138,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FIBw%3D","line":135,"updated":"2014-03-08 19:47:40.000000000","message":"Can\u0027t we use _is_compute_host above?","commit_id":"59ea4d3ae2daa8e3a71aac8a7f420155473e4eb8"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"d750892f1e55e6962307a7cef43da8e7df4c5483","unresolved":false,"context_lines":[{"line_number":132,"context_line":"            return"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        # We only want to notify about nova ports."},{"line_number":135,"context_line":"        if (not port.device_owner or"},{"line_number":136,"context_line":"            not port.device_owner.startswith(\u0027compute\u0027)):"},{"line_number":137,"context_line":"            return"},{"line_number":138,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FHnk%3D","line":135,"in_reply_to":"AAAAVn%2F%2FIBw%3D","updated":"2014-03-09 02:51:52.000000000","message":"Done","commit_id":"59ea4d3ae2daa8e3a71aac8a7f420155473e4eb8"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"1d6b672877dfb73bdb5dbca5ab8093e03abc0a9d","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        if event:"},{"line_number":174,"context_line":"            self.notify_nova(event)"},{"line_number":175,"context_line":"        port._notify_event \u003d None"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    def notify_nova(self, events):"},{"line_number":178,"context_line":"        LOG.debug(_(\"Sending events: %s\"), events)"},{"line_number":179,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FE%2FA%3D","line":176,"updated":"2014-03-10 05:30:51.000000000","message":"So far in this class you are not sending more than one event at a time. You could take a single event here, and put it in a list on line 180.","commit_id":"59ea4d3ae2daa8e3a71aac8a7f420155473e4eb8"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"f30b04f4538333a8c85cd2e7daae2c056c21b3e8","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        if event:"},{"line_number":174,"context_line":"            self.notify_nova(event)"},{"line_number":175,"context_line":"        port._notify_event \u003d None"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    def notify_nova(self, events):"},{"line_number":178,"context_line":"        LOG.debug(_(\"Sending events: %s\"), events)"},{"line_number":179,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FE7I%3D","line":176,"in_reply_to":"AAAAVn%2F%2FE%2FA%3D","updated":"2014-03-10 05:54:30.000000000","message":"Sure though I figure later we\u0027ll match the events or so something more optimized.","commit_id":"59ea4d3ae2daa8e3a71aac8a7f420155473e4eb8"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"5454af34618ec767ed0d6f3c8d833e2afd97177d","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        # NOTE(arosen): this cannot be set in __init__ currently since"},{"line_number":70,"context_line":"        # this class is initalized at the sametime as NeutronManager()"},{"line_number":71,"context_line":"        # which is decorated with synchronized()"},{"line_number":72,"context_line":"        if not self._plugin_ref:"},{"line_number":73,"context_line":"            self._plugin_ref \u003d manager.NeutronManager.get_plugin()"},{"line_number":74,"context_line":"        return self._plugin_ref"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAVn%2F%2B%2FXs%3D","line":72,"updated":"2014-03-10 20:44:45.000000000","message":"re: my suggestion on the last patch, I\u0027m not sure how it is any more difficult to monkey patch the hasattr case than this one.  Can you please explain?","commit_id":"d102b53f1b0d36102734546fe472fe474208ee9c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"3e66d2968bbae7bb03ac6bec6e749832ed273099","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        # NOTE(arosen): this cannot be set in __init__ currently since"},{"line_number":70,"context_line":"        # this class is initalized at the sametime as NeutronManager()"},{"line_number":71,"context_line":"        # which is decorated with synchronized()"},{"line_number":72,"context_line":"        if not self._plugin_ref:"},{"line_number":73,"context_line":"            self._plugin_ref \u003d manager.NeutronManager.get_plugin()"},{"line_number":74,"context_line":"        return self._plugin_ref"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAVn%2F%2B%2B1w%3D","line":72,"in_reply_to":"AAAAVn%2F%2B%2FXs%3D","updated":"2014-03-10 21:46:42.000000000","message":"Done","commit_id":"d102b53f1b0d36102734546fe472fe474208ee9c"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"57179bda914bfd70769a6f7c904be781ccfe421f","unresolved":false,"context_lines":[{"line_number":71,"context_line":"            self._plugin_ref \u003d manager.NeutronManager.get_plugin()"},{"line_number":72,"context_line":"        return self._plugin_ref"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def send_network_change(self, action, original_obj,"},{"line_number":75,"context_line":"                            returned_obj):"},{"line_number":76,"context_line":"        \"\"\"Called when a network change is made that nova cares about."},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAVn%2F%2B9Kc%3D","line":74,"updated":"2014-03-11 02:45:08.000000000","message":"(Suggestion only) This method would ideally have 3 tests - one for each possible execution path:\n\n- notification disabled\n- notification enabled, no event\n- notification enabled, event sent\n\nThere appears to be a test only for the second one.  But, it\u0027s a trivial enough case that I\u0027m not too worried about it.  I mainly wanted to point it out for future, because we are going to start tracking coverage properly in Juno.","commit_id":"faab0f17af8ec3c43ddcf27cecf1d7aa23af02cd"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"a6bef6e3a4dedc00799bd90946ceb1ba228398fe","unresolved":false,"context_lines":[{"line_number":71,"context_line":"            self._plugin_ref \u003d manager.NeutronManager.get_plugin()"},{"line_number":72,"context_line":"        return self._plugin_ref"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def send_network_change(self, action, original_obj,"},{"line_number":75,"context_line":"                            returned_obj):"},{"line_number":76,"context_line":"        \"\"\"Called when a network change is made that nova cares about."},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAVn%2F%2B9H8%3D","line":74,"in_reply_to":"AAAAVn%2F%2B9Kc%3D","updated":"2014-03-11 02:53:24.000000000","message":"notification disabled -   test_no_notification_notify_nova_on_port_data_changes_false\n\nnotification enabled, no event - test_delete_floatingip_no_port_id_no_notify\n\nnotification enabled, event sent -test_associate_floatingip_notify","commit_id":"faab0f17af8ec3c43ddcf27cecf1d7aa23af02cd"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"5be1c2daa73032964bc14cd45d10276c573eaf2e","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        return {\u0027name\u0027: \u0027network-changed\u0027,"},{"line_number":63,"context_line":"                \u0027server_uuid\u0027: device_id}"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    @property"},{"line_number":66,"context_line":"    def _plugin(self):"},{"line_number":67,"context_line":"        # NOTE(arosen): this cannot be set in __init__ currently since"},{"line_number":68,"context_line":"        # this class is initalized at the same time as NeutronManager()"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAVn%2F%2B4sU%3D","line":65,"updated":"2014-03-11 14:56:03.000000000","message":"Why not have the plugin pass itself when this class is instantiated?","commit_id":"b64bbe4bb7650724f4b820bc2e3ec6ffd9c9c9e7"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"727b65732be6b3c1dda5f597f3b233f71570d0f4","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        return {\u0027name\u0027: \u0027network-changed\u0027,"},{"line_number":63,"context_line":"                \u0027server_uuid\u0027: device_id}"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    @property"},{"line_number":66,"context_line":"    def _plugin(self):"},{"line_number":67,"context_line":"        # NOTE(arosen): this cannot be set in __init__ currently since"},{"line_number":68,"context_line":"        # this class is initalized at the same time as NeutronManager()"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAVn%2F%2B4Uc%3D","line":65,"in_reply_to":"AAAAVn%2F%2B4sU%3D","updated":"2014-03-11 15:25:31.000000000","message":"You don\u0027t have the plugin in the db_base_class in __init__","commit_id":"b64bbe4bb7650724f4b820bc2e3ec6ffd9c9c9e7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"5be1c2daa73032964bc14cd45d10276c573eaf2e","unresolved":false,"context_lines":[{"line_number":99,"context_line":"            # port_id is in the returned_obj. Otherwise on disassociate"},{"line_number":100,"context_line":"            # it\u0027s in the original_object"},{"line_number":101,"context_line":"            try:"},{"line_number":102,"context_line":"                port_id \u003d (returned_obj[\u0027floatingip\u0027][\u0027port_id\u0027] or"},{"line_number":103,"context_line":"                           original_obj[\u0027port_id\u0027])"},{"line_number":104,"context_line":"            except KeyError:"},{"line_number":105,"context_line":"                # NOTE(arosen): there is a bug in neutron that allows"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAVn%2F%2B4qE%3D","line":102,"updated":"2014-03-11 14:56:03.000000000","message":"port_id \u003d returned_obj[\u0027floatingip\u0027].get(\u0027port_id\u0027) or original_obj.get(\u0027port_id\u0027)\n\nif port_id is None:\n    return","commit_id":"b64bbe4bb7650724f4b820bc2e3ec6ffd9c9c9e7"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"727b65732be6b3c1dda5f597f3b233f71570d0f4","unresolved":false,"context_lines":[{"line_number":99,"context_line":"            # port_id is in the returned_obj. Otherwise on disassociate"},{"line_number":100,"context_line":"            # it\u0027s in the original_object"},{"line_number":101,"context_line":"            try:"},{"line_number":102,"context_line":"                port_id \u003d (returned_obj[\u0027floatingip\u0027][\u0027port_id\u0027] or"},{"line_number":103,"context_line":"                           original_obj[\u0027port_id\u0027])"},{"line_number":104,"context_line":"            except KeyError:"},{"line_number":105,"context_line":"                # NOTE(arosen): there is a bug in neutron that allows"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAVn%2F%2B4T4%3D","line":102,"in_reply_to":"AAAAVn%2F%2B4qE%3D","updated":"2014-03-11 15:25:31.000000000","message":"Done","commit_id":"b64bbe4bb7650724f4b820bc2e3ec6ffd9c9c9e7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"5be1c2daa73032964bc14cd45d10276c573eaf2e","unresolved":false,"context_lines":[{"line_number":101,"context_line":"            try:"},{"line_number":102,"context_line":"                port_id \u003d (returned_obj[\u0027floatingip\u0027][\u0027port_id\u0027] or"},{"line_number":103,"context_line":"                           original_obj[\u0027port_id\u0027])"},{"line_number":104,"context_line":"            except KeyError:"},{"line_number":105,"context_line":"                # NOTE(arosen): there is a bug in neutron that allows"},{"line_number":106,"context_line":"                # disassociate floatingip to return successfully even if"},{"line_number":107,"context_line":"                # there isn\u0027t a port_id associated. Remove once that is fixed."}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAVn%2F%2B4pk%3D","line":104,"updated":"2014-03-11 14:56:03.000000000","message":"should be able to remove this now","commit_id":"b64bbe4bb7650724f4b820bc2e3ec6ffd9c9c9e7"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"727b65732be6b3c1dda5f597f3b233f71570d0f4","unresolved":false,"context_lines":[{"line_number":101,"context_line":"            try:"},{"line_number":102,"context_line":"                port_id \u003d (returned_obj[\u0027floatingip\u0027][\u0027port_id\u0027] or"},{"line_number":103,"context_line":"                           original_obj[\u0027port_id\u0027])"},{"line_number":104,"context_line":"            except KeyError:"},{"line_number":105,"context_line":"                # NOTE(arosen): there is a bug in neutron that allows"},{"line_number":106,"context_line":"                # disassociate floatingip to return successfully even if"},{"line_number":107,"context_line":"                # there isn\u0027t a port_id associated. Remove once that is fixed."}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAVn%2F%2B4T0%3D","line":104,"in_reply_to":"AAAAVn%2F%2B4pk%3D","updated":"2014-03-11 15:25:31.000000000","message":"Done","commit_id":"b64bbe4bb7650724f4b820bc2e3ec6ffd9c9c9e7"}],"neutron/tests/unit/notifiers/test_notifiers_nova.py":[{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"21ac704d00d700631bee970fe20e3076f5a64204","unresolved":false,"context_lines":[{"line_number":140,"context_line":"                      \u0027name\u0027: event_name, \u0027tag\u0027: \u0027port-uuid\u0027}]"},{"line_number":141,"context_line":"            self.assertEqual(event, port._notify_event)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def test_update_fixed_ip_changed(self):"},{"line_number":144,"context_line":"        returned_obj \u003d {\u0027port\u0027:"},{"line_number":145,"context_line":"                        {\u0027device_owner\u0027: u\u0027compute:dfd\u0027,"},{"line_number":146,"context_line":"                         \u0027id\u0027: u\u0027bee50827-bcee-4cc8-91c1-a27b0ce54222\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FAm8%3D","line":143,"updated":"2014-03-10 18:19:27.000000000","message":"As per the comment on refactoring send_network_change(), it shouldn\u0027t be necessary to test each possible event through to send.  It should be possible to test the following separately:\n\n - event creation for each returned_obj/orig_obj pair\n - determination that all event types can be generated and be sent","commit_id":"59ea4d3ae2daa8e3a71aac8a7f420155473e4eb8"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"cc9a12498254326802fd53493e1c99c8655528b2","unresolved":false,"context_lines":[{"line_number":140,"context_line":"                      \u0027name\u0027: event_name, \u0027tag\u0027: \u0027port-uuid\u0027}]"},{"line_number":141,"context_line":"            self.assertEqual(event, port._notify_event)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def test_update_fixed_ip_changed(self):"},{"line_number":144,"context_line":"        returned_obj \u003d {\u0027port\u0027:"},{"line_number":145,"context_line":"                        {\u0027device_owner\u0027: u\u0027compute:dfd\u0027,"},{"line_number":146,"context_line":"                         \u0027id\u0027: u\u0027bee50827-bcee-4cc8-91c1-a27b0ce54222\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2B%2Bz4%3D","line":143,"in_reply_to":"AAAAVn%2F%2FAm8%3D","updated":"2014-03-10 21:50:10.000000000","message":"I\u0027d love to see how you envision this working. I don\u0027t see how one could assert the correct event is being generated here much differently then i\u0027m doing it.","commit_id":"59ea4d3ae2daa8e3a71aac8a7f420155473e4eb8"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ba1069a2a01ac9e68c3440a3edc31fc212012d7b","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        self.nova_notifier.send_network_change(\u0027create_floatingip\u0027,"},{"line_number":172,"context_line":"                                               {}, returned_obj)"},{"line_number":173,"context_line":"        create \u003d self.nova_notifier.nclient.server_external_events.create"},{"line_number":174,"context_line":"        self.assertEqual(create.called, False)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def test_delete_floatingip_notify(self):"},{"line_number":177,"context_line":"        returned_obj \u003d {\u0027floatingip\u0027:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FH%2F4%3D","line":174,"updated":"2014-03-08 19:47:40.000000000","message":"assertFalse","commit_id":"59ea4d3ae2daa8e3a71aac8a7f420155473e4eb8"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"d750892f1e55e6962307a7cef43da8e7df4c5483","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        self.nova_notifier.send_network_change(\u0027create_floatingip\u0027,"},{"line_number":172,"context_line":"                                               {}, returned_obj)"},{"line_number":173,"context_line":"        create \u003d self.nova_notifier.nclient.server_external_events.create"},{"line_number":174,"context_line":"        self.assertEqual(create.called, False)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def test_delete_floatingip_notify(self):"},{"line_number":177,"context_line":"        returned_obj \u003d {\u0027floatingip\u0027:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAVn%2F%2FHng%3D","line":174,"in_reply_to":"AAAAVn%2F%2FH%2F4%3D","updated":"2014-03-09 02:51:52.000000000","message":"Done","commit_id":"59ea4d3ae2daa8e3a71aac8a7f420155473e4eb8"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"5454af34618ec767ed0d6f3c8d833e2afd97177d","unresolved":false,"context_lines":[{"line_number":140,"context_line":"                      \u0027name\u0027: event_name, \u0027tag\u0027: \u0027port-uuid\u0027}]"},{"line_number":141,"context_line":"            self.assertEqual(event, port._notify_event)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def test_update_fixed_ip_changed(self):"},{"line_number":144,"context_line":"        cfg.CONF.set_override(\u0027notify_nova_on_port_data_changes\u0027, True)"},{"line_number":145,"context_line":"        returned_obj \u003d {\u0027port\u0027:"},{"line_number":146,"context_line":"                        {\u0027device_owner\u0027: u\u0027compute:dfd\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAVn%2F%2B%2FXc%3D","line":143,"updated":"2014-03-10 20:44:45.000000000","message":"Please address/respond my comment on the previous patch regarding this testing.","commit_id":"d102b53f1b0d36102734546fe472fe474208ee9c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"3e66d2968bbae7bb03ac6bec6e749832ed273099","unresolved":false,"context_lines":[{"line_number":140,"context_line":"                      \u0027name\u0027: event_name, \u0027tag\u0027: \u0027port-uuid\u0027}]"},{"line_number":141,"context_line":"            self.assertEqual(event, port._notify_event)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def test_update_fixed_ip_changed(self):"},{"line_number":144,"context_line":"        cfg.CONF.set_override(\u0027notify_nova_on_port_data_changes\u0027, True)"},{"line_number":145,"context_line":"        returned_obj \u003d {\u0027port\u0027:"},{"line_number":146,"context_line":"                        {\u0027device_owner\u0027: u\u0027compute:dfd\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAVn%2F%2B%2B1U%3D","line":143,"in_reply_to":"AAAAVn%2F%2B%2FXc%3D","updated":"2014-03-10 21:46:42.000000000","message":"Done","commit_id":"d102b53f1b0d36102734546fe472fe474208ee9c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"1347b155cff175d1c57728d1f727a4eed5fee611","unresolved":false,"context_lines":[{"line_number":228,"context_line":"            self.nova_notifier.send_network_change(\u0027update_floatingip\u0027,"},{"line_number":229,"context_line":"                                                   original_obj,"},{"line_number":230,"context_line":"                                                   returned_obj)"},{"line_number":231,"context_line":"            self.assertEqual(send_events.called, False)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAVn%2F%2B%2Bfw%3D","line":231,"updated":"2014-03-10 22:35:04.000000000","message":"assertFalse","commit_id":"dee2a918307d5594e9834be956a68563588b34f2"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"2e018fcb58766e76c9403ab5de347d5c49aa44ce","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        event \u003d {\u0027server_uuid\u0027: \u0027instance_uuid\u0027,"},{"line_number":136,"context_line":"                 \u0027name\u0027: \u0027network-changed\u0027}"},{"line_number":137,"context_line":"        self.assertEqual(self.nova_notifier.create_port_changed_event("},{"line_number":138,"context_line":"                         \u0027update_port\u0027, {}, returned_obj), event)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def test_create_floatingip_notify(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAVn%2F%2B9yI%3D","line":137,"updated":"2014-03-11 00:51:21.000000000","message":"Please switch to creating the event outside of the assertion call to make it easier to inspect the object in a debugger, e.g.\n\n  expected_event  \u003d {...}\n  event \u003d create_event()\n  self.assertEqual(expected_event, event)","commit_id":"f9718d089415316dc6e74bc9e9078bfc2f10cf1a"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"0fe9e3766b3b0788c0d3106f8d22df3c7a74c955","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        event \u003d {\u0027server_uuid\u0027: \u0027instance_uuid\u0027,"},{"line_number":136,"context_line":"                 \u0027name\u0027: \u0027network-changed\u0027}"},{"line_number":137,"context_line":"        self.assertEqual(self.nova_notifier.create_port_changed_event("},{"line_number":138,"context_line":"                         \u0027update_port\u0027, {}, returned_obj), event)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def test_create_floatingip_notify(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAVn%2F%2B9bw%3D","line":137,"in_reply_to":"AAAAVn%2F%2B9yI%3D","updated":"2014-03-11 02:03:42.000000000","message":"Done","commit_id":"f9718d089415316dc6e74bc9e9078bfc2f10cf1a"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"20393491769fedfc55ba41ad69546b89938b9c66","unresolved":false,"context_lines":[{"line_number":147,"context_line":"                         \u0027create_floatingip\u0027, {}, returned_obj),"},{"line_number":148,"context_line":"                         event)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def test_create_floatingip_no_port_id_no_notify(self):"},{"line_number":151,"context_line":"        returned_obj \u003d {\u0027floatingip\u0027:"},{"line_number":152,"context_line":"                        {\u0027port_id\u0027: None}}"},{"line_number":153,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAVn%2F%2B9wE%3D","line":150,"updated":"2014-03-11 01:37:43.000000000","message":"Is there a reason this method and the corresponding one on line 170 don\u0027t target the create_port_changed_event() method directly?\n\nIt probably makes sense to have a couple of focused tests for send_network_change that makes sure things are wired together correctly separate from validating specific results.","commit_id":"f9718d089415316dc6e74bc9e9078bfc2f10cf1a"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"fa0043a16a25a33ec730d27184e6fffa6360faf0","unresolved":false,"context_lines":[{"line_number":147,"context_line":"                         \u0027create_floatingip\u0027, {}, returned_obj),"},{"line_number":148,"context_line":"                         event)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def test_create_floatingip_no_port_id_no_notify(self):"},{"line_number":151,"context_line":"        returned_obj \u003d {\u0027floatingip\u0027:"},{"line_number":152,"context_line":"                        {\u0027port_id\u0027: None}}"},{"line_number":153,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAVn%2F%2B9Yw%3D","line":150,"in_reply_to":"AAAAVn%2F%2B9wE%3D","updated":"2014-03-11 02:04:31.000000000","message":"Done","commit_id":"f9718d089415316dc6e74bc9e9078bfc2f10cf1a"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"20393491769fedfc55ba41ad69546b89938b9c66","unresolved":false,"context_lines":[{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    def test_no_notification_notify_nova_on_port_data_changes_false(self):"},{"line_number":202,"context_line":"        cfg.CONF.set_override(\u0027notify_nova_on_port_data_changes\u0027, False)"},{"line_number":203,"context_line":"        returned_obj \u003d {\u0027floatingip\u0027: {\u0027port_id\u0027: None}}"},{"line_number":204,"context_line":"        original_obj \u003d {\u0027port_id\u0027: \u00275a39def4-3d3f-473d-9ff4-8e90064b9cc1\u0027}"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        with mock.patch.object(self.nova_notifier,"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAVn%2F%2B9wk%3D","line":203,"updated":"2014-03-11 01:37:43.000000000","message":"Given that disabling notification results in send_network_change returning immediately, it shouldn\u0027t be necessary to define these dicts.  Passing empty dicts  should suffice.","commit_id":"f9718d089415316dc6e74bc9e9078bfc2f10cf1a"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"fa0043a16a25a33ec730d27184e6fffa6360faf0","unresolved":false,"context_lines":[{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    def test_no_notification_notify_nova_on_port_data_changes_false(self):"},{"line_number":202,"context_line":"        cfg.CONF.set_override(\u0027notify_nova_on_port_data_changes\u0027, False)"},{"line_number":203,"context_line":"        returned_obj \u003d {\u0027floatingip\u0027: {\u0027port_id\u0027: None}}"},{"line_number":204,"context_line":"        original_obj \u003d {\u0027port_id\u0027: \u00275a39def4-3d3f-473d-9ff4-8e90064b9cc1\u0027}"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        with mock.patch.object(self.nova_notifier,"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAVn%2F%2B9Ys%3D","line":203,"in_reply_to":"AAAAVn%2F%2B9wk%3D","updated":"2014-03-11 02:04:31.000000000","message":"Done","commit_id":"f9718d089415316dc6e74bc9e9078bfc2f10cf1a"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"57179bda914bfd70769a6f7c904be781ccfe421f","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        self.assertEqual(expected_event, event)"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def test_no_notification_notify_nova_on_port_data_changes_false(self):"},{"line_number":199,"context_line":"        cfg.CONF.set_override(\u0027notify_nova_on_port_data_changes\u0027, False)"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        with mock.patch.object(self.nova_notifier,"},{"line_number":202,"context_line":"                               \u0027send_events\u0027) as send_events:"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAVn%2F%2B9Nw%3D","line":199,"updated":"2014-03-11 02:45:08.000000000","message":"This line can be removed.","commit_id":"faab0f17af8ec3c43ddcf27cecf1d7aa23af02cd"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"a6bef6e3a4dedc00799bd90946ceb1ba228398fe","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        self.assertEqual(expected_event, event)"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def test_no_notification_notify_nova_on_port_data_changes_false(self):"},{"line_number":199,"context_line":"        cfg.CONF.set_override(\u0027notify_nova_on_port_data_changes\u0027, False)"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        with mock.patch.object(self.nova_notifier,"},{"line_number":202,"context_line":"                               \u0027send_events\u0027) as send_events:"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAVn%2F%2B9Hg%3D","line":199,"in_reply_to":"AAAAVn%2F%2B9Nw%3D","updated":"2014-03-11 02:53:24.000000000","message":"Only because you had me remove the dicts that were being passed here!","commit_id":"faab0f17af8ec3c43ddcf27cecf1d7aa23af02cd"}]}
