)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"f44326c511fb5176ca33c6eb132bdbf9ab8e788d","unresolved":false,"context_lines":[{"line_number":11,"context_line":"A new directory \u0027freescale\u0027 is created to hold the code in"},{"line_number":12,"context_line":"ml2/drivers."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"The following new files were added:"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"neutron/plugins/ml2/drivers/freescale/README : README for driver"},{"line_number":17,"context_line":"neutron/plugins/ml2/drivers/freescale/__init__.py"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAVn%2F%2FhwQ%3D","line":14,"updated":"2014-03-05 16:48:58.000000000","message":"I think this list can be avoided in the commit message. If somebody is interested into it, the list of modified files is already available typing git show commit-number.","commit_id":"e188e9b72246a24b3608f716ac31810f8ee9e7f8"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9d80e58ea21a1092332b4f905a392b64b117ff44","unresolved":false,"context_lines":[{"line_number":11,"context_line":"A new directory \u0027freescale\u0027 is created to hold the code in"},{"line_number":12,"context_line":"ml2/drivers."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"The following new files were added:"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"neutron/plugins/ml2/drivers/freescale/README : README for driver"},{"line_number":17,"context_line":"neutron/plugins/ml2/drivers/freescale/__init__.py"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAVn%2F%2Fgx8%3D","line":14,"in_reply_to":"AAAAVn%2F%2FhwQ%3D","updated":"2014-03-05 17:45:50.000000000","message":"L.14-last are unnecessary. gerrit records the history of patch sets.","commit_id":"e188e9b72246a24b3608f716ac31810f8ee9e7f8"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"f44326c511fb5176ca33c6eb132bdbf9ab8e788d","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Change-Id: I869fdc78a37aa8aff9a24521988b7e50abe199a6"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Conflicts:"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"\tsetup.cfg"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAVn%2F%2FhwA%3D","line":29,"updated":"2014-03-05 16:48:58.000000000","message":"Remove conflicts please","commit_id":"e188e9b72246a24b3608f716ac31810f8ee9e7f8"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"f44326c511fb5176ca33c6eb132bdbf9ab8e788d","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"neutron/plugins/ml2/drivers/freescale/mech_fslsdn.py: FSl SDN ML2 Driver"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"Change-Id: If37a39119c620c6d204346a7fe66c70aaad7261e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAVn%2F%2Fhvw%3D","line":52,"updated":"2014-03-05 16:48:58.000000000","message":"There are two Change-Id...there should be only one.","commit_id":"e188e9b72246a24b3608f716ac31810f8ee9e7f8"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"59b2e9125ba3ea66e69822de370a552d8a36594b","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     trinaths \u003ctrinath.somanchi@freescale.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-05-28 12:43:25 +0530"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"implements:bp/fsl-sdn-os-mech-driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Gerrit Spec: https://review.openstack.org/#/c/88190"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"3ae8d1ca_a1f5c684","line":7,"updated":"2014-05-28 10:15:19.000000000","message":"Please use the format which gerrit recognizes. If so we will have autolink to launchpad. See GerritWorkflow on openstack wiki for details.","commit_id":"fe3c4f3f90ebb71bf42209c641e48707772f2605"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"c40292d16fe6ce13b04c014682fac0a5b852c2bf","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     trinaths \u003ctrinath.somanchi@freescale.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-05-28 12:43:25 +0530"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"implements:bp/fsl-sdn-os-mech-driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Gerrit Spec: https://review.openstack.org/#/c/88190"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"3ae8d1ca_926573e3","line":7,"in_reply_to":"3ae8d1ca_a1f5c684","updated":"2014-05-28 11:34:58.000000000","message":"Sure. Will update in the next patchset","commit_id":"fe3c4f3f90ebb71bf42209c641e48707772f2605"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"59b2e9125ba3ea66e69822de370a552d8a36594b","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"implements:bp/fsl-sdn-os-mech-driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Gerrit Spec: https://review.openstack.org/#/c/88190"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Freescale SDN Mechanism Driver for ML2 Plugin to support CRD service"},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"3ae8d1ca_a13ce630","line":9,"updated":"2014-05-28 10:15:19.000000000","message":"If there is a link to launchpad blueprint, I think this link is unnecessary.","commit_id":"fe3c4f3f90ebb71bf42209c641e48707772f2605"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"c40292d16fe6ce13b04c014682fac0a5b852c2bf","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"implements:bp/fsl-sdn-os-mech-driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Gerrit Spec: https://review.openstack.org/#/c/88190"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Freescale SDN Mechanism Driver for ML2 Plugin to support CRD service"},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"3ae8d1ca_5274cb98","line":9,"in_reply_to":"3ae8d1ca_a13ce630","updated":"2014-05-28 11:34:58.000000000","message":"Sure. Will update in the next patchset We have a link in launchpad. I mean to notify other reviewers that the Spec is approved to development.","commit_id":"fe3c4f3f90ebb71bf42209c641e48707772f2605"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"59b2e9125ba3ea66e69822de370a552d8a36594b","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Gerrit Spec: https://review.openstack.org/#/c/88190"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Freescale SDN Mechanism Driver for ML2 Plugin to support CRD service"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: If37a39119c620c6d204346a7fe66c70aaad7261e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"3ae8d1ca_81260a15","line":11,"updated":"2014-05-28 10:15:19.000000000","message":"I think it should be the summary line.","commit_id":"fe3c4f3f90ebb71bf42209c641e48707772f2605"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"c40292d16fe6ce13b04c014682fac0a5b852c2bf","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Gerrit Spec: https://review.openstack.org/#/c/88190"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Freescale SDN Mechanism Driver for ML2 Plugin to support CRD service"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: If37a39119c620c6d204346a7fe66c70aaad7261e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"3ae8d1ca_326f3fc7","line":11,"in_reply_to":"3ae8d1ca_81260a15","updated":"2014-05-28 11:34:58.000000000","message":"Yes, IT is the summary line.","commit_id":"fe3c4f3f90ebb71bf42209c641e48707772f2605"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"d669e758808c2120b3fa7988b841834fa65b58c2","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implements: blueprint fsl-sdn-os-mech-driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Freescale SDN Mechanism Driver for ML2 Plugin to support CRD service"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: If37a39119c620c6d204346a7fe66c70aaad7261e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"3ae8d1ca_ef396242","line":9,"updated":"2014-05-28 19:33:28.000000000","message":"Nit: Summary should be the first line in the commit method.\n\nConsider more details on what the commit is about (what does CRD stand for?).","commit_id":"8f3bc041a4a40ed7a38191eb33e992f60ebb4893"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"60aa02c2482960f8ef4e34e8104ab2da1f41801b","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Freescale SDN Mechanism Driver for ML2 Plugin"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"- Improved Unit testing for the Mechanism driver"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Implements: blueprint fsl-sdn-os-mech-driver"},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"1ae5cdf2_3e332115","line":9,"updated":"2014-06-04 09:23:59.000000000","message":"I don\u0027t think that this reference to unit testing is necessary since this is the initial checkin for the driver.","commit_id":"d6526b08fb9eed39570f3012c8fe8e4f426ceb21"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"6dde69bafe3d3d31b1856667cff694e3efc3e408","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Freescale SDN Mechanism Driver for ML2 Plugin"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"- Improved Unit testing for the Mechanism driver"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Implements: blueprint fsl-sdn-os-mech-driver"},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"1ae5cdf2_89a321ff","line":9,"in_reply_to":"1ae5cdf2_3e332115","updated":"2014-06-04 09:28:40.000000000","message":"Okay.. Updated in patchset 24. Thanks","commit_id":"d6526b08fb9eed39570f3012c8fe8e4f426ceb21"}],"etc/neutron/plugins/ml2/ml2_conf_fslsdn.ini":[{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"f44326c511fb5176ca33c6eb132bdbf9ab8e788d","unresolved":false,"context_lines":[{"line_number":51,"context_line":"# unconfigured, will disable multicast VXLAN mode."},{"line_number":52,"context_line":"#"},{"line_number":53,"context_line":"# vxlan_group \u003d"},{"line_number":54,"context_line":"# Example: vxlan_group \u003d 239.1.1.1"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"[crd]"},{"line_number":57,"context_line":"# Cloud Resource Discovery (CRD) service details"}],"source_content_type":"text/x-properties","patch_set":2,"id":"AAAAVn%2F%2Fhns%3D","line":54,"updated":"2014-03-05 16:48:58.000000000","message":"From line 1 to 54 it seems a copy paste of the ml2_conf.ini. There\u0027s no need of redefining what\u0027s already in the ml2_conf. Those lines can be removed.\nWhat you want is probably to create e new stanza for your plugin, like this:\n[ml2_fsl]\n\nand put under it all the configuration parameters specific to your driver.","commit_id":"e188e9b72246a24b3608f716ac31810f8ee9e7f8"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9d80e58ea21a1092332b4f905a392b64b117ff44","unresolved":false,"context_lines":[{"line_number":53,"context_line":"# vxlan_group \u003d"},{"line_number":54,"context_line":"# Example: vxlan_group \u003d 239.1.1.1"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"[crd]"},{"line_number":57,"context_line":"# Cloud Resource Discovery (CRD) service details"},{"line_number":58,"context_line":"# Mandatory for FSL SDN Mechanism driver"},{"line_number":59,"context_line":"#crd_username \u003d crd"}],"source_content_type":"text/x-properties","patch_set":2,"id":"AAAAVn%2F%2Fgw4%3D","line":56,"updated":"2014-03-05 17:45:50.000000000","message":"It would be better to include \"ml2\" and \"fsl\" in the section name to avoid config namespace conflict.","commit_id":"e188e9b72246a24b3608f716ac31810f8ee9e7f8"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"59b2e9125ba3ea66e69822de370a552d8a36594b","unresolved":false,"context_lines":[{"line_number":8,"context_line":"# User name for authentication to CRD"},{"line_number":9,"context_line":"# crd_user_name \u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"# Example: crd_user_name \u003d crd_admin"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"#(StrOpt) Password for authentication to CRD"},{"line_number":14,"context_line":"# crd_password \u003d"}],"source_content_type":"text/x-properties","patch_set":13,"id":"3ae8d1ca_41832204","line":11,"updated":"2014-05-28 10:15:19.000000000","message":"Please follow the sample config file convention in neutron. In neutron config samples, an entry with its default value is placed as a comment.\nIn this case,\n\n  # crd_user_name \u003d crd\n\nAlso the default value and the descfription should match the code.\n\nThe above comments apply to all entries in this file.","commit_id":"fe3c4f3f90ebb71bf42209c641e48707772f2605"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"c40292d16fe6ce13b04c014682fac0a5b852c2bf","unresolved":false,"context_lines":[{"line_number":8,"context_line":"# User name for authentication to CRD"},{"line_number":9,"context_line":"# crd_user_name \u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"# Example: crd_user_name \u003d crd_admin"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"#(StrOpt) Password for authentication to CRD"},{"line_number":14,"context_line":"# crd_password \u003d"}],"source_content_type":"text/x-properties","patch_set":13,"id":"3ae8d1ca_f2d07755","line":11,"in_reply_to":"3ae8d1ca_41832204","updated":"2014-05-28 11:34:58.000000000","message":"Sure. Will update in the next patchset","commit_id":"fe3c4f3f90ebb71bf42209c641e48707772f2605"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"c6235a39b2ee66eb7fe677f8bb65a8ca6e43ae71","unresolved":false,"context_lines":[{"line_number":4,"context_line":"# User name for authentication to CRD"},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":"# crd_user_name \u003d"},{"line_number":7,"context_line":"# Example: crd_user_name \u003d crd_admin"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"#(StrOpt) Password for authentication to CRD"},{"line_number":10,"context_line":"#"}],"source_content_type":"text/x-properties","patch_set":25,"id":"1ae5cdf2_dec04a52","line":7,"updated":"2014-06-05 14:48:03.000000000","message":"we received complains from some packagers that this kind of specification of sample values in some cases might make more complex the creation of default \"sample\" config files.\n\nI suggess having something like the following:\n# (StrOpt) Cloud Resource Discovery (CRD) authorization credentials \t\n# User name for authentication to CRD, e.g.: crd_admin\n\nThis is just an advisory comment. Addressing it is not a requirement for me.","commit_id":"1b9ee31847b4d5255b2251aa9f33418322f8160f"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"a29c38a860528e6ca822a1f75338e4cfccb63490","unresolved":false,"context_lines":[{"line_number":4,"context_line":"# User name for authentication to CRD"},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":"# crd_user_name \u003d"},{"line_number":7,"context_line":"# Example: crd_user_name \u003d crd_admin"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"#(StrOpt) Password for authentication to CRD"},{"line_number":10,"context_line":"#"}],"source_content_type":"text/x-properties","patch_set":25,"id":"1ae5cdf2_08151448","line":7,"in_reply_to":"1ae5cdf2_dec04a52","updated":"2014-06-05 17:05:07.000000000","message":"okay. sure will make changes.","commit_id":"1b9ee31847b4d5255b2251aa9f33418322f8160f"}],"neutron/plugins/ml2/drivers/README.fslsdn":[{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"change_message_id":"57047f27fe0a99b3f0e6b28958ef239da2aecc25","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"How do Freescale SDN Mechanism Driver work?"},{"line_number":41,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"- Freescale Mechanism driver handles the following postcommit operations."}],"source_content_type":"application/octet-stream","patch_set":19,"id":"3ae8d1ca_9f3550dc","line":40,"updated":"2014-05-29 13:15:41.000000000","message":"Nit: do -\u003e does","commit_id":"3312abc35188cea4ced43466f4e79bbb7b5ad510"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"b8b628ed1c8fd03ada26df953e69e589e5ef2ac3","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"How do Freescale SDN Mechanism Driver work?"},{"line_number":41,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"- Freescale Mechanism driver handles the following postcommit operations."}],"source_content_type":"application/octet-stream","patch_set":19,"id":"3ae8d1ca_5803de41","line":40,"in_reply_to":"3ae8d1ca_9f3550dc","updated":"2014-05-29 14:53:08.000000000","message":"okay","commit_id":"3312abc35188cea4ced43466f4e79bbb7b5ad510"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"c6235a39b2ee66eb7fe677f8bb65a8ca6e43ae71","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"Freescale SDN Mechanism Driver for Neutron ML2 plugin"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":25,"id":"1ae5cdf2_9e99627b","line":1,"updated":"2014-06-05 14:48:03.000000000","message":"more pedantry: the convention for per README file is to call them just README (or README.rst if you wish)","commit_id":"1b9ee31847b4d5255b2251aa9f33418322f8160f"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"a29c38a860528e6ca822a1f75338e4cfccb63490","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"Freescale SDN Mechanism Driver for Neutron ML2 plugin"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":25,"id":"1ae5cdf2_e3080b2a","line":1,"in_reply_to":"1ae5cdf2_9e99627b","updated":"2014-06-05 17:05:07.000000000","message":"True said, but the code base doesn\u0027t exists in a separate directory. Already there is a README from ODL, named as README.ODL and I too have followed the same format.","commit_id":"1b9ee31847b4d5255b2251aa9f33418322f8160f"}],"neutron/plugins/ml2/drivers/freescale/README":[{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"f44326c511fb5176ca33c6eb132bdbf9ab8e788d","unresolved":false,"context_lines":[{"line_number":2,"context_line":""},{"line_number":3,"context_line":"Freescale SDN Neutron ML2 Mechanism Driver"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"This mechanism driver implements ML2 Driver API "},{"line_number":6,"context_line":"and is used to send Neutron Network Management to CRD service ."},{"line_number":7,"context_line":""},{"line_number":8,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":2,"id":"AAAAVn%2F%2FhnA%3D","line":5,"updated":"2014-03-05 16:48:58.000000000","message":"whitespace please remove","commit_id":"e188e9b72246a24b3608f716ac31810f8ee9e7f8"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9d80e58ea21a1092332b4f905a392b64b117ff44","unresolved":false,"context_lines":[{"line_number":7,"context_line":""},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"For more details on use please refer to BP:"},{"line_number":10,"context_line":"https://blueprints.launchpad.net/neutron/+spec/fsl-sdn-os-mech-driver"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"AAAAVn%2F%2FguE%3D","line":10,"updated":"2014-03-05 17:45:50.000000000","message":"blueprint is to track a progress of a new feature and tends not to be updated once the feature is merged.\nI would suggest to prepare more permanent information source of FSL driver. OpenStack wiki is a good candidate.","commit_id":"e188e9b72246a24b3608f716ac31810f8ee9e7f8"}],"neutron/plugins/ml2/drivers/freescale/__init__.py":[{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"f44326c511fb5176ca33c6eb132bdbf9ab8e788d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2013 OpenStack Foundation"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVn%2F%2Fhmk%3D","line":1,"updated":"2014-03-05 16:48:58.000000000","message":"No need for copyright for empty file","commit_id":"e188e9b72246a24b3608f716ac31810f8ee9e7f8"}],"neutron/plugins/ml2/drivers/freescale/client.py":[{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"f44326c511fb5176ca33c6eb132bdbf9ab8e788d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2013 OpenStack Foundation"},{"line_number":2,"context_line":"# Copyright (c) 2013 Freescale Semiconductor"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVn%2F%2FhAE%3D","line":1,"updated":"2014-03-05 16:48:58.000000000","message":"2014?","commit_id":"e188e9b72246a24b3608f716ac31810f8ee9e7f8"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9d80e58ea21a1092332b4f905a392b64b117ff44","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2013 OpenStack Foundation"},{"line_number":2,"context_line":"# Copyright (c) 2013 Freescale Semiconductor"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVn%2F%2Fgto%3D","line":1,"in_reply_to":"AAAAVn%2F%2FhAE%3D","updated":"2014-03-05 17:45:50.000000000","message":"Is OpenStack Foundation a copyright holder?","commit_id":"e188e9b72246a24b3608f716ac31810f8ee9e7f8"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"f44326c511fb5176ca33c6eb132bdbf9ab8e788d","unresolved":false,"context_lines":[{"line_number":14,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":15,"context_line":"# limitations under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"try:"},{"line_number":18,"context_line":"    import json"},{"line_number":19,"context_line":"except ImportError:"},{"line_number":20,"context_line":"    import simplejson as json"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVn%2F%2Fhlk%3D","line":17,"updated":"2014-03-05 16:48:58.000000000","message":"Why is this needed? json is required by neutron anyway","commit_id":"e188e9b72246a24b3608f716ac31810f8ee9e7f8"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9d80e58ea21a1092332b4f905a392b64b117ff44","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    import simplejson as json"},{"line_number":21,"context_line":"import urlparse"},{"line_number":22,"context_line":"# Python 2.5 compatible fix"},{"line_number":23,"context_line":"if not hasattr(urlparse, \u0027parse_qsl\u0027):"},{"line_number":24,"context_line":"    import cgi"},{"line_number":25,"context_line":"    urlparse.parse_qsl \u003d cgi.parse_qsl"},{"line_number":26,"context_line":"import httplib"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVn%2F%2Fgs0%3D","line":23,"updated":"2014-03-05 17:45:50.000000000","message":"In OpenStack python 2.5 is not supported. If it is only for python 2.5, please reconsider it.","commit_id":"e188e9b72246a24b3608f716ac31810f8ee9e7f8"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9d80e58ea21a1092332b4f905a392b64b117ff44","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    urlparse.parse_qsl \u003d cgi.parse_qsl"},{"line_number":26,"context_line":"import httplib"},{"line_number":27,"context_line":"import httplib2"},{"line_number":28,"context_line":"import logging"},{"line_number":29,"context_line":"from neutron.api.v2 import attributes as attr"},{"line_number":30,"context_line":"from neutron.common import constants"},{"line_number":31,"context_line":"from neutron.openstack.common import jsonutils"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVn%2F%2FgsA%3D","line":28,"updated":"2014-03-05 17:45:50.000000000","message":"Use openstack.common.log instead.","commit_id":"e188e9b72246a24b3608f716ac31810f8ee9e7f8"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9d80e58ea21a1092332b4f905a392b64b117ff44","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        return with_params"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"class HTTPClient(httplib2.Http):"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    \"\"\"Simple HTTP Client enabled with Keystone auth"},{"line_number":62,"context_line":"    for communication with CRD Server"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVn%2F%2Fgok%3D","line":59,"updated":"2014-03-05 17:45:50.000000000","message":"This class is copy-and-paste of neutronclient.client.HTTPClient. Why don\u0027t you import it?\n\nIt must be good from the point of code maintenance.","commit_id":"e188e9b72246a24b3608f716ac31810f8ee9e7f8"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9d80e58ea21a1092332b4f905a392b64b117ff44","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    USER_AGENT \u003d \"python-crd-client\""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def __init__(self, username\u003dNone, tenant_name\u003dNone,"},{"line_number":67,"context_line":"                 password\u003dNone, auth_url\u003dNone,"},{"line_number":68,"context_line":"                 token\u003dNone, region_name\u003dNone, timeout\u003dNone,"},{"line_number":69,"context_line":"                 endpoint_url\u003dNone, insecure\u003dFalse,"},{"line_number":70,"context_line":"                 auth_strategy\u003d\u0027keystone\u0027, **kwargs):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVn%2F%2Fghw%3D","line":67,"updated":"2014-03-05 17:45:50.000000000","message":"Only first 4 parameters are used in the main mech driver code. Why do you need to have other parameters?","commit_id":"e188e9b72246a24b3608f716ac31810f8ee9e7f8"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"f44326c511fb5176ca33c6eb132bdbf9ab8e788d","unresolved":false,"context_lines":[{"line_number":265,"context_line":"        raise NotImplementedError()"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"class DictSerializer(ActionDispatcher):"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"    def serialize(self, data, action\u003d\u0027default\u0027):"},{"line_number":271,"context_line":"        return self.dispatch(data, action\u003daction)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVn%2F%2FhFs%3D","line":268,"updated":"2014-03-05 16:48:58.000000000","message":"Is there a reason why you didn\u0027t use the classes in neutron/wsgi.py? There is already a JSONSerializer and Deserializer there. To see an example of how to use it you can have a look at  /neutron/plugins/cisco/n1kv/n1kv_client.py","commit_id":"e188e9b72246a24b3608f716ac31810f8ee9e7f8"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9d80e58ea21a1092332b4f905a392b64b117ff44","unresolved":false,"context_lines":[{"line_number":316,"context_line":"        }"},{"line_number":317,"context_line":"        try:"},{"line_number":318,"context_line":"            return handlers[content_type]"},{"line_number":319,"context_line":"        except Exception:"},{"line_number":320,"context_line":"            raise InvalidContentType(content_type\u003dcontent_type)"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"    def serialize(self, data, content_type):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVn%2F%2FgkM%3D","line":319,"updated":"2014-03-05 17:45:50.000000000","message":"Hmm.... we should use more specific exception here. KeyError?","commit_id":"e188e9b72246a24b3608f716ac31810f8ee9e7f8"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9d80e58ea21a1092332b4f905a392b64b117ff44","unresolved":false,"context_lines":[{"line_number":334,"context_line":""},{"line_number":335,"context_line":"        try:"},{"line_number":336,"context_line":"            return handlers[content_type]"},{"line_number":337,"context_line":"        except Exception:"},{"line_number":338,"context_line":"            raise InvalidContentType(content_type\u003dcontent_type)"},{"line_number":339,"context_line":""},{"line_number":340,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVn%2F%2FgkA%3D","line":337,"updated":"2014-03-05 17:45:50.000000000","message":"Same as L.319","commit_id":"e188e9b72246a24b3608f716ac31810f8ee9e7f8"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"f44326c511fb5176ca33c6eb132bdbf9ab8e788d","unresolved":false,"context_lines":[{"line_number":338,"context_line":"            raise InvalidContentType(content_type\u003dcontent_type)"},{"line_number":339,"context_line":""},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"class CrdClient(object):"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"    \"\"\"Client for communicating with CRD Service"},{"line_number":344,"context_line":"    CRD Service designed by freescale requires"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVn%2F%2FhAw%3D","line":341,"updated":"2014-03-05 16:48:58.000000000","message":"You might want to add unit tests for this class","commit_id":"e188e9b72246a24b3608f716ac31810f8ee9e7f8"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9d80e58ea21a1092332b4f905a392b64b117ff44","unresolved":false,"context_lines":[{"line_number":410,"context_line":""},{"line_number":411,"context_line":"    def serialize(self, data):"},{"line_number":412,"context_line":"        if data is None:"},{"line_number":413,"context_line":"            return None"},{"line_number":414,"context_line":"        elif isinstance(data, dict):"},{"line_number":415,"context_line":"            return Serializer("},{"line_number":416,"context_line":"                self.get_attr_metadata()).serialize(data, self.content_type())"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVn%2F%2Fgk0%3D","line":413,"updated":"2014-03-05 17:45:50.000000000","message":"just \"return\"","commit_id":"e188e9b72246a24b3608f716ac31810f8ee9e7f8"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9d80e58ea21a1092332b4f905a392b64b117ff44","unresolved":false,"context_lines":[{"line_number":494,"context_line":"    def delete_port(self, port):"},{"line_number":495,"context_line":"        return self.delete(self.port_path % port)"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"class CrdException(Exception):"},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"    \"\"\"Base Crd Exception"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVn%2F%2Fglk%3D","line":497,"updated":"2014-03-05 17:45:50.000000000","message":"Exceptions below are borrowed from neutronclient. For exception definitions, please consider using exceptions defined in neutron and inheriting them. see neutron.common.exceptions first.","commit_id":"e188e9b72246a24b3608f716ac31810f8ee9e7f8"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9d80e58ea21a1092332b4f905a392b64b117ff44","unresolved":false,"context_lines":[{"line_number":495,"context_line":"        return self.delete(self.port_path % port)"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"class CrdException(Exception):"},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"    \"\"\"Base Crd Exception"},{"line_number":501,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVn%2F%2FgmY%3D","line":498,"updated":"2014-03-05 17:45:50.000000000","message":"It should inherit NeutronException.","commit_id":"e188e9b72246a24b3608f716ac31810f8ee9e7f8"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9d80e58ea21a1092332b4f905a392b64b117ff44","unresolved":false,"context_lines":[{"line_number":519,"context_line":""},{"line_number":520,"context_line":""},{"line_number":521,"context_line":"class NotFound(CrdException):"},{"line_number":522,"context_line":"    pass"},{"line_number":523,"context_line":""},{"line_number":524,"context_line":""},{"line_number":525,"context_line":"class CrdClientException(CrdException):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVn%2F%2FgmQ%3D","line":522,"updated":"2014-03-05 17:45:50.000000000","message":"Please use neutron.common.exception.NotFound instead.","commit_id":"e188e9b72246a24b3608f716ac31810f8ee9e7f8"}],"neutron/plugins/ml2/drivers/freescale/mech_fslsdn.py":[{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"f44326c511fb5176ca33c6eb132bdbf9ab8e788d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2013 OpenStack Foundation"},{"line_number":2,"context_line":"# Copyright (c) 2013 Freescale Semiconductor"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVn%2F%2FhEQ%3D","line":1,"updated":"2014-03-05 16:48:58.000000000","message":"2014?","commit_id":"e188e9b72246a24b3608f716ac31810f8ee9e7f8"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9d80e58ea21a1092332b4f905a392b64b117ff44","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from neutron.extensions import portbindings"},{"line_number":19,"context_line":"from neutron.openstack.common import log as logging"},{"line_number":20,"context_line":"from neutron.plugins.ml2 import driver_api as api"},{"line_number":21,"context_line":"from neutron.plugins.ml2.drivers.freescale.client import CrdClient"},{"line_number":22,"context_line":"from oslo.config import cfg"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVn%2F%2Fgic%3D","line":21,"updated":"2014-03-05 17:45:50.000000000","message":"Please use module level import.","commit_id":"e188e9b72246a24b3608f716ac31810f8ee9e7f8"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9d80e58ea21a1092332b4f905a392b64b117ff44","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from neutron.openstack.common import log as logging"},{"line_number":20,"context_line":"from neutron.plugins.ml2 import driver_api as api"},{"line_number":21,"context_line":"from neutron.plugins.ml2.drivers.freescale.client import CrdClient"},{"line_number":22,"context_line":"from oslo.config import cfg"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVn%2F%2FgjA%3D","line":22,"updated":"2014-03-05 17:45:50.000000000","message":"Please sort import sections.","commit_id":"e188e9b72246a24b3608f716ac31810f8ee9e7f8"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9d80e58ea21a1092332b4f905a392b64b117ff44","unresolved":false,"context_lines":[{"line_number":27,"context_line":"crd_opts \u003d ["},{"line_number":28,"context_line":"    cfg.StrOpt(\u0027crd_username\u0027, default\u003d\u0027crd\u0027,"},{"line_number":29,"context_line":"               help\u003d_(\"CRD service Username\")),"},{"line_number":30,"context_line":"    cfg.StrOpt(\u0027crd_password\u0027, default\u003d\u0027password\u0027,"},{"line_number":31,"context_line":"               help\u003d_(\"CRD Service Password\")),"},{"line_number":32,"context_line":"    cfg.StrOpt(\u0027crd_tenantname\u0027, default\u003d\u0027service\u0027,"},{"line_number":33,"context_line":"               help\u003d_(\"CRD Tenant Name\")),"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVn%2F%2Fgi8%3D","line":30,"updated":"2014-03-05 17:45:50.000000000","message":"Is it better to add \"secret\u003dTrue\"?","commit_id":"e188e9b72246a24b3608f716ac31810f8ee9e7f8"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9d80e58ea21a1092332b4f905a392b64b117ff44","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    def __init__(self):"},{"line_number":56,"context_line":"        self.agent_type \u003d constants.AGENT_TYPE_OVS"},{"line_number":57,"context_line":"        self.vif_type \u003d portbindings.VIF_TYPE_OVS"},{"line_number":58,"context_line":"        self.cap_port_filter \u003d True"},{"line_number":59,"context_line":"        LOG.debug(_(\"In Initialize CRD client... \"))"},{"line_number":60,"context_line":"        self._crdclient \u003d CrdClient(username\u003dcfg.CONF.crd.crd_username,"},{"line_number":61,"context_line":"                                    password\u003dcfg.CONF.crd.crd_password,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVn%2F%2Fgio%3D","line":58,"updated":"2014-03-05 17:45:50.000000000","message":"cap_port_filter no longer exist. Support vif_detail instead.","commit_id":"e188e9b72246a24b3608f716ac31810f8ee9e7f8"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9d80e58ea21a1092332b4f905a392b64b117ff44","unresolved":false,"context_lines":[{"line_number":207,"context_line":"                  {\u0027segment\u0027: segment, \u0027mappings\u0027: mappings,"},{"line_number":208,"context_line":"                   \u0027tunnel_types\u0027: tunnel_types})"},{"line_number":209,"context_line":"        network_type \u003d segment[api.NETWORK_TYPE]"},{"line_number":210,"context_line":"        if network_type \u003d\u003d \u0027local\u0027:"},{"line_number":211,"context_line":"            return True"},{"line_number":212,"context_line":"        elif network_type in tunnel_types:"},{"line_number":213,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVn%2F%2Fgfw%3D","line":210,"updated":"2014-03-05 17:45:50.000000000","message":"Please use constants instead of hardcoded strings.","commit_id":"e188e9b72246a24b3608f716ac31810f8ee9e7f8"}],"neutron/plugins/ml2/drivers/mechanism_fslsdn.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"59b2e9125ba3ea66e69822de370a552d8a36594b","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from neutron.plugins.common import constants"},{"line_number":22,"context_line":"from neutron.plugins.ml2 import driver_api as api"},{"line_number":23,"context_line":"from neutronclient.v2_0 import client"},{"line_number":24,"context_line":"from oslo.config import cfg"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3ae8d1ca_c162d2d7","line":24,"updated":"2014-05-28 10:15:19.000000000","message":"neutronclient and oslo.config are third-part. Follow import convention described in HACKING guide.","commit_id":"fe3c4f3f90ebb71bf42209c641e48707772f2605"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"c40292d16fe6ce13b04c014682fac0a5b852c2bf","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from neutron.plugins.common import constants"},{"line_number":22,"context_line":"from neutron.plugins.ml2 import driver_api as api"},{"line_number":23,"context_line":"from neutronclient.v2_0 import client"},{"line_number":24,"context_line":"from oslo.config import cfg"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3ae8d1ca_72dd4770","line":24,"in_reply_to":"3ae8d1ca_c162d2d7","updated":"2014-05-28 11:34:58.000000000","message":"Sure. Will update in the next patchset","commit_id":"fe3c4f3f90ebb71bf42209c641e48707772f2605"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"8a0d09670e73d972dc46bed5319b6dbfaa21a282","unresolved":false,"context_lines":[{"line_number":44,"context_line":"               help\u003d_(\"timeout value for connecting to \""},{"line_number":45,"context_line":"                      \"CRD service in seconds\")),"},{"line_number":46,"context_line":"    cfg.StrOpt(\u0027crd_region_name\u0027,"},{"line_number":47,"context_line":"               help\u003d_(\"region name for connecting to\""},{"line_number":48,"context_line":"                      \"CRD Service in admin context\")),"},{"line_number":49,"context_line":"    cfg.BoolOpt(\u0027crd_api_insecure\u0027,"},{"line_number":50,"context_line":"                default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3ae8d1ca_4f9fc852","line":47,"updated":"2014-05-28 11:42:43.000000000","message":"space after \"to\".\n\nNit: Capitalize first word of all help messages.","commit_id":"fe3c4f3f90ebb71bf42209c641e48707772f2605"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"96455c98cecf2e2851b427d91c7403533fd35e1f","unresolved":false,"context_lines":[{"line_number":61,"context_line":"# required for FSL SDN OS Mechanism driver"},{"line_number":62,"context_line":"cfg.CONF.register_opts(ml2_fslsdn_opts, \"ml2_fslsdn\")"},{"line_number":63,"context_line":"# shortcut"},{"line_number":64,"context_line":"CONF \u003d cfg.CONF.ml2_fslsdn"},{"line_number":65,"context_line":"SERVICE_TYPE \u003d \u0027crd\u0027"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3ae8d1ca_86954042","line":64,"updated":"2014-05-28 08:24:31.000000000","message":"You should use a different name for this since most will assume CONF is the parent config object.  FSLCONF?","commit_id":"fe3c4f3f90ebb71bf42209c641e48707772f2605"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"c40292d16fe6ce13b04c014682fac0a5b852c2bf","unresolved":false,"context_lines":[{"line_number":61,"context_line":"# required for FSL SDN OS Mechanism driver"},{"line_number":62,"context_line":"cfg.CONF.register_opts(ml2_fslsdn_opts, \"ml2_fslsdn\")"},{"line_number":63,"context_line":"# shortcut"},{"line_number":64,"context_line":"CONF \u003d cfg.CONF.ml2_fslsdn"},{"line_number":65,"context_line":"SERVICE_TYPE \u003d \u0027crd\u0027"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3ae8d1ca_ecbb450c","line":64,"in_reply_to":"3ae8d1ca_86954042","updated":"2014-05-28 11:34:58.000000000","message":"Sure. will update in the next patchset","commit_id":"fe3c4f3f90ebb71bf42209c641e48707772f2605"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"8a0d09670e73d972dc46bed5319b6dbfaa21a282","unresolved":false,"context_lines":[{"line_number":68,"context_line":"class FslsdnMechanismDriver(api.MechanismDriver):"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    \"\"\""},{"line_number":71,"context_line":"    Freescale SDN OS Mechanism Driver for ML2 Plugin."},{"line_number":72,"context_line":"    \"\"\""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def initialize(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3ae8d1ca_126403b8","line":71,"updated":"2014-05-28 11:42:43.000000000","message":"Nit: PEP8 put quotes on same line as single line docstring.","commit_id":"fe3c4f3f90ebb71bf42209c641e48707772f2605"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"8a0d09670e73d972dc46bed5319b6dbfaa21a282","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    def initialize(self):"},{"line_number":75,"context_line":"        self.vif_type \u003d portbindings.VIF_TYPE_OVS"},{"line_number":76,"context_line":"        self.vif_details \u003d {portbindings.CAP_PORT_FILTER: True}"},{"line_number":77,"context_line":"        LOG.debug(_(\"Initializing CRD client... \"))"},{"line_number":78,"context_line":"        crd_client_params \u003d {"},{"line_number":79,"context_line":"            \u0027username\u0027: CONF.crd_user_name,"},{"line_number":80,"context_line":"            \u0027tenant_name\u0027: CONF.crd_tenant_name,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3ae8d1ca_afc4cc40","line":77,"updated":"2014-05-28 11:42:43.000000000","message":"New convention is not to use i18n for debug logging. You can remove all cases.","commit_id":"fe3c4f3f90ebb71bf42209c641e48707772f2605"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"59b2e9125ba3ea66e69822de370a552d8a36594b","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        return {\u0027name\u0027: network[\u0027name\u0027],"},{"line_number":97,"context_line":"                \u0027network_type\u0027: segments[0][\u0027network_type\u0027],"},{"line_number":98,"context_line":"                \u0027physical_network\u0027: segments[0][\u0027physical_network\u0027],"},{"line_number":99,"context_line":"                \u0027segmentation_id\u0027: segments[0][\u0027segmentation_id\u0027],"},{"line_number":100,"context_line":"                \u0027status\u0027: network[\u0027status\u0027],"},{"line_number":101,"context_line":"                \u0027admin_state_up\u0027: network[\u0027admin_state_up\u0027],"},{"line_number":102,"context_line":"                }"}],"source_content_type":"text/x-python","patch_set":13,"id":"3ae8d1ca_a1f6a6d5","line":99,"updated":"2014-05-28 10:15:19.000000000","message":"You need to use a segment bound to FSL MD rather than the first segment. In case of mpnet, the first segment is not necessarily bound to your MD.","commit_id":"fe3c4f3f90ebb71bf42209c641e48707772f2605"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"c40292d16fe6ce13b04c014682fac0a5b852c2bf","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        return {\u0027name\u0027: network[\u0027name\u0027],"},{"line_number":97,"context_line":"                \u0027network_type\u0027: segments[0][\u0027network_type\u0027],"},{"line_number":98,"context_line":"                \u0027physical_network\u0027: segments[0][\u0027physical_network\u0027],"},{"line_number":99,"context_line":"                \u0027segmentation_id\u0027: segments[0][\u0027segmentation_id\u0027],"},{"line_number":100,"context_line":"                \u0027status\u0027: network[\u0027status\u0027],"},{"line_number":101,"context_line":"                \u0027admin_state_up\u0027: network[\u0027admin_state_up\u0027],"},{"line_number":102,"context_line":"                }"}],"source_content_type":"text/x-python","patch_set":13,"id":"3ae8d1ca_f2823751","line":99,"in_reply_to":"3ae8d1ca_a1f6a6d5","updated":"2014-05-28 11:34:58.000000000","message":"Do you mean, I need to check mpnet/pnet keys in the network dict and consider those without them for MD ? \n\nKindly make the comment clear.","commit_id":"fe3c4f3f90ebb71bf42209c641e48707772f2605"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"8a0d09670e73d972dc46bed5319b6dbfaa21a282","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                \u0027admin_state_up\u0027: network[\u0027admin_state_up\u0027],"},{"line_number":102,"context_line":"                }"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def create_network_postcommit(self, context):"},{"line_number":105,"context_line":"        LOG.debug(_(\"Processing create_network_postcommit...\"))"},{"line_number":106,"context_line":"        network \u003d context.current"},{"line_number":107,"context_line":"        segments \u003d context.network_segments"}],"source_content_type":"text/x-python","patch_set":13,"id":"3ae8d1ca_d217fbeb","line":104,"updated":"2014-05-28 11:42:43.000000000","message":"Should you have docstrings describing any publically visible functions?","commit_id":"fe3c4f3f90ebb71bf42209c641e48707772f2605"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"8a0d09670e73d972dc46bed5319b6dbfaa21a282","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                }"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def create_network_postcommit(self, context):"},{"line_number":105,"context_line":"        LOG.debug(_(\"Processing create_network_postcommit...\"))"},{"line_number":106,"context_line":"        network \u003d context.current"},{"line_number":107,"context_line":"        segments \u003d context.network_segments"},{"line_number":108,"context_line":"        crd_network \u003d self._prepare_crd_network(network, segments)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3ae8d1ca_7220e749","line":105,"updated":"2014-05-28 11:42:43.000000000","message":"Can use @log.log decorator to provide debug logging at entry/exit of these methods.","commit_id":"fe3c4f3f90ebb71bf42209c641e48707772f2605"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"8a0d09670e73d972dc46bed5319b6dbfaa21a282","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        network \u003d context.current"},{"line_number":107,"context_line":"        segments \u003d context.network_segments"},{"line_number":108,"context_line":"        crd_network \u003d self._prepare_crd_network(network, segments)"},{"line_number":109,"context_line":"        crd_network[\u0027network_id\u0027] \u003d network[\u0027id\u0027]"},{"line_number":110,"context_line":"        crd_network[\u0027tenant_id\u0027] \u003d network[\u0027tenant_id\u0027]"},{"line_number":111,"context_line":"        body \u003d {\u0027network\u0027: crd_network}"},{"line_number":112,"context_line":"        self._crdclient.create_network(body\u003dbody)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3ae8d1ca_5215abef","line":109,"updated":"2014-05-28 11:42:43.000000000","message":"Just curious as to why these two lines are not set as part of call to _prepare_crd_network()?","commit_id":"fe3c4f3f90ebb71bf42209c641e48707772f2605"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"96455c98cecf2e2851b427d91c7403533fd35e1f","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        fixed_ips \u003d port[\u0027fixed_ips\u0027]"},{"line_number":134,"context_line":"        crd_subnet_id \u003d None"},{"line_number":135,"context_line":"        crd_ipaddress \u003d \u0027\u0027"},{"line_number":136,"context_line":"        for fixed_ip in fixed_ips:"},{"line_number":137,"context_line":"            crd_subnet_id \u003d fixed_ip[\u0027subnet_id\u0027]"},{"line_number":138,"context_line":"            crd_ipaddress \u003d fixed_ip[\u0027ip_address\u0027]"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3ae8d1ca_66883420","line":136,"updated":"2014-05-28 08:24:31.000000000","message":"This implies that that the last IP address will be used.  What happens if there is more than one?","commit_id":"fe3c4f3f90ebb71bf42209c641e48707772f2605"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"c40292d16fe6ce13b04c014682fac0a5b852c2bf","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        fixed_ips \u003d port[\u0027fixed_ips\u0027]"},{"line_number":134,"context_line":"        crd_subnet_id \u003d None"},{"line_number":135,"context_line":"        crd_ipaddress \u003d \u0027\u0027"},{"line_number":136,"context_line":"        for fixed_ip in fixed_ips:"},{"line_number":137,"context_line":"            crd_subnet_id \u003d fixed_ip[\u0027subnet_id\u0027]"},{"line_number":138,"context_line":"            crd_ipaddress \u003d fixed_ip[\u0027ip_address\u0027]"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3ae8d1ca_32f49ff1","line":136,"in_reply_to":"3ae8d1ca_66883420","updated":"2014-05-28 11:34:58.000000000","message":"For now CRD allows only one Fixed IP per port.\nHence, I have written this way.  If more Fixed IPs exists for a port, only the last is sent to CRD service.","commit_id":"fe3c4f3f90ebb71bf42209c641e48707772f2605"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"8a0d09670e73d972dc46bed5319b6dbfaa21a282","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        port \u003d context.current"},{"line_number":156,"context_line":"        LOG.debug(_(\"Processing create_port_postcommit...\"))"},{"line_number":157,"context_line":"        crd_port \u003d self._prepare_crd_port(port)"},{"line_number":158,"context_line":"        crd_port[\u0027port_id\u0027] \u003d port[\u0027id\u0027]"},{"line_number":159,"context_line":"        crd_port[\u0027tenant_id\u0027] \u003d port[\u0027tenant_id\u0027]"},{"line_number":160,"context_line":"        body \u003d {\u0027port\u0027: crd_port}"},{"line_number":161,"context_line":"        self._crdclient.create_port(body\u003dbody)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3ae8d1ca_ef7974fd","line":158,"updated":"2014-05-28 11:42:43.000000000","message":"same comment as with network above.","commit_id":"fe3c4f3f90ebb71bf42209c641e48707772f2605"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"8a0d09670e73d972dc46bed5319b6dbfaa21a282","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        subnet \u003d context.current"},{"line_number":197,"context_line":"        LOG.debug(_(\"Processing create_subnet_postcommit...\"))"},{"line_number":198,"context_line":"        crd_subnet \u003d self._prepare_crd_subnet(subnet)"},{"line_number":199,"context_line":"        crd_subnet[\u0027subnet_id\u0027] \u003d subnet[\u0027id\u0027]"},{"line_number":200,"context_line":"        crd_subnet[\u0027tenant_id\u0027] \u003d subnet[\u0027tenant_id\u0027]"},{"line_number":201,"context_line":"        body \u003d {\u0027subnet\u0027: crd_subnet}"},{"line_number":202,"context_line":"        self._crdclient.create_subnet(body\u003dbody)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3ae8d1ca_4f8988ea","line":199,"updated":"2014-05-28 11:42:43.000000000","message":"Same question about these two lines, as for port, above.","commit_id":"fe3c4f3f90ebb71bf42209c641e48707772f2605"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"8a0d09670e73d972dc46bed5319b6dbfaa21a282","unresolved":false,"context_lines":[{"line_number":229,"context_line":"                LOG.debug(_(\"Bound using segment: %s\"), segment)"},{"line_number":230,"context_line":"                return"},{"line_number":231,"context_line":"            else:"},{"line_number":232,"context_line":"                LOG.debug(_(\"Refusing to bind port for segment ID %(id)s, \""},{"line_number":233,"context_line":"                            \"segment %(seg)s, phys net %(physnet)s, and \""},{"line_number":234,"context_line":"                            \"network type %(nettype)s\"),"},{"line_number":235,"context_line":"                          {\u0027id\u0027: segment[api.ID],"}],"source_content_type":"text/x-python","patch_set":13,"id":"3ae8d1ca_72c46792","line":232,"updated":"2014-05-28 11:42:43.000000000","message":"Higher level than debug log?","commit_id":"fe3c4f3f90ebb71bf42209c641e48707772f2605"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"8a0d09670e73d972dc46bed5319b6dbfaa21a282","unresolved":false,"context_lines":[{"line_number":238,"context_line":"                           \u0027nettype\u0027: segment[api.NETWORK_TYPE]})"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    def check_segment(self, segment):"},{"line_number":241,"context_line":"        \"\"\"Verify a segment is valid for the FSL SDN MechanismDriver."},{"line_number":242,"context_line":"        \"\"\""},{"line_number":243,"context_line":"        network_type \u003d segment[api.NETWORK_TYPE]"},{"line_number":244,"context_line":"        return network_type in [constants.TYPE_LOCAL, constants.TYPE_VLAN,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3ae8d1ca_52476b1f","line":241,"updated":"2014-05-28 11:42:43.000000000","message":"Nit: PEP8 single line docstrings should have quotes on same line.","commit_id":"fe3c4f3f90ebb71bf42209c641e48707772f2605"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"d669e758808c2120b3fa7988b841834fa65b58c2","unresolved":false,"context_lines":[{"line_number":48,"context_line":"               help\u003d_(\"Timeout value for connecting to \""},{"line_number":49,"context_line":"                      \"CRD service in seconds\")),"},{"line_number":50,"context_line":"    cfg.StrOpt(\u0027crd_region_name\u0027,"},{"line_number":51,"context_line":"               help\u003d_(\"Region name for connecting to\""},{"line_number":52,"context_line":"                      \"CRD Service in admin context\")),"},{"line_number":53,"context_line":"    cfg.BoolOpt(\u0027crd_api_insecure\u0027,"},{"line_number":54,"context_line":"                default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":15,"id":"3ae8d1ca_af167aa5","line":51,"updated":"2014-05-28 19:33:28.000000000","message":"space after \"to\" so doesn\u0027t run into CRD on next line.","commit_id":"8f3bc041a4a40ed7a38191eb33e992f60ebb4893"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"443d020037c1507a92c54c3a26d782255ad843fa","unresolved":false,"context_lines":[{"line_number":48,"context_line":"               help\u003d_(\"Timeout value for connecting to \""},{"line_number":49,"context_line":"                      \"CRD service in seconds\")),"},{"line_number":50,"context_line":"    cfg.StrOpt(\u0027crd_region_name\u0027,"},{"line_number":51,"context_line":"               help\u003d_(\"Region name for connecting to\""},{"line_number":52,"context_line":"                      \"CRD Service in admin context\")),"},{"line_number":53,"context_line":"    cfg.BoolOpt(\u0027crd_api_insecure\u0027,"},{"line_number":54,"context_line":"                default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":15,"id":"3ae8d1ca_259fe951","line":51,"in_reply_to":"3ae8d1ca_af167aa5","updated":"2014-05-28 20:06:38.000000000","message":"Done, Revised with all the review suggestions..","commit_id":"8f3bc041a4a40ed7a38191eb33e992f60ebb4893"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"d669e758808c2120b3fa7988b841834fa65b58c2","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                      \"neutron in admin context\")),"},{"line_number":60,"context_line":"    cfg.StrOpt(\u0027crd_ca_certificates_file\u0027,"},{"line_number":61,"context_line":"               help\u003d\u0027Location of ca certificates file to use for \u0027"},{"line_number":62,"context_line":"               \u0027CRD client requests.\u0027),"},{"line_number":63,"context_line":"]"},{"line_number":64,"context_line":"# Register the configuration option for crd service"},{"line_number":65,"context_line":"# required for FSL SDN OS Mechanism driver"}],"source_content_type":"text/x-python","patch_set":15,"id":"3ae8d1ca_0f6e8e2f","line":62,"updated":"2014-05-28 19:33:28.000000000","message":"Nit: Indenting... Line up with previous lines comment text.","commit_id":"8f3bc041a4a40ed7a38191eb33e992f60ebb4893"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"d669e758808c2120b3fa7988b841834fa65b58c2","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"class FslsdnMechanismDriver(api.MechanismDriver):"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    \"\"\"Freescale SDN OS Mechanism Driver for ML2 Plugin.\"\"\""},{"line_number":75,"context_line":"    @log.log"},{"line_number":76,"context_line":"    def initialize(self):"},{"line_number":77,"context_line":"        self.vif_type \u003d portbindings.VIF_TYPE_OVS"}],"source_content_type":"text/x-python","patch_set":15,"id":"3ae8d1ca_2f50aa5d","line":74,"updated":"2014-05-28 19:33:28.000000000","message":"Nit: PEP8 you want a blank line after the docstring.\n\nDid you run \"tox -e pep8\" on your changeset?","commit_id":"8f3bc041a4a40ed7a38191eb33e992f60ebb4893"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"d669e758808c2120b3fa7988b841834fa65b58c2","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        segments \u003d context.network_segments"},{"line_number":115,"context_line":"        body \u003d self._prepare_crd_network(network, segments)"},{"line_number":116,"context_line":"        self._crdclient.create_network(body\u003dbody)"},{"line_number":117,"context_line":"        LOG.debug(_(\"\u003ccreate_network\u003e update sent to CRD Server: %s\") % body)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    @log.log"},{"line_number":120,"context_line":"    def update_network_postcommit(self, context):"}],"source_content_type":"text/x-python","patch_set":15,"id":"3ae8d1ca_6abaa00b","line":117,"updated":"2014-05-28 19:33:28.000000000","message":"A recent change is to remove internationalization from debug logging, so you can remove all the _() around DEBUG log messages in this module.\n\nAlso, for all those debugs with an arg, use comma vs %:\n\nLOG.debug(\"\u003ccreate_network\u003e update sent to CRD Server: %s\", body)","commit_id":"8f3bc041a4a40ed7a38191eb33e992f60ebb4893"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"d669e758808c2120b3fa7988b841834fa65b58c2","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        \"\"\"Send delete_network data to CRD service.\"\"\""},{"line_number":131,"context_line":"        network \u003d context.current"},{"line_number":132,"context_line":"        self._crdclient.delete_network(network[\u0027id\u0027])"},{"line_number":133,"context_line":"        LOG.debug(_(\"\u003cdelete_network\u003e update sent to CRD Server.\"))"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    # Port Management"},{"line_number":136,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":15,"id":"3ae8d1ca_4f825695","line":133,"updated":"2014-05-28 19:33:28.000000000","message":"Don\u0027t need this as @log.log will do before/after logs for method. You don\u0027t need the ones on L117, L126 either, but I suspect you wanted to dump the body info.  Sorry, I should have been clearer about that.","commit_id":"8f3bc041a4a40ed7a38191eb33e992f60ebb4893"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"d669e758808c2120b3fa7988b841834fa65b58c2","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        # Since CRD accepts one Fixed IP,handle only one fixed IP per port."},{"line_number":143,"context_line":"        for fixed_ip in fixed_ips:"},{"line_number":144,"context_line":"            crd_subnet_id \u003d fixed_ip[\u0027subnet_id\u0027]"},{"line_number":145,"context_line":"            crd_ipaddress \u003d fixed_ip[\u0027ip_address\u0027]"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        crd_sec_grps \u003d \u0027,\u0027.join(port[\u0027security_groups\u0027])"},{"line_number":148,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"3ae8d1ca_4f597659","line":145,"updated":"2014-05-28 19:33:28.000000000","message":"break, so that doesn\u0027t go through rest, if using only first one. Or you could do something like:\n\nif fixed_ips:\n    crc_subnet_id \u003d fixed_ips[0][\u0027subnet_id\u0027]\n    crd_ipaddress \u003d fixed_ips[0][\u0027ip_address\u0027]\nelse:\n    LOG....  # message in case no fixed IPs\n    return {}","commit_id":"8f3bc041a4a40ed7a38191eb33e992f60ebb4893"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"d669e758808c2120b3fa7988b841834fa65b58c2","unresolved":false,"context_lines":[{"line_number":174,"context_line":"        \"\"\"Send delete_port data to CRD service.\"\"\""},{"line_number":175,"context_line":"        port \u003d context.current"},{"line_number":176,"context_line":"        self._crdclient.delete_port(port[\u0027id\u0027])"},{"line_number":177,"context_line":"        LOG.debug(_(\"\u003cdelete_port\u003e update sent to CRD Server.\"))"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    # Subnet Management"},{"line_number":180,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":15,"id":"3ae8d1ca_4aba4424","line":177,"updated":"2014-05-28 19:33:28.000000000","message":"Not needed with @log.log","commit_id":"8f3bc041a4a40ed7a38191eb33e992f60ebb4893"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"d669e758808c2120b3fa7988b841834fa65b58c2","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        subnet \u003d context.current"},{"line_number":211,"context_line":"        body \u003d self._prepare_crd_subnet(subnet)"},{"line_number":212,"context_line":"        self._crdclient.create_subnet(body\u003dbody)"},{"line_number":213,"context_line":"        LOG.debug(_(\"\u003ccreate_subnet\u003e update sent to CRD Server.\"))"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    @log.log"},{"line_number":216,"context_line":"    def update_subnet_postcommit(self, context):"}],"source_content_type":"text/x-python","patch_set":15,"id":"3ae8d1ca_4a916498","line":213,"updated":"2014-05-28 19:33:28.000000000","message":"Don\u0027t need this, L221, L229.","commit_id":"8f3bc041a4a40ed7a38191eb33e992f60ebb4893"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"d669e758808c2120b3fa7988b841834fa65b58c2","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        self._crdclient.delete_subnet(subnet[\u0027id\u0027])"},{"line_number":229,"context_line":"        LOG.debug(_(\"\u003cdelete_subnet\u003e update sent to CRD Server.\"))"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    @log.log"},{"line_number":232,"context_line":"    def bind_port(self, context):"},{"line_number":233,"context_line":"        \"\"\"Set porting binding data for use with nova.\"\"\""},{"line_number":234,"context_line":"        LOG.debug(_(\"Attempting to bind port %(port)s on \""}],"source_content_type":"text/x-python","patch_set":15,"id":"3ae8d1ca_aaed8827","line":231,"updated":"2014-05-28 19:33:28.000000000","message":"Probably don\u0027t need log.log here, as you have good coverage.","commit_id":"8f3bc041a4a40ed7a38191eb33e992f60ebb4893"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"24cf40363e4742d6900b94fbf7053357ffff87ec","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from neutron.openstack.common import log as logging"},{"line_number":25,"context_line":"from neutron.plugins.common import constants"},{"line_number":26,"context_line":"from neutron.plugins.ml2 import driver_api as api"},{"line_number":27,"context_line":"from neutronclient.v2_0 import client"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":16,"id":"3ae8d1ca_dec44161","line":27,"updated":"2014-05-29 09:52:55.000000000","message":"nit: neutronclient is thirdparty module, so it needs to be moved to around oslo.config.","commit_id":"008dc7e9aba95fdda2dccb3b1206ff65c29376e2"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"9a5668c6db64857bba20a1cf51669764c52a0ae4","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from neutron.openstack.common import log as logging"},{"line_number":25,"context_line":"from neutron.plugins.common import constants"},{"line_number":26,"context_line":"from neutron.plugins.ml2 import driver_api as api"},{"line_number":27,"context_line":"from neutronclient.v2_0 import client"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":16,"id":"3ae8d1ca_5e72f1e5","line":27,"in_reply_to":"3ae8d1ca_dec44161","updated":"2014-05-29 10:08:07.000000000","message":"Sure. will update it","commit_id":"008dc7e9aba95fdda2dccb3b1206ff65c29376e2"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"24cf40363e4742d6900b94fbf7053357ffff87ec","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                 \u0027admin_state_up\u0027: network[\u0027admin_state_up\u0027],"},{"line_number":106,"context_line":"                 \u0027network_type\u0027: segments[0][\u0027network_type\u0027],"},{"line_number":107,"context_line":"                 \u0027physical_network\u0027: segments[0][\u0027physical_network\u0027],"},{"line_number":108,"context_line":"                 \u0027segmentation_id\u0027: segments[0][\u0027segmentation_id\u0027],"},{"line_number":109,"context_line":"                 }}"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    @log.log"}],"source_content_type":"text/x-python","patch_set":16,"id":"3ae8d1ca_1e8dc931","line":108,"updated":"2014-05-29 09:52:55.000000000","message":"I think it is better to check if a segment is supported by this MD. I think the logic in bind_port() can be used.","commit_id":"008dc7e9aba95fdda2dccb3b1206ff65c29376e2"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"9a5668c6db64857bba20a1cf51669764c52a0ae4","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                 \u0027admin_state_up\u0027: network[\u0027admin_state_up\u0027],"},{"line_number":106,"context_line":"                 \u0027network_type\u0027: segments[0][\u0027network_type\u0027],"},{"line_number":107,"context_line":"                 \u0027physical_network\u0027: segments[0][\u0027physical_network\u0027],"},{"line_number":108,"context_line":"                 \u0027segmentation_id\u0027: segments[0][\u0027segmentation_id\u0027],"},{"line_number":109,"context_line":"                 }}"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    @log.log"}],"source_content_type":"text/x-python","patch_set":16,"id":"3ae8d1ca_de7d21b3","line":108,"in_reply_to":"3ae8d1ca_1e8dc931","updated":"2014-05-29 10:08:07.000000000","message":"I have updated this in 17th patchset. Kindly review the same.","commit_id":"008dc7e9aba95fdda2dccb3b1206ff65c29376e2"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"94c8b6f23fa20f050525f3d3f5e7689915eb60f1","unresolved":false,"context_lines":[{"line_number":226,"context_line":"    def delete_subnet_postcommit(self, context):"},{"line_number":227,"context_line":"        \"\"\"Send delete_subnet data to CRD service.\"\"\""},{"line_number":228,"context_line":"        subnet \u003d context.current"},{"line_number":229,"context_line":"        LOG.debug(_(\"delete_subnet_postcommit...\"))"},{"line_number":230,"context_line":"        self._crdclient.delete_subnet(subnet[\u0027id\u0027])"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    def bind_port(self, context):"}],"source_content_type":"text/x-python","patch_set":16,"id":"3ae8d1ca_70be03d6","line":229,"updated":"2014-05-29 03:36:34.000000000","message":"no need for _() for debug messages anymore.","commit_id":"008dc7e9aba95fdda2dccb3b1206ff65c29376e2"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"88229ee68fc673249bd412a807b5bd0754285466","unresolved":false,"context_lines":[{"line_number":226,"context_line":"    def delete_subnet_postcommit(self, context):"},{"line_number":227,"context_line":"        \"\"\"Send delete_subnet data to CRD service.\"\"\""},{"line_number":228,"context_line":"        subnet \u003d context.current"},{"line_number":229,"context_line":"        LOG.debug(_(\"delete_subnet_postcommit...\"))"},{"line_number":230,"context_line":"        self._crdclient.delete_subnet(subnet[\u0027id\u0027])"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    def bind_port(self, context):"}],"source_content_type":"text/x-python","patch_set":16,"id":"3ae8d1ca_86b519f0","line":229,"in_reply_to":"3ae8d1ca_70be03d6","updated":"2014-05-29 06:42:16.000000000","message":"Okay... Updated in the new patchset.","commit_id":"008dc7e9aba95fdda2dccb3b1206ff65c29376e2"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"94c8b6f23fa20f050525f3d3f5e7689915eb60f1","unresolved":false,"context_lines":[{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    def bind_port(self, context):"},{"line_number":233,"context_line":"        \"\"\"Set porting binding data for use with nova.\"\"\""},{"line_number":234,"context_line":"        LOG.debug(_(\"Attempting to bind port %(port)s on \""},{"line_number":235,"context_line":"                    \"network %(network)s\"),"},{"line_number":236,"context_line":"                  {\u0027port\u0027: context.current[\u0027id\u0027],"},{"line_number":237,"context_line":"                   \u0027network\u0027: context.network.current[\u0027id\u0027]})"}],"source_content_type":"text/x-python","patch_set":16,"id":"3ae8d1ca_d0cef782","line":234,"updated":"2014-05-29 03:36:34.000000000","message":"no need for _() for debug messages anymore.","commit_id":"008dc7e9aba95fdda2dccb3b1206ff65c29376e2"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"94c8b6f23fa20f050525f3d3f5e7689915eb60f1","unresolved":false,"context_lines":[{"line_number":241,"context_line":"                                    self.vif_type,"},{"line_number":242,"context_line":"                                    self.vif_details,"},{"line_number":243,"context_line":"                                    status\u003dn_const.PORT_STATUS_ACTIVE)"},{"line_number":244,"context_line":"                LOG.debug(_(\"Bound using segment: %s\"), segment)"},{"line_number":245,"context_line":"                return"},{"line_number":246,"context_line":"            else:"},{"line_number":247,"context_line":"                LOG.debug(_(\"Refusing to bind port for segment ID %(id)s, \""}],"source_content_type":"text/x-python","patch_set":16,"id":"3ae8d1ca_f0c9337a","line":244,"updated":"2014-05-29 03:36:34.000000000","message":"no need for _() for debug messages anymore.","commit_id":"008dc7e9aba95fdda2dccb3b1206ff65c29376e2"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"94c8b6f23fa20f050525f3d3f5e7689915eb60f1","unresolved":false,"context_lines":[{"line_number":244,"context_line":"                LOG.debug(_(\"Bound using segment: %s\"), segment)"},{"line_number":245,"context_line":"                return"},{"line_number":246,"context_line":"            else:"},{"line_number":247,"context_line":"                LOG.debug(_(\"Refusing to bind port for segment ID %(id)s, \""},{"line_number":248,"context_line":"                            \"segment %(seg)s, phys net %(physnet)s, and \""},{"line_number":249,"context_line":"                            \"network type %(nettype)s\"),"},{"line_number":250,"context_line":"                          {\u0027id\u0027: segment[api.ID],"}],"source_content_type":"text/x-python","patch_set":16,"id":"3ae8d1ca_10c93f78","line":247,"updated":"2014-05-29 03:36:34.000000000","message":"no need for _() for debug messages anymore.","commit_id":"008dc7e9aba95fdda2dccb3b1206ff65c29376e2"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"fc6b73d57eb9d892085676b9d3ba6516450bcaaf","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from neutron.openstack.common import log as logging"},{"line_number":25,"context_line":"from neutron.plugins.common import constants"},{"line_number":26,"context_line":"from neutron.plugins.ml2 import driver_api as api"},{"line_number":27,"context_line":"from neutronclient.v2_0 import client"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":17,"id":"3ae8d1ca_2130a855","line":27,"updated":"2014-05-29 11:12:31.000000000","message":"it is not still updated.","commit_id":"00f16dfac34094806eae1dd138acbed1d755b3be"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"c6235a39b2ee66eb7fe677f8bb65a8ca6e43ae71","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        # Since CRD accepts one Fixed IP,handle only one fixed IP per port."},{"line_number":155,"context_line":"        if fixed_ips:"},{"line_number":156,"context_line":"            crd_subnet_id \u003d fixed_ips[0][\u0027subnet_id\u0027]"},{"line_number":157,"context_line":"            crd_ipaddress \u003d fixed_ips[0][\u0027ip_address\u0027]"},{"line_number":158,"context_line":"        else:"},{"line_number":159,"context_line":"            LOG.debug(\"No Fixed IPs found.\")"},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1ae5cdf2_413d3fc3","line":157,"updated":"2014-06-05 14:48:03.000000000","message":"consider logging also when more than one fixed ip is found and only the first will be considered","commit_id":"1b9ee31847b4d5255b2251aa9f33418322f8160f"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"a29c38a860528e6ca822a1f75338e4cfccb63490","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        # Since CRD accepts one Fixed IP,handle only one fixed IP per port."},{"line_number":155,"context_line":"        if fixed_ips:"},{"line_number":156,"context_line":"            crd_subnet_id \u003d fixed_ips[0][\u0027subnet_id\u0027]"},{"line_number":157,"context_line":"            crd_ipaddress \u003d fixed_ips[0][\u0027ip_address\u0027]"},{"line_number":158,"context_line":"        else:"},{"line_number":159,"context_line":"            LOG.debug(\"No Fixed IPs found.\")"},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1ae5cdf2_c32cef9b","line":157,"in_reply_to":"1ae5cdf2_413d3fc3","updated":"2014-06-05 17:05:07.000000000","message":"Sure will take care of this.","commit_id":"1b9ee31847b4d5255b2251aa9f33418322f8160f"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"c6235a39b2ee66eb7fe677f8bb65a8ca6e43ae71","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        self._crdclient.create_port(body\u003dbody)"},{"line_number":184,"context_line":"        LOG.debug(\"create_port update sent to CRD Server: %s\", body)"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def delete_port_postcommit(self, context):"},{"line_number":187,"context_line":"        \"\"\"Send delete_port data to CRD service.\"\"\""},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        port \u003d context.current"}],"source_content_type":"text/x-python","patch_set":25,"id":"1ae5cdf2_a1b3634b","line":186,"updated":"2014-06-05 14:48:03.000000000","message":"I\u0027m just curious to know why this driver does not have an update_port_postcommit","commit_id":"1b9ee31847b4d5255b2251aa9f33418322f8160f"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"a29c38a860528e6ca822a1f75338e4cfccb63490","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        self._crdclient.create_port(body\u003dbody)"},{"line_number":184,"context_line":"        LOG.debug(\"create_port update sent to CRD Server: %s\", body)"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def delete_port_postcommit(self, context):"},{"line_number":187,"context_line":"        \"\"\"Send delete_port data to CRD service.\"\"\""},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        port \u003d context.current"}],"source_content_type":"text/x-python","patch_set":25,"id":"1ae5cdf2_a377e39e","line":186,"in_reply_to":"1ae5cdf2_a1b3634b","updated":"2014-06-05 17:05:07.000000000","message":"We are not handling update port with our crd service. so we did not handle the same here.","commit_id":"1b9ee31847b4d5255b2251aa9f33418322f8160f"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"c6235a39b2ee66eb7fe677f8bb65a8ca6e43ae71","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        \"\"\"Verify a segment is valid for the FSL SDN MechanismDriver.\"\"\""},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"        network_type \u003d segment[api.NETWORK_TYPE]"},{"line_number":277,"context_line":"        return network_type in [constants.TYPE_VLAN, constants.TYPE_VXLAN]"}],"source_content_type":"text/x-python","patch_set":25,"id":"1ae5cdf2_e1ef2b1c","line":277,"updated":"2014-06-05 14:48:03.000000000","message":"more pedantry. This could be a single line.","commit_id":"1b9ee31847b4d5255b2251aa9f33418322f8160f"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"a29c38a860528e6ca822a1f75338e4cfccb63490","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        \"\"\"Verify a segment is valid for the FSL SDN MechanismDriver.\"\"\""},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"        network_type \u003d segment[api.NETWORK_TYPE]"},{"line_number":277,"context_line":"        return network_type in [constants.TYPE_VLAN, constants.TYPE_VXLAN]"}],"source_content_type":"text/x-python","patch_set":25,"id":"1ae5cdf2_43661fee","line":277,"in_reply_to":"1ae5cdf2_e1ef2b1c","updated":"2014-06-05 17:05:07.000000000","message":"okay. will change in next patch set","commit_id":"1b9ee31847b4d5255b2251aa9f33418322f8160f"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"4b4e290176b76397d3abfff0dcd97d93ffbc8884","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            fixed_ips \u003d port[\u0027fixed_ips\u0027]"},{"line_number":156,"context_line":"            # Since CRD accepts one Fixed IP,"},{"line_number":157,"context_line":"            # so handle only one fixed IP per port."},{"line_number":158,"context_line":"            if fixed_ips:"},{"line_number":159,"context_line":"                crd_subnet_id \u003d fixed_ips[0][\u0027subnet_id\u0027]"},{"line_number":160,"context_line":"                crd_ipaddress \u003d fixed_ips[0][\u0027ip_address\u0027]"},{"line_number":161,"context_line":"                LOG.debug(\"Handling Fixed IP {%s,%s}\", crd_subnet_id,"}],"source_content_type":"text/x-python","patch_set":26,"id":"1ae5cdf2_25073f83","line":158,"updated":"2014-06-06 10:57:45.000000000","message":"This is redundant, based on test in L154. Did you mean to do check if more than one fixed IP?IF so, you could do:\n\n    if len(fixed_ips) \u003e 1:\n        LOG.debug(\"More than one fixed IP exists - using first one\")\n    crd_subnet_id \u003d  fixed_ips[0][\u0027subnet_id\u0027]\n    ...\n    LOG.debug(\"Handling...)","commit_id":"8a50113eae0e4d7276230bcff9b4c3bbdd04a001"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"1fdb5761971ba7c4292973e90680fac65ee9a99f","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            fixed_ips \u003d port[\u0027fixed_ips\u0027]"},{"line_number":156,"context_line":"            # Since CRD accepts one Fixed IP,"},{"line_number":157,"context_line":"            # so handle only one fixed IP per port."},{"line_number":158,"context_line":"            if fixed_ips:"},{"line_number":159,"context_line":"                crd_subnet_id \u003d fixed_ips[0][\u0027subnet_id\u0027]"},{"line_number":160,"context_line":"                crd_ipaddress \u003d fixed_ips[0][\u0027ip_address\u0027]"},{"line_number":161,"context_line":"                LOG.debug(\"Handling Fixed IP {%s,%s}\", crd_subnet_id,"}],"source_content_type":"text/x-python","patch_set":26,"id":"1ae5cdf2_18bd46d8","line":158,"in_reply_to":"1ae5cdf2_25073f83","updated":"2014-06-06 11:09:57.000000000","message":"okay. will update the code.","commit_id":"8a50113eae0e4d7276230bcff9b4c3bbdd04a001"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"4b4e290176b76397d3abfff0dcd97d93ffbc8884","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        crd_dns_nameservers \u003d \u0027\u0027"},{"line_number":207,"context_line":"        crd_host_routes \u003d \u0027\u0027"},{"line_number":208,"context_line":"        # Handling Allocation IPs"},{"line_number":209,"context_line":"        if \u0027allocation_pools\u0027 in subnet:"},{"line_number":210,"context_line":"            a_pools \u003d subnet[\u0027allocation_pools\u0027]"},{"line_number":211,"context_line":"            crd_allocation_pools \u003d \u0027,\u0027.join([\"%s-%s\" % (p[\u0027start\u0027],"},{"line_number":212,"context_line":"                                                        p[\u0027end\u0027])"}],"source_content_type":"text/x-python","patch_set":26,"id":"1ae5cdf2_45cd2b30","line":209,"updated":"2014-06-06 10:57:45.000000000","message":"For each of these if clauses, would it be advantageous to debug log any information?","commit_id":"8a50113eae0e4d7276230bcff9b4c3bbdd04a001"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"1fdb5761971ba7c4292973e90680fac65ee9a99f","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        crd_dns_nameservers \u003d \u0027\u0027"},{"line_number":207,"context_line":"        crd_host_routes \u003d \u0027\u0027"},{"line_number":208,"context_line":"        # Handling Allocation IPs"},{"line_number":209,"context_line":"        if \u0027allocation_pools\u0027 in subnet:"},{"line_number":210,"context_line":"            a_pools \u003d subnet[\u0027allocation_pools\u0027]"},{"line_number":211,"context_line":"            crd_allocation_pools \u003d \u0027,\u0027.join([\"%s-%s\" % (p[\u0027start\u0027],"},{"line_number":212,"context_line":"                                                        p[\u0027end\u0027])"}],"source_content_type":"text/x-python","patch_set":26,"id":"1ae5cdf2_f8ea5ad6","line":209,"in_reply_to":"1ae5cdf2_45cd2b30","updated":"2014-06-06 11:09:57.000000000","message":"here, I\u0027m just checking it the subnet dict has the key.\nno debug logs here.","commit_id":"8a50113eae0e4d7276230bcff9b4c3bbdd04a001"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"5591f0baae6d21a256817801d6cb89440867ffe0","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        crd_dns_nameservers \u003d \u0027\u0027"},{"line_number":207,"context_line":"        crd_host_routes \u003d \u0027\u0027"},{"line_number":208,"context_line":"        # Handling Allocation IPs"},{"line_number":209,"context_line":"        if \u0027allocation_pools\u0027 in subnet:"},{"line_number":210,"context_line":"            a_pools \u003d subnet[\u0027allocation_pools\u0027]"},{"line_number":211,"context_line":"            crd_allocation_pools \u003d \u0027,\u0027.join([\"%s-%s\" % (p[\u0027start\u0027],"},{"line_number":212,"context_line":"                                                        p[\u0027end\u0027])"}],"source_content_type":"text/x-python","patch_set":26,"id":"1ae5cdf2_3b503c31","line":209,"in_reply_to":"1ae5cdf2_7b7004a4","updated":"2014-06-06 11:52:33.000000000","message":"okay.","commit_id":"8a50113eae0e4d7276230bcff9b4c3bbdd04a001"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"3ba3ab0c4ab95d014892b2e6ab057992d828f500","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        crd_dns_nameservers \u003d \u0027\u0027"},{"line_number":207,"context_line":"        crd_host_routes \u003d \u0027\u0027"},{"line_number":208,"context_line":"        # Handling Allocation IPs"},{"line_number":209,"context_line":"        if \u0027allocation_pools\u0027 in subnet:"},{"line_number":210,"context_line":"            a_pools \u003d subnet[\u0027allocation_pools\u0027]"},{"line_number":211,"context_line":"            crd_allocation_pools \u003d \u0027,\u0027.join([\"%s-%s\" % (p[\u0027start\u0027],"},{"line_number":212,"context_line":"                                                        p[\u0027end\u0027])"}],"source_content_type":"text/x-python","patch_set":26,"id":"1ae5cdf2_7b7004a4","line":209,"in_reply_to":"1ae5cdf2_f8ea5ad6","updated":"2014-06-06 11:29:27.000000000","message":"I mean, would it be useful to log information about the allocation pools, DNS nameservers, and host routes that are being collected for the subnet info.","commit_id":"8a50113eae0e4d7276230bcff9b4c3bbdd04a001"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"3ba3ab0c4ab95d014892b2e6ab057992d828f500","unresolved":false,"context_lines":[{"line_number":212,"context_line":"                                                        p[\u0027end\u0027])"},{"line_number":213,"context_line":"                                             for p in a_pools])"},{"line_number":214,"context_line":"        # Handling Host Routes"},{"line_number":215,"context_line":"        if \u0027dns_nameservers\u0027 in subnet:"},{"line_number":216,"context_line":"            crd_host_routes \u003d \u0027,\u0027.join([\"%s-%s\" % (r[\u0027destination\u0027],"},{"line_number":217,"context_line":"                                                   r[\u0027nexthop\u0027])"},{"line_number":218,"context_line":"                                        for r in subnet[\u0027host_routes\u0027]])"}],"source_content_type":"text/x-python","patch_set":26,"id":"1ae5cdf2_1b9e20b9","line":215,"updated":"2014-06-06 11:29:27.000000000","message":"Shouldn\u0027t this be \u0027host_routes\u0027? Otherwise the two if statements can be combined.","commit_id":"8a50113eae0e4d7276230bcff9b4c3bbdd04a001"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"5591f0baae6d21a256817801d6cb89440867ffe0","unresolved":false,"context_lines":[{"line_number":212,"context_line":"                                                        p[\u0027end\u0027])"},{"line_number":213,"context_line":"                                             for p in a_pools])"},{"line_number":214,"context_line":"        # Handling Host Routes"},{"line_number":215,"context_line":"        if \u0027dns_nameservers\u0027 in subnet:"},{"line_number":216,"context_line":"            crd_host_routes \u003d \u0027,\u0027.join([\"%s-%s\" % (r[\u0027destination\u0027],"},{"line_number":217,"context_line":"                                                   r[\u0027nexthop\u0027])"},{"line_number":218,"context_line":"                                        for r in subnet[\u0027host_routes\u0027]])"}],"source_content_type":"text/x-python","patch_set":26,"id":"1ae5cdf2_fbffb4ff","line":215,"in_reply_to":"1ae5cdf2_1b9e20b9","updated":"2014-06-06 11:52:33.000000000","message":"yes, I was mistaken. updating the same.","commit_id":"8a50113eae0e4d7276230bcff9b4c3bbdd04a001"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"129bed313be3de673a8b6fc97d662ecc17ede44c","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            fixed_ips \u003d port[\u0027fixed_ips\u0027]"},{"line_number":156,"context_line":"            # Since CRD accepts one Fixed IP,"},{"line_number":157,"context_line":"            # so handle only one fixed IP per port."},{"line_number":158,"context_line":"            if len(fixed_ips) \u003e 1:"},{"line_number":159,"context_line":"                LOG.debug(\"More than one fixed IP exists - using first one\")"},{"line_number":160,"context_line":"                crd_subnet_id \u003d fixed_ips[0][\u0027subnet_id\u0027]"},{"line_number":161,"context_line":"                crd_ipaddress \u003d fixed_ips[0][\u0027ip_address\u0027]"}],"source_content_type":"text/x-python","patch_set":27,"id":"1ae5cdf2_de0101b1","line":158,"updated":"2014-06-06 14:17:26.000000000","message":"The current logic does not process the most typical case where len(fixed_ips)\u003d\u003d1. This is the same issue Paul commented below. I think it should be:\n\n  if fixed_ips:\n      if len(fixed_ips) \u003e 1:\n          LOG.info(\"More than one fixed IP exists - using first one\")\n      crd_subnet_id \u003d fixed_ips[0][subnet_id]\n      ....\n  else:\n      LOG.debug(\u0027No fixed IPs found.\u0027)\n\n\nIt is better to cover all cases for len(fixed_ips)\u003d0,1,2 in unit tests, but it is not a requirement of this patch. It can be done later. No worries.","commit_id":"3bfa87bd043899e5b730e501439cf2619f5c0ab4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"129bed313be3de673a8b6fc97d662ecc17ede44c","unresolved":false,"context_lines":[{"line_number":156,"context_line":"            # Since CRD accepts one Fixed IP,"},{"line_number":157,"context_line":"            # so handle only one fixed IP per port."},{"line_number":158,"context_line":"            if len(fixed_ips) \u003e 1:"},{"line_number":159,"context_line":"                LOG.debug(\"More than one fixed IP exists - using first one\")"},{"line_number":160,"context_line":"                crd_subnet_id \u003d fixed_ips[0][\u0027subnet_id\u0027]"},{"line_number":161,"context_line":"                crd_ipaddress \u003d fixed_ips[0][\u0027ip_address\u0027]"},{"line_number":162,"context_line":"                LOG.debug(\"Handling fixed IP {subnet_id:%s, ip_address:%s}\","}],"source_content_type":"text/x-python","patch_set":27,"id":"1ae5cdf2_fed6bdf0","line":159,"updated":"2014-06-06 14:17:26.000000000","message":"Log level should be higher, at least LOG.info because it is not a debug message but a kind of warning.\nWhen changing log level, please mark the message as translatable _(\u0027xxxxx\u0027).","commit_id":"3bfa87bd043899e5b730e501439cf2619f5c0ab4"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"6e37964018cd66821e8b07ba8dbba610e050ecd8","unresolved":false,"context_lines":[{"line_number":157,"context_line":"            # so handle only one fixed IP per port."},{"line_number":158,"context_line":"            if len(fixed_ips) \u003e 1:"},{"line_number":159,"context_line":"                LOG.debug(\"More than one fixed IP exists - using first one\")"},{"line_number":160,"context_line":"                crd_subnet_id \u003d fixed_ips[0][\u0027subnet_id\u0027]"},{"line_number":161,"context_line":"                crd_ipaddress \u003d fixed_ips[0][\u0027ip_address\u0027]"},{"line_number":162,"context_line":"                LOG.debug(\"Handling fixed IP {subnet_id:%s, ip_address:%s}\","},{"line_number":163,"context_line":"                          crd_subnet_id, crd_ipaddress)"}],"source_content_type":"text/x-python","patch_set":27,"id":"1ae5cdf2_91ddb1e2","line":160,"updated":"2014-06-06 12:39:51.000000000","message":"L160-164 needs to be at the same level as the if on L158.  So that, if there is exactly one, it\u0027ll still assign these two values.","commit_id":"3bfa87bd043899e5b730e501439cf2619f5c0ab4"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"6e37964018cd66821e8b07ba8dbba610e050ecd8","unresolved":false,"context_lines":[{"line_number":161,"context_line":"                crd_ipaddress \u003d fixed_ips[0][\u0027ip_address\u0027]"},{"line_number":162,"context_line":"                LOG.debug(\"Handling fixed IP {subnet_id:%s, ip_address:%s}\","},{"line_number":163,"context_line":"                          crd_subnet_id, crd_ipaddress)"},{"line_number":164,"context_line":"            else:"},{"line_number":165,"context_line":"                LOG.debug(\"No Fixed IPs found.\")"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        if \u0027security_groups\u0027 in port:"}],"source_content_type":"text/x-python","patch_set":27,"id":"1ae5cdf2_1198c11a","line":164,"updated":"2014-06-06 12:39:51.000000000","message":"This needs to be at the same level as the if on L154, and not L158.","commit_id":"3bfa87bd043899e5b730e501439cf2619f5c0ab4"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"6ad2240a6e797d0d42781cfdc73eb7e8a9a0eaf6","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        if \u0027fixed_ips\u0027 in port:"},{"line_number":155,"context_line":"            # Since CRD accepts one Fixed IP,"},{"line_number":156,"context_line":"            # so handle only one fixed IP per port."},{"line_number":157,"context_line":"            if len(port[\u0027fixed_ips\u0027]) \u003e\u003d 1:"},{"line_number":158,"context_line":"                LOG.info(_(\"More than one fixed IP exists - using first one\"))"},{"line_number":159,"context_line":"                crd_subnet_id \u003d port[\u0027fixed_ips\u0027][0][\u0027subnet_id\u0027]"},{"line_number":160,"context_line":"                crd_ipaddress \u003d port[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]"}],"source_content_type":"text/x-python","patch_set":28,"id":"1ae5cdf2_50edda24","line":157,"updated":"2014-06-06 16:45:22.000000000","message":"As this reads, it will log an info message saying more than one IP exists, but it may be only one.\n\nIf you want to log a message, only when more than one IP exists, then un-indent L159-162. (I would think this is the intent)\n\nIf you want to log when 1+, then change the wording on L158 to indicate that.","commit_id":"fa0f65c3fbd9d9b56df4e7e347bea65150977cd1"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"b2a299ed2a39c51bb033a299b7555c34bba4b103","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        if \u0027fixed_ips\u0027 in port:"},{"line_number":155,"context_line":"            # Since CRD accepts one Fixed IP,"},{"line_number":156,"context_line":"            # so handle only one fixed IP per port."},{"line_number":157,"context_line":"            if len(port[\u0027fixed_ips\u0027]) \u003e\u003d 1:"},{"line_number":158,"context_line":"                LOG.info(_(\"More than one fixed IP exists - using first one\"))"},{"line_number":159,"context_line":"                crd_subnet_id \u003d port[\u0027fixed_ips\u0027][0][\u0027subnet_id\u0027]"},{"line_number":160,"context_line":"                crd_ipaddress \u003d port[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]"}],"source_content_type":"text/x-python","patch_set":28,"id":"1ae5cdf2_475d21ec","line":157,"in_reply_to":"1ae5cdf2_50edda24","updated":"2014-06-06 18:26:19.000000000","message":"Sure.","commit_id":"fa0f65c3fbd9d9b56df4e7e347bea65150977cd1"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"d71c03c59e421e0c076406781e2c1ec693d1b8af","unresolved":false,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        # Since CRD accepts one Fixed IP,"},{"line_number":155,"context_line":"        # so handle only one fixed IP per port."},{"line_number":156,"context_line":"        if len(port[\u0027fixed_ips\u0027]) \u003e 1:"},{"line_number":157,"context_line":"            LOG.info(_(\"More than one fixed IP exists - using first one\"))"},{"line_number":158,"context_line":"            crd_subnet_id \u003d port[\u0027fixed_ips\u0027][0][\u0027subnet_id\u0027]"},{"line_number":159,"context_line":"            crd_ipaddress \u003d port[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]"}],"source_content_type":"text/x-python","patch_set":29,"id":"1ae5cdf2_8eb3be09","line":156,"updated":"2014-06-06 21:29:29.000000000","message":"Looks like some churn on this... sorry for not doing it earlier, but here is what I\u0027m suggesting:\n\n    if \u0027fixed_ips\u0027 in port:\n        if len(port[\u0027fixed_ips\u0027]) \u003e 1:\n            LOG.info(_(\"More than one fixed IP exists - using first one.\"))\n        crd_subnet_id \u003d port[\u0027fixed_ips\u0027][0][\u0027subnet_id\u0027]\n        crd_ipaddress \u003d port[\u0027fixed_ips][0][\u0027ip_address\u0027]\n        LOG.debug(\"Handling fixed IP {subnet_id:%(subnet)s, \"\n                  \"ip_address:%(ip)s}\",\n                  {\u0027subnet\u0027: crd_subnet_id, \u0027ip\u0027: crd_ipaddress})\n    else:\n        LOG.info(_(\"No fixed IPs found.\"))\n\nThis avoids duplicating code (L158-162, L164-167), uses named formatting string for log message that has multiple arguments, and only does LOG.info when it is not the normal case.","commit_id":"87576308bc80dfce8f7737e9f5c04493fe07197a"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"16558f15706712ce2a21031fd2f8e31cd945e36f","unresolved":false,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        # Since CRD accepts one Fixed IP,"},{"line_number":155,"context_line":"        # so handle only one fixed IP per port."},{"line_number":156,"context_line":"        if len(port[\u0027fixed_ips\u0027]) \u003e 1:"},{"line_number":157,"context_line":"            LOG.info(_(\"More than one fixed IP exists - using first one\"))"},{"line_number":158,"context_line":"            crd_subnet_id \u003d port[\u0027fixed_ips\u0027][0][\u0027subnet_id\u0027]"},{"line_number":159,"context_line":"            crd_ipaddress \u003d port[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]"}],"source_content_type":"text/x-python","patch_set":29,"id":"1ae5cdf2_735d76ec","line":156,"in_reply_to":"1ae5cdf2_8eb3be09","updated":"2014-06-07 01:43:43.000000000","message":"Okay. Thanks for the suggestion. Taken care of this in Patchset 30.","commit_id":"87576308bc80dfce8f7737e9f5c04493fe07197a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"234ec871d245cade623fe1a1126f8659f14ce6a8","unresolved":false,"context_lines":[{"line_number":160,"context_line":"            LOG.debug(\"Handling fixed IP {subnet_id:%s, ip_address:%s}\","},{"line_number":161,"context_line":"                      crd_subnet_id, crd_ipaddress)"},{"line_number":162,"context_line":"        elif len(port[\u0027fixed_ips\u0027]) \u003d\u003d 1:"},{"line_number":163,"context_line":"            LOG.info(_(\"One fixed IP found.\"))"},{"line_number":164,"context_line":"            crd_subnet_id \u003d port[\u0027fixed_ips\u0027][0][\u0027subnet_id\u0027]"},{"line_number":165,"context_line":"            crd_ipaddress \u003d port[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]"},{"line_number":166,"context_line":"            LOG.debug(\"Handling fixed IP {subnet_id:%s, ip_address:%s}\","}],"source_content_type":"text/x-python","patch_set":29,"id":"1ae5cdf2_5325dfac","line":163,"updated":"2014-06-06 20:29:40.000000000","message":"(suggestion only) It is better to be LOG.debug because there is no need to inform operators of it.","commit_id":"87576308bc80dfce8f7737e9f5c04493fe07197a"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"16558f15706712ce2a21031fd2f8e31cd945e36f","unresolved":false,"context_lines":[{"line_number":160,"context_line":"            LOG.debug(\"Handling fixed IP {subnet_id:%s, ip_address:%s}\","},{"line_number":161,"context_line":"                      crd_subnet_id, crd_ipaddress)"},{"line_number":162,"context_line":"        elif len(port[\u0027fixed_ips\u0027]) \u003d\u003d 1:"},{"line_number":163,"context_line":"            LOG.info(_(\"One fixed IP found.\"))"},{"line_number":164,"context_line":"            crd_subnet_id \u003d port[\u0027fixed_ips\u0027][0][\u0027subnet_id\u0027]"},{"line_number":165,"context_line":"            crd_ipaddress \u003d port[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]"},{"line_number":166,"context_line":"            LOG.debug(\"Handling fixed IP {subnet_id:%s, ip_address:%s}\","}],"source_content_type":"text/x-python","patch_set":29,"id":"1ae5cdf2_936202ac","line":163,"in_reply_to":"1ae5cdf2_5325dfac","updated":"2014-06-07 01:43:43.000000000","message":"Done","commit_id":"87576308bc80dfce8f7737e9f5c04493fe07197a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"234ec871d245cade623fe1a1126f8659f14ce6a8","unresolved":false,"context_lines":[{"line_number":166,"context_line":"            LOG.debug(\"Handling fixed IP {subnet_id:%s, ip_address:%s}\","},{"line_number":167,"context_line":"                      crd_subnet_id, crd_ipaddress)"},{"line_number":168,"context_line":"        else:"},{"line_number":169,"context_line":"            LOG.info(_(\"No Fixed IPs found.\"))"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        if \u0027security_groups\u0027 in port:"},{"line_number":172,"context_line":"            crd_sec_grps \u003d \u0027,\u0027.join(port[\u0027security_groups\u0027])"}],"source_content_type":"text/x-python","patch_set":29,"id":"1ae5cdf2_732adb7f","line":169,"updated":"2014-06-06 20:29:40.000000000","message":"Ditto.","commit_id":"87576308bc80dfce8f7737e9f5c04493fe07197a"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"16558f15706712ce2a21031fd2f8e31cd945e36f","unresolved":false,"context_lines":[{"line_number":166,"context_line":"            LOG.debug(\"Handling fixed IP {subnet_id:%s, ip_address:%s}\","},{"line_number":167,"context_line":"                      crd_subnet_id, crd_ipaddress)"},{"line_number":168,"context_line":"        else:"},{"line_number":169,"context_line":"            LOG.info(_(\"No Fixed IPs found.\"))"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        if \u0027security_groups\u0027 in port:"},{"line_number":172,"context_line":"            crd_sec_grps \u003d \u0027,\u0027.join(port[\u0027security_groups\u0027])"}],"source_content_type":"text/x-python","patch_set":29,"id":"1ae5cdf2_b357fec9","line":169,"in_reply_to":"1ae5cdf2_732adb7f","updated":"2014-06-07 01:43:43.000000000","message":"Done","commit_id":"87576308bc80dfce8f7737e9f5c04493fe07197a"}],"neutron/tests/unit/ml2/drivers/test_fslsdn_mech.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9d80e58ea21a1092332b4f905a392b64b117ff44","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import mock"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from neutron.plugins.ml2.drivers.freescale.mech_fslsdn \\"},{"line_number":19,"context_line":"    import FslsdnMechanismDriver"},{"line_number":20,"context_line":"from neutron.tests import base"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVn%2F%2FgfU%3D","line":19,"updated":"2014-03-05 17:45:50.000000000","message":"Please use module level import:\n\n  from neutron.plugins.ml2.drivers.freescale import mech_fslsdn","commit_id":"e188e9b72246a24b3608f716ac31810f8ee9e7f8"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9d80e58ea21a1092332b4f905a392b64b117ff44","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    def test_create_network_postcommit(self):"},{"line_number":41,"context_line":"        body \u003d {\u0027network\u0027: self.build_network_context()}"},{"line_number":42,"context_line":"        self.assertTrue("},{"line_number":43,"context_line":"            self.dvr._crdclient.create_network(body\u003dbody).get(\u0027network\u0027))"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def test_update_network_postcommit(self):"},{"line_number":46,"context_line":"        body \u003d {\u0027network\u0027: self.build_network_context()}"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVn%2F%2Fgc4%3D","line":43,"updated":"2014-03-05 17:45:50.000000000","message":"It tests nothing. It looks mox way. We need to write unit tests with mock.\n\nself.dvr._crdclient is a object of mock.Mock(), so create_network(body\u003dbody) returns Mock object and then get(\u0027network\u0027) also returns Mock. As a result assertTrue succeed.\n\nFor detail, please see python mock documentation. neutron code base has many useful examples.","commit_id":"e188e9b72246a24b3608f716ac31810f8ee9e7f8"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"f44326c511fb5176ca33c6eb132bdbf9ab8e788d","unresolved":false,"context_lines":[{"line_number":100,"context_line":"                                            body\u003dbody).get(\u0027port\u0027))"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def test_delete_port_postcommit(self):"},{"line_number":103,"context_line":"        self.assertTrue(self.dvr._crdclient.delete_port(\u0027port_1\u0027))"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVn%2F%2FhBU%3D","line":103,"updated":"2014-03-05 16:48:58.000000000","message":"You might also want to add test for port binding/unbinding and segmets","commit_id":"e188e9b72246a24b3608f716ac31810f8ee9e7f8"}],"neutron/tests/unit/ml2/test_mechanism_fslsdn.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"59b2e9125ba3ea66e69822de370a552d8a36594b","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    \"\"\"Test FslSdn mechanism driver."},{"line_number":33,"context_line":"    \"\"\""},{"line_number":34,"context_line":"    VIF_TYPE \u003d portbindings.VIF_TYPE_OVS"},{"line_number":35,"context_line":"    CAP_PORT_FILTER \u003d True"},{"line_number":36,"context_line":"    AGENT_TYPE \u003d constants.AGENT_TYPE_OVS"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    GOOD_MAPPINGS \u003d {\u0027fake_physical_network\u0027: \u0027fake_bridge\u0027}"}],"source_content_type":"text/x-python","patch_set":13,"id":"3ae8d1ca_61265eb9","line":35,"updated":"2014-05-28 10:15:19.000000000","message":"VIF_TYPE and CAP_PORT_FILTER are specific to port tests. It is better to move TestFslSdnMechDriverPortsV2 class.","commit_id":"fe3c4f3f90ebb71bf42209c641e48707772f2605"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"c40292d16fe6ce13b04c014682fac0a5b852c2bf","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    \"\"\"Test FslSdn mechanism driver."},{"line_number":33,"context_line":"    \"\"\""},{"line_number":34,"context_line":"    VIF_TYPE \u003d portbindings.VIF_TYPE_OVS"},{"line_number":35,"context_line":"    CAP_PORT_FILTER \u003d True"},{"line_number":36,"context_line":"    AGENT_TYPE \u003d constants.AGENT_TYPE_OVS"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    GOOD_MAPPINGS \u003d {\u0027fake_physical_network\u0027: \u0027fake_bridge\u0027}"}],"source_content_type":"text/x-python","patch_set":13,"id":"3ae8d1ca_2f451c70","line":35,"in_reply_to":"3ae8d1ca_61265eb9","updated":"2014-05-28 11:34:58.000000000","message":"Sure. Will update in the next patchset","commit_id":"fe3c4f3f90ebb71bf42209c641e48707772f2605"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"59b2e9125ba3ea66e69822de370a552d8a36594b","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    AGENTS_BAD \u003d [{\u0027alive\u0027: False,"},{"line_number":49,"context_line":"                   \u0027configurations\u0027: GOOD_CONFIGS},"},{"line_number":50,"context_line":"                  {\u0027alive\u0027: True,"},{"line_number":51,"context_line":"                   \u0027configurations\u0027: BAD_CONFIGS}]"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def setUp(self):"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3ae8d1ca_01003a00","line":51,"updated":"2014-05-28 10:15:19.000000000","message":"Why are the above constants (L.36-) required? Is FSL MD agent-based?","commit_id":"fe3c4f3f90ebb71bf42209c641e48707772f2605"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"59b2e9125ba3ea66e69822de370a552d8a36594b","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        ml2_opts \u003d {\u0027mechanism_drivers\u0027: [\u0027fslsdn\u0027]}"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        for opt, val in ml2_opts.items():"},{"line_number":58,"context_line":"            ml2_config.cfg.CONF.set_override(opt, val, \u0027ml2\u0027)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        self.addCleanup(ml2_config.cfg.CONF.reset)"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3ae8d1ca_66bcb46a","line":58,"updated":"2014-05-28 10:15:19.000000000","message":"The common practice is as follows:\n\n  from oslo.config import cfg\n\n  cfg.CONF.set_override(opt, val, \u0027ml2\u0027)\n\nAlso why don\u0027t you use just:\n\n  cfg.CONF.set_override(\u0027mechanism_drivers\u0027, [\u0027fslsdn\u0027], \u0027ml2\u0027)","commit_id":"fe3c4f3f90ebb71bf42209c641e48707772f2605"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"c40292d16fe6ce13b04c014682fac0a5b852c2bf","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        ml2_opts \u003d {\u0027mechanism_drivers\u0027: [\u0027fslsdn\u0027]}"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        for opt, val in ml2_opts.items():"},{"line_number":58,"context_line":"            ml2_config.cfg.CONF.set_override(opt, val, \u0027ml2\u0027)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        self.addCleanup(ml2_config.cfg.CONF.reset)"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3ae8d1ca_4f4a6881","line":58,"in_reply_to":"3ae8d1ca_66bcb46a","updated":"2014-05-28 11:34:58.000000000","message":"Sure. Will update in the next patchset","commit_id":"fe3c4f3f90ebb71bf42209c641e48707772f2605"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"59b2e9125ba3ea66e69822de370a552d8a36594b","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        for opt, val in ml2_opts.items():"},{"line_number":58,"context_line":"            ml2_config.cfg.CONF.set_override(opt, val, \u0027ml2\u0027)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        self.addCleanup(ml2_config.cfg.CONF.reset)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        def mocked_fslsdn_init(self):"},{"line_number":63,"context_line":"            self._driver \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":13,"id":"3ae8d1ca_86db80ec","line":60,"updated":"2014-05-28 10:15:19.000000000","message":"It is unnecessary. See BaseTestCase.","commit_id":"fe3c4f3f90ebb71bf42209c641e48707772f2605"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"c40292d16fe6ce13b04c014682fac0a5b852c2bf","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        for opt, val in ml2_opts.items():"},{"line_number":58,"context_line":"            ml2_config.cfg.CONF.set_override(opt, val, \u0027ml2\u0027)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        self.addCleanup(ml2_config.cfg.CONF.reset)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        def mocked_fslsdn_init(self):"},{"line_number":63,"context_line":"            self._driver \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":13,"id":"3ae8d1ca_6f2564c1","line":60,"in_reply_to":"3ae8d1ca_86db80ec","updated":"2014-05-28 11:34:58.000000000","message":"okay","commit_id":"fe3c4f3f90ebb71bf42209c641e48707772f2605"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"24cf40363e4742d6900b94fbf7053357ffff87ec","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"# @author: Trinath Somanchi (trinath.somanchi@freescale.com)"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import mock"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from oslo.config import cfg"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3ae8d1ca_1b179ba4","line":18,"updated":"2014-05-29 09:52:55.000000000","message":"nit: blank line is unnecessary.","commit_id":"008dc7e9aba95fdda2dccb3b1206ff65c29376e2"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"9a5668c6db64857bba20a1cf51669764c52a0ae4","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"# @author: Trinath Somanchi (trinath.somanchi@freescale.com)"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import mock"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from oslo.config import cfg"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3ae8d1ca_fe4bbd84","line":18,"in_reply_to":"3ae8d1ca_1b179ba4","updated":"2014-05-29 10:08:07.000000000","message":"will remove the same","commit_id":"008dc7e9aba95fdda2dccb3b1206ff65c29376e2"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"fc6b73d57eb9d892085676b9d3ba6516450bcaaf","unresolved":false,"context_lines":[{"line_number":16,"context_line":"# @author: Trinath Somanchi (trinath.somanchi@freescale.com)"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import mock"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from oslo.config import cfg"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from neutron.extensions import portbindings"}],"source_content_type":"text/x-python","patch_set":17,"id":"3ae8d1ca_a122f8fe","line":19,"updated":"2014-05-29 11:12:31.000000000","message":"it is not still updated.","commit_id":"00f16dfac34094806eae1dd138acbed1d755b3be"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"312c8729b6440984089c7bdd9fd190d66fad5f0e","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        cfg.CONF.set_override(\u0027mechanism_drivers\u0027, [\u0027fslsdn\u0027], \u0027ml2\u0027)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        def mocked_fslsdn_init(self):"},{"line_number":40,"context_line":"            self._driver \u003d mock.MagicMock()"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        with mock.patch.object(mechanism_fslsdn.FslsdnMechanismDriver,"},{"line_number":43,"context_line":"                               \u0027initialize\u0027, new\u003dmocked_fslsdn_init):"}],"source_content_type":"text/x-python","patch_set":22,"id":"1ae5cdf2_5f5c74ed","line":40,"updated":"2014-06-04 03:01:29.000000000","message":"Where is self._driver used? I don\u0027t see self._driver in FSLSDN MD class. What happens?","commit_id":"256fd2adde36414c955610852d23224270404110"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"4cc6a3132da925292789f65821642f9daec65843","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        cfg.CONF.set_override(\u0027mechanism_drivers\u0027, [\u0027fslsdn\u0027], \u0027ml2\u0027)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        def mocked_fslsdn_init(self):"},{"line_number":40,"context_line":"            self._driver \u003d mock.MagicMock()"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        with mock.patch.object(mechanism_fslsdn.FslsdnMechanismDriver,"},{"line_number":43,"context_line":"                               \u0027initialize\u0027, new\u003dmocked_fslsdn_init):"}],"source_content_type":"text/x-python","patch_set":22,"id":"1ae5cdf2_153f2d89","line":40,"in_reply_to":"1ae5cdf2_5f5c74ed","updated":"2014-06-04 04:18:12.000000000","message":"Done","commit_id":"256fd2adde36414c955610852d23224270404110"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"312c8729b6440984089c7bdd9fd190d66fad5f0e","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        with mock.patch.object(mechanism_fslsdn.FslsdnMechanismDriver,"},{"line_number":43,"context_line":"                               \u0027initialize\u0027, new\u003dmocked_fslsdn_init):"},{"line_number":44,"context_line":"            super(TestFslSdnMechDriverV2, self).setUp()"},{"line_number":45,"context_line":"            self.driver \u003d mechanism_fslsdn.FslsdnMechanismDriver()"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class TestFslSdnMechDriverNetworksV2(test_db_plugin.TestNetworksV2,"}],"source_content_type":"text/x-python","patch_set":22,"id":"1ae5cdf2_3f1fa85c","line":45,"updated":"2014-06-04 03:01:29.000000000","message":"This test class inherits db plugin test case directly. Where is self.driver here used? Could you explain?","commit_id":"256fd2adde36414c955610852d23224270404110"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"4cc6a3132da925292789f65821642f9daec65843","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        with mock.patch.object(mechanism_fslsdn.FslsdnMechanismDriver,"},{"line_number":43,"context_line":"                               \u0027initialize\u0027, new\u003dmocked_fslsdn_init):"},{"line_number":44,"context_line":"            super(TestFslSdnMechDriverV2, self).setUp()"},{"line_number":45,"context_line":"            self.driver \u003d mechanism_fslsdn.FslsdnMechanismDriver()"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class TestFslSdnMechDriverNetworksV2(test_db_plugin.TestNetworksV2,"}],"source_content_type":"text/x-python","patch_set":22,"id":"1ae5cdf2_7574f167","line":45,"in_reply_to":"1ae5cdf2_3f1fa85c","updated":"2014-06-04 04:18:12.000000000","message":"True said. self._crdclient need to be setup for this. Will update the same.","commit_id":"256fd2adde36414c955610852d23224270404110"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"312c8729b6440984089c7bdd9fd190d66fad5f0e","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                               \u0027initialize\u0027, new\u003dmocked_fslsdn_init):"},{"line_number":44,"context_line":"            super(TestFslSdnMechDriverV2, self).setUp()"},{"line_number":45,"context_line":"            self.driver \u003d mechanism_fslsdn.FslsdnMechanismDriver()"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class TestFslSdnMechDriverNetworksV2(test_db_plugin.TestNetworksV2,"},{"line_number":49,"context_line":"                                     TestFslSdnMechDriverV2):"}],"source_content_type":"text/x-python","patch_set":22,"id":"1ae5cdf2_1fa90c91","line":46,"updated":"2014-06-04 03:01:29.000000000","message":"Test cases below just calls FSL MD methods but FSL MD methods are not tested. In addition, self._crdclient is not initialized (because initialize method is mocked above), so I guess all *_precommit/postcommit methods will fail and errors will be captured by ML2 main code.\n\nI would suggest the following:\n- to test FSL MD itself\n- to check FSL MD pre/postcommit methods are called as expected if you use ML2 plugin-level testcases like below.","commit_id":"256fd2adde36414c955610852d23224270404110"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ae47de13011105ca066cb7e7e8c6f15e909c42c1","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                               \u0027initialize\u0027, new\u003dmocked_fslsdn_init):"},{"line_number":44,"context_line":"            super(TestFslSdnMechDriverV2, self).setUp()"},{"line_number":45,"context_line":"            self.driver \u003d mechanism_fslsdn.FslsdnMechanismDriver()"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class TestFslSdnMechDriverNetworksV2(test_db_plugin.TestNetworksV2,"},{"line_number":49,"context_line":"                                     TestFslSdnMechDriverV2):"}],"source_content_type":"text/x-python","patch_set":22,"id":"1ae5cdf2_a000cb34","line":46,"in_reply_to":"1ae5cdf2_150d6de9","updated":"2014-06-05 08:18:32.000000000","message":"postcommit method prepare body of REST and calls crdclient methods. My question is how you can ensure these methods are correctly called and they have correct request body. This is my point and IMO they should be tested even though some mechanism driver implementation using REST API calls to external controllers lack these types of tests. A way I think it is better is to write a test just for mechanism driver.\n\nIf other reviewers don\u0027t think it is not a blocking issue, I am okay (i.e., I don\u0027t give negative score to the review).\n\nHowever, you need to keep in my mind if you change a bit detail inside the mechanism driver itself in the future you will be requested to have corresponding tests to cover the change.","commit_id":"256fd2adde36414c955610852d23224270404110"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"4cc6a3132da925292789f65821642f9daec65843","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                               \u0027initialize\u0027, new\u003dmocked_fslsdn_init):"},{"line_number":44,"context_line":"            super(TestFslSdnMechDriverV2, self).setUp()"},{"line_number":45,"context_line":"            self.driver \u003d mechanism_fslsdn.FslsdnMechanismDriver()"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class TestFslSdnMechDriverNetworksV2(test_db_plugin.TestNetworksV2,"},{"line_number":49,"context_line":"                                     TestFslSdnMechDriverV2):"}],"source_content_type":"text/x-python","patch_set":22,"id":"1ae5cdf2_150d6de9","line":46,"in_reply_to":"1ae5cdf2_1fa90c91","updated":"2014-06-04 04:18:12.000000000","message":"In my unit testing none have failed.\n\nCan you point me with the existing MD test cases where MD is itself tested. Since, MD\u0027s are called with ML2 Plugin, the testcases like test_plugin.TestNetworksV2, test_plugin.TestPortsV2 are used to test the MD.\n\nIs there an thing more I need to do for Pre and Post commit method testing MD itself.","commit_id":"256fd2adde36414c955610852d23224270404110"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"16269073702eecb172242651b01d2336eeeda9fd","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                               \u0027initialize\u0027, new\u003dmocked_fslsdn_init):"},{"line_number":44,"context_line":"            super(TestFslSdnMechDriverV2, self).setUp()"},{"line_number":45,"context_line":"            self.driver \u003d mechanism_fslsdn.FslsdnMechanismDriver()"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class TestFslSdnMechDriverNetworksV2(test_db_plugin.TestNetworksV2,"},{"line_number":49,"context_line":"                                     TestFslSdnMechDriverV2):"}],"source_content_type":"text/x-python","patch_set":22,"id":"1ae5cdf2_3b7cea71","line":46,"in_reply_to":"1ae5cdf2_a000cb34","updated":"2014-06-05 08:28:21.000000000","message":"Okay. You mean, Testing the mechanism driver methods, like preparing a fake dict and calling the mechanism driver methods with arguments.\n\nBut then, CRD Client will be mocked there, so though you call the function from MD, its just ends mocked.","commit_id":"256fd2adde36414c955610852d23224270404110"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f8870556fb86e8132d66bb903427e97257a58d44","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                                  TestFslSdnMechDriverV2):"},{"line_number":65,"context_line":"    VIF_TYPE \u003d portbindings.VIF_TYPE_OVS"},{"line_number":66,"context_line":"    CAP_PORT_FILTER \u003d True"},{"line_number":67,"context_line":"    pass"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"class TestFslSdnMechDriverSubnetsV2(test_db_plugin.TestSubnetsV2,"}],"source_content_type":"text/x-python","patch_set":25,"id":"1ae5cdf2_403b87ea","line":67,"updated":"2014-06-05 08:31:28.000000000","message":"(suggestion only) \u0027pass\u0027 is actually unnecessary.","commit_id":"1b9ee31847b4d5255b2251aa9f33418322f8160f"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"4b4e290176b76397d3abfff0dcd97d93ffbc8884","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    pass"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"class TestFslSdnMechanismDriver(base.BaseTestCase):"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    \"\"\"Testing FSL SDN Mechanism driver.\"\"\""},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"1ae5cdf2_983cf6c9","line":78,"updated":"2014-06-06 10:57:45.000000000","message":"Consider tests for the _prepare_cdr_* methods, to make sure they form the correct dictionaries.","commit_id":"8a50113eae0e4d7276230bcff9b4c3bbdd04a001"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"4224b299cbbf85caa0f23ab08fc14cb2125b66bc","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    pass"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"class TestFslSdnMechanismDriver(base.BaseTestCase):"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    \"\"\"Testing FSL SDN Mechanism driver.\"\"\""},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"1ae5cdf2_765c9b7d","line":78,"in_reply_to":"1ae5cdf2_3631335a","updated":"2014-06-06 12:09:18.000000000","message":"True said. I have updated L215 now.","commit_id":"8a50113eae0e4d7276230bcff9b4c3bbdd04a001"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"5b3543e54afb8c4ade6542039d05abf98735ebe5","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    pass"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"class TestFslSdnMechanismDriver(base.BaseTestCase):"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    \"\"\"Testing FSL SDN Mechanism driver.\"\"\""},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"1ae5cdf2_3631335a","line":78,"in_reply_to":"1ae5cdf2_3653f317","updated":"2014-06-06 12:05:04.000000000","message":"The point I\u0027m getting at is... if you have a UT that checks the prepare, and it provided dns_nameservers and not host_routes, it would have exposed the programming error on L215.","commit_id":"8a50113eae0e4d7276230bcff9b4c3bbdd04a001"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"5591f0baae6d21a256817801d6cb89440867ffe0","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    pass"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"class TestFslSdnMechanismDriver(base.BaseTestCase):"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    \"\"\"Testing FSL SDN Mechanism driver.\"\"\""},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"1ae5cdf2_3653f317","line":78,"in_reply_to":"1ae5cdf2_5bc988aa","updated":"2014-06-06 11:52:33.000000000","message":"line 215 is updated. its not dns_nameservers, its host_routes.","commit_id":"8a50113eae0e4d7276230bcff9b4c3bbdd04a001"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"1fdb5761971ba7c4292973e90680fac65ee9a99f","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    pass"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"class TestFslSdnMechanismDriver(base.BaseTestCase):"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    \"\"\"Testing FSL SDN Mechanism driver.\"\"\""},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"1ae5cdf2_f8425aa9","line":78,"in_reply_to":"1ae5cdf2_983cf6c9","updated":"2014-06-06 11:09:57.000000000","message":"okay. \nYou mean to have tests for \n[1] _prepare_crd_network\n[2] _prepare_crd_subnet\n[3] _prepare_crd_port.\n\nwith assertEqual ?","commit_id":"8a50113eae0e4d7276230bcff9b4c3bbdd04a001"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"3ba3ab0c4ab95d014892b2e6ab057992d828f500","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    pass"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"class TestFslSdnMechanismDriver(base.BaseTestCase):"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    \"\"\"Testing FSL SDN Mechanism driver.\"\"\""},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"1ae5cdf2_5bc988aa","line":78,"in_reply_to":"1ae5cdf2_f8425aa9","updated":"2014-06-06 11:29:27.000000000","message":"Yes, mostly because the _prepare_crd_ports() has conditional logic.\n\nCase in point, if my comment on line 215 of that file is correct, then it may try to add subnet host_routes to the info, when they don\u0027t exist  (IOW, write a UT that calls _prepare_crd_ports with dns_nameservers set, but host_routes not set in subnet - it should raise an exception).","commit_id":"8a50113eae0e4d7276230bcff9b4c3bbdd04a001"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"6e37964018cd66821e8b07ba8dbba610e050ecd8","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        net_id \u003d network[\u0027id\u0027]"},{"line_number":100,"context_line":"        req \u003d self.driver._prepare_crd_network(network, segments)"},{"line_number":101,"context_line":"        # test crd network dict"},{"line_number":102,"context_line":"        self.assertEqual(req[\u0027network\u0027][\u0027network_id\u0027], network_id)"},{"line_number":103,"context_line":"        self.assertEqual(req[\u0027network\u0027][\u0027tenant_id\u0027], tenant_id)"},{"line_number":104,"context_line":"        self.assertEqual(req[\u0027network\u0027][\u0027name\u0027], \u0027FakeNetwork\u0027)"},{"line_number":105,"context_line":"        self.assertEqual(req[\u0027network\u0027][\u0027status\u0027], \u0027ACTIVE\u0027)"}],"source_content_type":"text/x-python","patch_set":27,"id":"1ae5cdf2_716f45fc","line":102,"updated":"2014-06-06 12:39:51.000000000","message":"For all the asserts, the expected value should be first.  You may want to create an \"expected\" dict and then just do an assert of the two dicts.","commit_id":"3bfa87bd043899e5b730e501439cf2619f5c0ab4"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"6e37964018cd66821e8b07ba8dbba610e050ecd8","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        subnet_id \u003d subnet[\u0027id\u0027]"},{"line_number":130,"context_line":"        req \u003d self.driver._prepare_crd_subnet(subnet)"},{"line_number":131,"context_line":"        # test crd subnet dict"},{"line_number":132,"context_line":"        self.assertEqual(req[\u0027subnet\u0027][\u0027subnet_id\u0027], subnet_id)"},{"line_number":133,"context_line":"        self.assertEqual(req[\u0027subnet\u0027][\u0027tenant_id\u0027], tenant_id)"},{"line_number":134,"context_line":"        self.assertEqual(req[\u0027subnet\u0027][\u0027name\u0027], \u0027FakeSubnet\u0027)"},{"line_number":135,"context_line":"        self.assertEqual(req[\u0027subnet\u0027][\u0027network_id\u0027], network_id)"}],"source_content_type":"text/x-python","patch_set":27,"id":"1ae5cdf2_4c563007","line":132,"updated":"2014-06-06 12:39:51.000000000","message":"Please make separate test cases to test the _prepare_csr_* methods. This way you can call it with different parameters and test the conditional logic in the prepare methods.\n\nFor example, checking _prepare_csr_subnet() with and without dns_nameservers, allocation_pools, and host_routes.\n\nThis allows for better test isolation.","commit_id":"3bfa87bd043899e5b730e501439cf2619f5c0ab4"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"6ad2240a6e797d0d42781cfdc73eb7e8a9a0eaf6","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        # Test crd port dict"},{"line_number":180,"context_line":"        self.assertEqual(expected_crd_port, req)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        # Test with empty fixed IP"},{"line_number":183,"context_line":"        port_context \u003d self._get_port_context(tenant_id, network_id, port_id,"},{"line_number":184,"context_line":"                                              empty_fips)"},{"line_number":185,"context_line":"        port \u003d port_context.current"}],"source_content_type":"text/x-python","patch_set":28,"id":"1ae5cdf2_f0efc6e7","line":182,"updated":"2014-06-06 16:45:22.000000000","message":"You have much better coverage now.  Good job\n\nYou can improve test isolation, by pulling the prepare tests out to separate test cases:\n\n    test_prepare_port_with_single_ip(self):\n        expected \u003d {...}\n        port \u003d ...\n        req \u003d self.driver._prepare_crd_port(port)\n        self.assertEqual(expected, req)\n\nYou can have one for each condition, thereby testing of that method, from testing of postcommit functions.","commit_id":"fa0f65c3fbd9d9b56df4e7e347bea65150977cd1"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"d71c03c59e421e0c076406781e2c1ec693d1b8af","unresolved":false,"context_lines":[{"line_number":193,"context_line":"                              \u0027admin_state_up\u0027: True, \u0027status\u0027: \u0027ACTIVE\u0027,"},{"line_number":194,"context_line":"                              \u0027device_owner\u0027: \u0027compute\u0027,"},{"line_number":195,"context_line":"                              \u0027security_groups\u0027: \u0027\u0027}}"},{"line_number":196,"context_line":"        # Test with empty fixed IP"},{"line_number":197,"context_line":"        port_context \u003d self._get_port_context(tenant_id, network_id, port_id,"},{"line_number":198,"context_line":"                                              empty_fips)"},{"line_number":199,"context_line":"        port \u003d port_context.current"}],"source_content_type":"text/x-python","patch_set":29,"id":"1ae5cdf2_aeaf9a93","line":196,"updated":"2014-06-06 21:29:29.000000000","message":"Much better test case. You don\u0027t need the comments on line 196, 201.","commit_id":"87576308bc80dfce8f7737e9f5c04493fe07197a"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"d71c03c59e421e0c076406781e2c1ec693d1b8af","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        tenant_id \u003d \u0027test\u0027"},{"line_number":208,"context_line":"        network_id \u003d \u0027123\u0027"},{"line_number":209,"context_line":"        port_id \u003d \u0027453\u0027"},{"line_number":210,"context_line":"        # single fixed ip"},{"line_number":211,"context_line":"        fips \u003d [{\"subnet_id\": \"sub-1\", \"ip_address\": \"10.0.0.1\"}]"},{"line_number":212,"context_line":"        expected_crd_port \u003d {\u0027port\u0027:"},{"line_number":213,"context_line":"                             {\u0027port_id\u0027: port_id, \u0027tenant_id\u0027: tenant_id,"}],"source_content_type":"text/x-python","patch_set":29,"id":"1ae5cdf2_ae86ba11","line":210,"updated":"2014-06-06 21:29:29.000000000","message":"Same with these comments, because your function name describes the test case.","commit_id":"87576308bc80dfce8f7737e9f5c04493fe07197a"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"16558f15706712ce2a21031fd2f8e31cd945e36f","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        tenant_id \u003d \u0027test\u0027"},{"line_number":208,"context_line":"        network_id \u003d \u0027123\u0027"},{"line_number":209,"context_line":"        port_id \u003d \u0027453\u0027"},{"line_number":210,"context_line":"        # single fixed ip"},{"line_number":211,"context_line":"        fips \u003d [{\"subnet_id\": \"sub-1\", \"ip_address\": \"10.0.0.1\"}]"},{"line_number":212,"context_line":"        expected_crd_port \u003d {\u0027port\u0027:"},{"line_number":213,"context_line":"                             {\u0027port_id\u0027: port_id, \u0027tenant_id\u0027: tenant_id,"}],"source_content_type":"text/x-python","patch_set":29,"id":"1ae5cdf2_33020eb5","line":210,"in_reply_to":"1ae5cdf2_ae86ba11","updated":"2014-06-07 01:43:43.000000000","message":"Done","commit_id":"87576308bc80dfce8f7737e9f5c04493fe07197a"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"d71c03c59e421e0c076406781e2c1ec693d1b8af","unresolved":false,"context_lines":[{"line_number":233,"context_line":"        tenant_id \u003d \u0027test\u0027"},{"line_number":234,"context_line":"        network_id \u003d \u0027123\u0027"},{"line_number":235,"context_line":"        port_id \u003d \u0027453\u0027"},{"line_number":236,"context_line":"        # multiple fixed ips"},{"line_number":237,"context_line":"        multiple_fips \u003d [{\"subnet_id\": \"sub-1\", \"ip_address\": \"10.0.0.1\"},"},{"line_number":238,"context_line":"                         {\"subnet_id\": \"sub-1\", \"ip_address\": \"10.0.0.4\"}]"},{"line_number":239,"context_line":"        expected_crd_port \u003d {\u0027port\u0027:"}],"source_content_type":"text/x-python","patch_set":29,"id":"1ae5cdf2_ee77e239","line":236,"updated":"2014-06-06 21:29:29.000000000","message":"ditto.","commit_id":"87576308bc80dfce8f7737e9f5c04493fe07197a"},{"author":{"_account_id":8645,"name":"Trinath Somanchi","email":"trinath.somanchi@freescale.com","username":"trinaths"},"change_message_id":"16558f15706712ce2a21031fd2f8e31cd945e36f","unresolved":false,"context_lines":[{"line_number":233,"context_line":"        tenant_id \u003d \u0027test\u0027"},{"line_number":234,"context_line":"        network_id \u003d \u0027123\u0027"},{"line_number":235,"context_line":"        port_id \u003d \u0027453\u0027"},{"line_number":236,"context_line":"        # multiple fixed ips"},{"line_number":237,"context_line":"        multiple_fips \u003d [{\"subnet_id\": \"sub-1\", \"ip_address\": \"10.0.0.1\"},"},{"line_number":238,"context_line":"                         {\"subnet_id\": \"sub-1\", \"ip_address\": \"10.0.0.4\"}]"},{"line_number":239,"context_line":"        expected_crd_port \u003d {\u0027port\u0027:"}],"source_content_type":"text/x-python","patch_set":29,"id":"1ae5cdf2_53ff9aaa","line":236,"in_reply_to":"1ae5cdf2_ee77e239","updated":"2014-06-07 01:43:43.000000000","message":"Done","commit_id":"87576308bc80dfce8f7737e9f5c04493fe07197a"}],"setup.cfg":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9d80e58ea21a1092332b4f905a392b64b117ff44","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        etc/neutron/plugins/ml2/ml2_conf_cisco.ini"},{"line_number":62,"context_line":"        etc/neutron/plugins/bigswitch/restproxy.ini"},{"line_number":63,"context_line":"        etc/neutron/plugins/ml2/ml2_conf_ofa.ini"},{"line_number":64,"context_line":"\tetc/neutron/plugins/ml2/ml2_conf_fslsdn.ini"},{"line_number":65,"context_line":"    etc/neutron/plugins/mlnx \u003d etc/neutron/plugins/mlnx/mlnx_conf.ini"},{"line_number":66,"context_line":"    etc/neutron/plugins/nec \u003d etc/neutron/plugins/nec/nec.ini"},{"line_number":67,"context_line":"    etc/neutron/plugins/nicira \u003d etc/neutron/plugins/nicira/nvp.ini"}],"source_content_type":"text/x-ttcn-cfg","patch_set":2,"id":"AAAAVn%2F%2FgzY%3D","line":64,"updated":"2014-03-05 17:45:50.000000000","message":"Replace a tab with spaces.","commit_id":"e188e9b72246a24b3608f716ac31810f8ee9e7f8"}]}
