)]}'
{"specs/kilo/approved/nova-neutron-refactor.rst":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0189940d910e10b65412ee7abea87bcac0e0b44f","unresolved":false,"context_lines":[{"line_number":82,"context_line":"rewrite. However, the existing implementation and API definition serve"},{"line_number":83,"context_line":"as a starting point and requirements reference. To avoid obstacles"},{"line_number":84,"context_line":"endemic to refactoring the current implementation in-place, this"},{"line_number":85,"context_line":"refactor will be appear as a forked re-implementation that replaces the"},{"line_number":86,"context_line":"current version through configuration."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"This refactor internally separates operations that are logically quite"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9aa7fdbe_1f99bd78","line":85,"range":{"start_line":85,"start_character":29,"end_line":85,"end_character":53},"updated":"2014-10-28 17:19:47.000000000","message":"Note that this sounds at first like a bad idea: reimplement $thing instead of improve $thing. However, after spending enough time in that code to get a feel for it, I honestly think that starting from scratch is the only way to substantially improve what we have.\n\nSo, +1 from me on this approach.","commit_id":"46142d907d3b22d60b352c75158cdc810dc251f2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0189940d910e10b65412ee7abea87bcac0e0b44f","unresolved":false,"context_lines":[{"line_number":83,"context_line":"as a starting point and requirements reference. To avoid obstacles"},{"line_number":84,"context_line":"endemic to refactoring the current implementation in-place, this"},{"line_number":85,"context_line":"refactor will be appear as a forked re-implementation that replaces the"},{"line_number":86,"context_line":"current version through configuration."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"This refactor internally separates operations that are logically quite"},{"line_number":89,"context_line":"different but accessed through a single API method"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9aa7fdbe_9f9bed64","line":86,"updated":"2014-10-28 17:19:47.000000000","message":"I\u0027m not sure about this part. I\u0027d hate to introduce a new configuration option that is just for an internal implementation detail. However, maybe we need that in order to get some early feedback from deployers. I guess it depends on whether we see us as being able to slowly use parts of the new implementation in conjunction with the old until the new fully replaces the old.\n\nWould be interested to hear others\u0027 thoughts on this particular detail.","commit_id":"46142d907d3b22d60b352c75158cdc810dc251f2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0189940d910e10b65412ee7abea87bcac0e0b44f","unresolved":false,"context_lines":[{"line_number":93,"context_line":"to allow API implementation to focus on logic instead of details of the"},{"line_number":94,"context_line":"Neutron REST API. The refactor will also address remaining mismatches"},{"line_number":95,"context_line":"between current Nova practices (e.g. using objects instead of"},{"line_number":96,"context_line":"dictionairies) reducing the number of Neutron specific cases in Nova."},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"The refactor also introduces data model changes to support Nova/Neutron"},{"line_number":99,"context_line":"interoperability and future networking features. Changes to the Network"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9aa7fdbe_ffc23932","line":96,"updated":"2014-10-28 17:19:47.000000000","message":"\"dictionaries\" is misspelled","commit_id":"46142d907d3b22d60b352c75158cdc810dc251f2"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"ae54ef587096712ce73e33a26376421b6a0c9d81","unresolved":false,"context_lines":[{"line_number":93,"context_line":"to allow API implementation to focus on logic instead of details of the"},{"line_number":94,"context_line":"Neutron REST API. The refactor will also address remaining mismatches"},{"line_number":95,"context_line":"between current Nova practices (e.g. using objects instead of"},{"line_number":96,"context_line":"dictionairies) reducing the number of Neutron specific cases in Nova."},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"The refactor also introduces data model changes to support Nova/Neutron"},{"line_number":99,"context_line":"interoperability and future networking features. Changes to the Network"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9aa7fdbe_84464179","line":96,"in_reply_to":"9aa7fdbe_ffc23932","updated":"2014-10-28 19:05:49.000000000","message":"Done","commit_id":"46142d907d3b22d60b352c75158cdc810dc251f2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0189940d910e10b65412ee7abea87bcac0e0b44f","unresolved":false,"context_lines":[{"line_number":166,"context_line":"extension of networking related items. Data that is currently stored"},{"line_number":167,"context_line":"directly in instances or related metadata will be extracted to the new"},{"line_number":168,"context_line":"model. Existing network API implementations will be adapted to use these"},{"line_number":169,"context_line":"changes."},{"line_number":170,"context_line":""},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"REST API impact"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9aa7fdbe_9fd3edd3","line":169,"updated":"2014-10-28 17:19:47.000000000","message":"I know this may be laborious, but we normally like to see at least examples of the affected models here. Can you share examples or references?","commit_id":"46142d907d3b22d60b352c75158cdc810dc251f2"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"ae54ef587096712ce73e33a26376421b6a0c9d81","unresolved":false,"context_lines":[{"line_number":166,"context_line":"extension of networking related items. Data that is currently stored"},{"line_number":167,"context_line":"directly in instances or related metadata will be extracted to the new"},{"line_number":168,"context_line":"model. Existing network API implementations will be adapted to use these"},{"line_number":169,"context_line":"changes."},{"line_number":170,"context_line":""},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"REST API impact"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9aa7fdbe_84000167","line":169,"in_reply_to":"9aa7fdbe_9fd3edd3","updated":"2014-10-28 19:05:49.000000000","message":"I\u0027m going to revise this to indicate no planned data model changes at this time. The persistent data model aberrations that I was concerned about were resolved during the Juno refactoring. Other things I had in mind were simply remotable objects and again, either they have already been done or there are current patches in flight as part of the kilo-objects effort.","commit_id":"46142d907d3b22d60b352c75158cdc810dc251f2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b2a130931d9d1bd89819d73f753e7ab9ca4d0fdd","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"https://blueprints.launchpad.net/nova/+spec/nova-neutron-refactor"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Through accretion, the Network API adapter for Neutron has become"},{"line_number":16,"context_line":"prohibitively difficult to maintain, debug and extend. In order to"},{"line_number":17,"context_line":"improve interoperability of Nova and Neutron, this code must be"},{"line_number":18,"context_line":"refactored to:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a8c0949_961ab715","line":15,"updated":"2014-11-03 08:00:50.000000000","message":"accretion - thanks for making me use a thesaurus today. :)","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"b9fab210edada6b2b632b7e24938fbba14f31300","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"https://blueprints.launchpad.net/nova/+spec/nova-neutron-refactor"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Through accretion, the Network API adapter for Neutron has become"},{"line_number":16,"context_line":"prohibitively difficult to maintain, debug and extend. In order to"},{"line_number":17,"context_line":"improve interoperability of Nova and Neutron, this code must be"},{"line_number":18,"context_line":"refactored to:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3a961159_c05fb23f","line":15,"in_reply_to":"7a8c0949_961ab715","updated":"2014-12-11 16:16:01.000000000","message":"You\u0027re welcome!","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b2a130931d9d1bd89819d73f753e7ab9ca4d0fdd","unresolved":false,"context_lines":[{"line_number":33,"context_line":"and is direct descendant of `nova.network.base_api.NetworkAPI`. The"},{"line_number":34,"context_line":"implementation code has some issues:"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"* The implementation of critical principle methods are large and"},{"line_number":37,"context_line":"  monolithic including a large number of potential code paths. Besides"},{"line_number":38,"context_line":"  implementation, this makes it very difficult to create and maintain"},{"line_number":39,"context_line":"  effective unit tests."}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a8c0949_f6d85b55","line":36,"updated":"2014-11-03 08:00:50.000000000","message":"e.g. allocate_for_instance","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b2a130931d9d1bd89819d73f753e7ab9ca4d0fdd","unresolved":false,"context_lines":[{"line_number":38,"context_line":"  implementation, this makes it very difficult to create and maintain"},{"line_number":39,"context_line":"  effective unit tests."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"* Data type and organization were simply extended to accommodate new"},{"line_number":42,"context_line":"  requirements as opposed to transforming to more appropriate types."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"* Neutron client API calls are accompanied by try/catch blocks that must"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a8c0949_16dec73f","line":41,"updated":"2014-11-03 08:00:50.000000000","message":"example would be useful","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b2a130931d9d1bd89819d73f753e7ab9ca4d0fdd","unresolved":false,"context_lines":[{"line_number":41,"context_line":"* Data type and organization were simply extended to accommodate new"},{"line_number":42,"context_line":"  requirements as opposed to transforming to more appropriate types."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"* Neutron client API calls are accompanied by try/catch blocks that must"},{"line_number":45,"context_line":"  be translated to Nova exceptions. As features have been added, this"},{"line_number":46,"context_line":"  code has been duplicated over several methods, increasing the risk"},{"line_number":47,"context_line":"  that a translation will be missed."}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a8c0949_36e3c308","line":44,"updated":"2014-11-03 08:00:50.000000000","message":"Simple example would be good, I think I added try/catch for show_port but this is definitely a pervasive issue in the neutron v2 API - we\u0027re plenty exposed to getting NeutronClientException raised back up through to the compute API.","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"b9fab210edada6b2b632b7e24938fbba14f31300","unresolved":false,"context_lines":[{"line_number":41,"context_line":"* Data type and organization were simply extended to accommodate new"},{"line_number":42,"context_line":"  requirements as opposed to transforming to more appropriate types."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"* Neutron client API calls are accompanied by try/catch blocks that must"},{"line_number":45,"context_line":"  be translated to Nova exceptions. As features have been added, this"},{"line_number":46,"context_line":"  code has been duplicated over several methods, increasing the risk"},{"line_number":47,"context_line":"  that a translation will be missed."}],"source_content_type":"text/x-rst","patch_set":2,"id":"3a961159_404ca29e","line":44,"in_reply_to":"7a8c0949_36e3c308","updated":"2014-12-11 16:16:01.000000000","message":"Sorry (again) Matt, get this in the next update.","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b2a130931d9d1bd89819d73f753e7ab9ca4d0fdd","unresolved":false,"context_lines":[{"line_number":46,"context_line":"  code has been duplicated over several methods, increasing the risk"},{"line_number":47,"context_line":"  that a translation will be missed."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"* Certain APIs methods have become entry points for logically divergent"},{"line_number":50,"context_line":"  operations (i.e. candy machine interfaces). This is easily"},{"line_number":51,"context_line":"  identifiable by the complexity and size of their implementation."},{"line_number":52,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a8c0949_76e46b0d","line":49,"updated":"2014-11-03 08:00:50.000000000","message":"example would be good","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"b9fab210edada6b2b632b7e24938fbba14f31300","unresolved":false,"context_lines":[{"line_number":46,"context_line":"  code has been duplicated over several methods, increasing the risk"},{"line_number":47,"context_line":"  that a translation will be missed."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"* Certain APIs methods have become entry points for logically divergent"},{"line_number":50,"context_line":"  operations (i.e. candy machine interfaces). This is easily"},{"line_number":51,"context_line":"  identifiable by the complexity and size of their implementation."},{"line_number":52,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"3a961159_c0b17290","line":49,"in_reply_to":"7a8c0949_76e46b0d","updated":"2014-12-11 16:16:01.000000000","message":"Done","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b2a130931d9d1bd89819d73f753e7ab9ca4d0fdd","unresolved":false,"context_lines":[{"line_number":50,"context_line":"  operations (i.e. candy machine interfaces). This is easily"},{"line_number":51,"context_line":"  identifiable by the complexity and size of their implementation."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"* JSON request bodies for the Neutron REST API tend to be constructed"},{"line_number":54,"context_line":"  in-place and repeatedly throughout the code. This is error prone,"},{"line_number":55,"context_line":"  difficult and labor intensive to maintain and test. It is also"},{"line_number":56,"context_line":"  difficult for developers with only passing familiar with the Neutron"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a8c0949_16b5e7ed","line":53,"updated":"2014-11-03 08:00:50.000000000","message":"The port request body is by far the most pervasive example, might be good to mention that in the spec.","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"b9fab210edada6b2b632b7e24938fbba14f31300","unresolved":false,"context_lines":[{"line_number":50,"context_line":"  operations (i.e. candy machine interfaces). This is easily"},{"line_number":51,"context_line":"  identifiable by the complexity and size of their implementation."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"* JSON request bodies for the Neutron REST API tend to be constructed"},{"line_number":54,"context_line":"  in-place and repeatedly throughout the code. This is error prone,"},{"line_number":55,"context_line":"  difficult and labor intensive to maintain and test. It is also"},{"line_number":56,"context_line":"  difficult for developers with only passing familiar with the Neutron"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3a961159_40be6266","line":53,"in_reply_to":"7a8c0949_16b5e7ed","updated":"2014-12-11 16:16:01.000000000","message":"Crap... I missed that one in the update. I\u0027ll have to update again.","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b2a130931d9d1bd89819d73f753e7ab9ca4d0fdd","unresolved":false,"context_lines":[{"line_number":53,"context_line":"* JSON request bodies for the Neutron REST API tend to be constructed"},{"line_number":54,"context_line":"  in-place and repeatedly throughout the code. This is error prone,"},{"line_number":55,"context_line":"  difficult and labor intensive to maintain and test. It is also"},{"line_number":56,"context_line":"  difficult for developers with only passing familiar with the Neutron"},{"line_number":57,"context_line":"  API to identify errors and modify code."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":".. note::"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a8c0949_b6eed3ea","line":56,"updated":"2014-11-03 08:00:50.000000000","message":"s/familiar/familiarity/","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"b9fab210edada6b2b632b7e24938fbba14f31300","unresolved":false,"context_lines":[{"line_number":53,"context_line":"* JSON request bodies for the Neutron REST API tend to be constructed"},{"line_number":54,"context_line":"  in-place and repeatedly throughout the code. This is error prone,"},{"line_number":55,"context_line":"  difficult and labor intensive to maintain and test. It is also"},{"line_number":56,"context_line":"  difficult for developers with only passing familiar with the Neutron"},{"line_number":57,"context_line":"  API to identify errors and modify code."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":".. note::"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3a961159_e0874eb3","line":56,"in_reply_to":"7a8c0949_b6eed3ea","updated":"2014-12-11 16:16:01.000000000","message":"Done","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b2a130931d9d1bd89819d73f753e7ab9ca4d0fdd","unresolved":false,"context_lines":[{"line_number":65,"context_line":"Use Cases"},{"line_number":66,"context_line":"----------"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"None."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Project Priority"},{"line_number":71,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a8c0949_36bae3de","line":68,"updated":"2014-11-03 08:00:50.000000000","message":"I think the use case section is looking for something like this:\n\n\"As a developer, I want to be able to easily update and unit test the Neutron v2 API without risking the regression of large complicated monolithic critical function.\"","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"b9fab210edada6b2b632b7e24938fbba14f31300","unresolved":false,"context_lines":[{"line_number":65,"context_line":"Use Cases"},{"line_number":66,"context_line":"----------"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"None."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Project Priority"},{"line_number":71,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3a961159_c08a52be","line":68,"in_reply_to":"7a8c0949_36bae3de","updated":"2014-12-11 16:16:01.000000000","message":"Done","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"92bed6276c7104503ffc330c012be13a6999b292","unresolved":false,"context_lines":[{"line_number":65,"context_line":"Use Cases"},{"line_number":66,"context_line":"----------"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"None."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Project Priority"},{"line_number":71,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a890539_0de35fa4","line":68,"in_reply_to":"7a8c0949_36bae3de","updated":"2014-11-26 09:59:19.000000000","message":"That\u0027s exactly my use case.","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b2a130931d9d1bd89819d73f753e7ab9ca4d0fdd","unresolved":false,"context_lines":[{"line_number":70,"context_line":"Project Priority"},{"line_number":71,"context_line":"-----------------"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"This effort falls under the stability category."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"Proposed change"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a8c0949_56ce8f84","line":73,"updated":"2014-11-03 08:00:50.000000000","message":"Yeah, it\u0027s really technical debt at this point which is a key theme for Kilo.","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"b9fab210edada6b2b632b7e24938fbba14f31300","unresolved":false,"context_lines":[{"line_number":70,"context_line":"Project Priority"},{"line_number":71,"context_line":"-----------------"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"This effort falls under the stability category."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"Proposed change"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3a961159_a0a2a648","line":73,"in_reply_to":"5a890539_d0de506c","updated":"2014-12-11 16:16:01.000000000","message":"I think I\u0027ve got that covered in the update.","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"92bed6276c7104503ffc330c012be13a6999b292","unresolved":false,"context_lines":[{"line_number":70,"context_line":"Project Priority"},{"line_number":71,"context_line":"-----------------"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"This effort falls under the stability category."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"Proposed change"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a890539_d0de506c","line":73,"in_reply_to":"7a8c0949_56ce8f84","updated":"2014-11-26 09:59:19.000000000","message":"Could you make this section more authoritative now the priorities for Kilo have been decided?","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"92bed6276c7104503ffc330c012be13a6999b292","unresolved":false,"context_lines":[{"line_number":83,"context_line":"as a starting point and requirements reference. To avoid obstacles"},{"line_number":84,"context_line":"endemic to refactoring the current implementation in-place, this"},{"line_number":85,"context_line":"refactor will be appear as a forked re-implementation that replaces the"},{"line_number":86,"context_line":"current version through configuration."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"This refactor internally separates operations that are logically quite"},{"line_number":89,"context_line":"different but accessed through a single API method"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a890539_d0c5708e","line":86,"updated":"2014-11-26 09:59:19.000000000","message":"Is it planned that the re-implementation class would extend the original and replace one method at a time?  Another pattern we could use would be that the new class would have an instance of the old, delegate calls through, and replace delegations with reimplemetations one at a time (the stangling refactor).  I\u0027ve generally had better results with the second way in the past.","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"b9fab210edada6b2b632b7e24938fbba14f31300","unresolved":false,"context_lines":[{"line_number":83,"context_line":"as a starting point and requirements reference. To avoid obstacles"},{"line_number":84,"context_line":"endemic to refactoring the current implementation in-place, this"},{"line_number":85,"context_line":"refactor will be appear as a forked re-implementation that replaces the"},{"line_number":86,"context_line":"current version through configuration."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"This refactor internally separates operations that are logically quite"},{"line_number":89,"context_line":"different but accessed through a single API method"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3a961159_20f7965a","line":86,"in_reply_to":"5a890539_d0c5708e","updated":"2014-12-11 16:16:01.000000000","message":"Agreed.","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"303b826b0a96fba48b01416b9ab15053c71b1597","unresolved":false,"context_lines":[{"line_number":89,"context_line":"different but accessed through a single API method"},{"line_number":90,"context_line":"(e.g. allocate_for_instance)."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"This refactor wraps Neutron client methods in a higher layer abstraction"},{"line_number":93,"context_line":"to allow API implementation to focus on logic instead of details of the"},{"line_number":94,"context_line":"Neutron REST API. The refactor will also address remaining mismatches"},{"line_number":95,"context_line":"between current Nova practices (e.g. using objects instead of"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a8c0949_35ac5d35","line":92,"updated":"2014-11-07 09:56:11.000000000","message":"If I haven\u0027t already said it somewhere else (reviewed it several days ago), wrapping the client would/should also allow us to cleanly add a translation function for error handling so we don\u0027t have the gabillion try/except blocks all over the neutron API code where NeutronClientException is handled and turned into NovaException (which we have large gaps in the current API).","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"b9fab210edada6b2b632b7e24938fbba14f31300","unresolved":false,"context_lines":[{"line_number":89,"context_line":"different but accessed through a single API method"},{"line_number":90,"context_line":"(e.g. allocate_for_instance)."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"This refactor wraps Neutron client methods in a higher layer abstraction"},{"line_number":93,"context_line":"to allow API implementation to focus on logic instead of details of the"},{"line_number":94,"context_line":"Neutron REST API. The refactor will also address remaining mismatches"},{"line_number":95,"context_line":"between current Nova practices (e.g. using objects instead of"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3a961159_80e68aae","line":92,"in_reply_to":"3a961159_08be4db4","updated":"2014-12-11 16:16:01.000000000","message":"The exception conversion is something that I took at face value, and I still think it\u0027s valuable. I\u0027d prefer to keep the actual mechanism that does the mapping out of the spec for now.","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"794a4db09616b7eacbecabd2f0997289a29eca5a","unresolved":false,"context_lines":[{"line_number":89,"context_line":"different but accessed through a single API method"},{"line_number":90,"context_line":"(e.g. allocate_for_instance)."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"This refactor wraps Neutron client methods in a higher layer abstraction"},{"line_number":93,"context_line":"to allow API implementation to focus on logic instead of details of the"},{"line_number":94,"context_line":"Neutron REST API. The refactor will also address remaining mismatches"},{"line_number":95,"context_line":"between current Nova practices (e.g. using objects instead of"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3a961159_08be4db4","line":92,"in_reply_to":"5a890539_70311ca1","updated":"2014-12-11 14:05:01.000000000","message":"I think mriedem means there should be a function which handles NeutronClientException -\u003e NovaException conversion, which all API methods can be wrapped with. Maybe a decorator? So that it happens only once in the new API class and when the old code is deleted, it won\u0027t happen there either.","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"92bed6276c7104503ffc330c012be13a6999b292","unresolved":false,"context_lines":[{"line_number":89,"context_line":"different but accessed through a single API method"},{"line_number":90,"context_line":"(e.g. allocate_for_instance)."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"This refactor wraps Neutron client methods in a higher layer abstraction"},{"line_number":93,"context_line":"to allow API implementation to focus on logic instead of details of the"},{"line_number":94,"context_line":"Neutron REST API. The refactor will also address remaining mismatches"},{"line_number":95,"context_line":"between current Nova practices (e.g. using objects instead of"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a890539_70311ca1","line":92,"in_reply_to":"7a8c0949_35ac5d35","updated":"2014-11-26 09:59:19.000000000","message":"Matt, do you mean to wrap the client and use the new wrapper in the refectored API class (ie a new layer)? Or that the new API class should handle the NeutronClientException-\u003eNovaException conversion so that only ever happens in the new API class?  I certainly think it\u0027s good design to avoid leaking Client details from the API, but not sure if you mean an extra layer around the client or not.","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b2a130931d9d1bd89819d73f753e7ab9ca4d0fdd","unresolved":false,"context_lines":[{"line_number":95,"context_line":"between current Nova practices (e.g. using objects instead of"},{"line_number":96,"context_line":"dictionaries) reducing the number of Neutron specific cases in Nova."},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"The refactor also introduces data model changes to support Nova/Neutron"},{"line_number":99,"context_line":"interoperability and future networking features. Changes to the Network"},{"line_number":100,"context_line":"API run-time signatures are expected and are to be incrementally"},{"line_number":101,"context_line":"introduced."}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a8c0949_f68dbb32","line":98,"updated":"2014-11-03 08:00:50.000000000","message":"The data model impact section says there aren\u0027t any and should be avoided.","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"b9fab210edada6b2b632b7e24938fbba14f31300","unresolved":false,"context_lines":[{"line_number":95,"context_line":"between current Nova practices (e.g. using objects instead of"},{"line_number":96,"context_line":"dictionaries) reducing the number of Neutron specific cases in Nova."},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"The refactor also introduces data model changes to support Nova/Neutron"},{"line_number":99,"context_line":"interoperability and future networking features. Changes to the Network"},{"line_number":100,"context_line":"API run-time signatures are expected and are to be incrementally"},{"line_number":101,"context_line":"introduced."}],"source_content_type":"text/x-rst","patch_set":2,"id":"3a961159_a0b386e7","line":98,"in_reply_to":"5a890539_9b6f89c3","updated":"2014-12-11 16:16:01.000000000","message":"Done","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"92bed6276c7104503ffc330c012be13a6999b292","unresolved":false,"context_lines":[{"line_number":95,"context_line":"between current Nova practices (e.g. using objects instead of"},{"line_number":96,"context_line":"dictionaries) reducing the number of Neutron specific cases in Nova."},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"The refactor also introduces data model changes to support Nova/Neutron"},{"line_number":99,"context_line":"interoperability and future networking features. Changes to the Network"},{"line_number":100,"context_line":"API run-time signatures are expected and are to be incrementally"},{"line_number":101,"context_line":"introduced."}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a890539_9b6f89c3","line":98,"in_reply_to":"7a8c0949_f68dbb32","updated":"2014-11-26 09:59:19.000000000","message":"Agree (with \u0027should be avoided\u0027).  It\u0027s not safe to alter behaviour/data as part of a \u0027refactor\u0027.","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"303b826b0a96fba48b01416b9ab15053c71b1597","unresolved":false,"context_lines":[{"line_number":100,"context_line":"API run-time signatures are expected and are to be incrementally"},{"line_number":101,"context_line":"introduced."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"Consideration will be given to extending the functionality of the"},{"line_number":104,"context_line":"existing Neutron API methods and, if necessary, adding new methods."},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a8c0949_752b4594","line":103,"updated":"2014-11-07 09:56:11.000000000","message":"I think this is probably the only way we can move forward on this.  Refactoring the existing API is going to be too difficult.  I think we should extend the existing API and then override the methods we want to work on cleaning up, like allocate_for_instance.  Then we can focus on one piece at a time and anything we haven\u0027t gotten to yet will use the existing API, and maybe we\u0027ll find that we need changes to the neutron API while going through this, i.e. can we get some batching going on so we\u0027re not hitting the neutron API constantly.\n\nExtending the existing API will also allow us to create a non-voting job so we can make sure we\u0027re not breaking anything while working on this.","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"b9fab210edada6b2b632b7e24938fbba14f31300","unresolved":false,"context_lines":[{"line_number":100,"context_line":"API run-time signatures are expected and are to be incrementally"},{"line_number":101,"context_line":"introduced."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"Consideration will be given to extending the functionality of the"},{"line_number":104,"context_line":"existing Neutron API methods and, if necessary, adding new methods."},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3a961159_40b822c8","line":103,"in_reply_to":"5a890539_508a601b","updated":"2014-12-11 16:16:01.000000000","message":"I was initially referring to the neutron client and neutron APIs themselves, not the networking API that nova consumes. That\u0027s out of scope for nova of course, but thought it was worth mentioning. That being said, I guess the comment does quite strongly apply to nova\u0027s networking API.","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"92bed6276c7104503ffc330c012be13a6999b292","unresolved":false,"context_lines":[{"line_number":100,"context_line":"API run-time signatures are expected and are to be incrementally"},{"line_number":101,"context_line":"introduced."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"Consideration will be given to extending the functionality of the"},{"line_number":104,"context_line":"existing Neutron API methods and, if necessary, adding new methods."},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a890539_508a601b","line":103,"in_reply_to":"7a8c0949_752b4594","updated":"2014-11-26 09:59:19.000000000","message":"Would it be possible/practical to try to stop changes to the API while this work is ongoing?","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"92bed6276c7104503ffc330c012be13a6999b292","unresolved":false,"context_lines":[{"line_number":138,"context_line":"  facing concern, but also general stability and maintainability, which"},{"line_number":139,"context_line":"  is a more widespread benefit. However, neither the code under"},{"line_number":140,"context_line":"  modification nor the dependencies are static and there are typically"},{"line_number":141,"context_line":"  several patches \"in-flight\" at a given moment. The risks of"},{"line_number":142,"context_line":"  regressions, source code conflicts, and complexity of tracking down"},{"line_number":143,"context_line":"  issues balances the benefits of refactoring critical pieces of code."},{"line_number":144,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a890539_fb1a4d6d","line":141,"updated":"2014-11-26 09:59:19.000000000","message":"Could we have a strategy to minimize in-flight fixes?  You can pull up a search with: \n\n    https://review.openstack.org/#/q/project:openstack/nova+status:open+file:nova/network/neutronv2/api.py,n,z\n\nAs I see it, there\u0027s currently a mix of:\n\n(1) in-flight refactorings, which could either be finished (if simple) or abandoned (to be superseded by work on this spec),\n\n(2) objects work, \n\n(3) bug fixes","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"b9fab210edada6b2b632b7e24938fbba14f31300","unresolved":false,"context_lines":[{"line_number":138,"context_line":"  facing concern, but also general stability and maintainability, which"},{"line_number":139,"context_line":"  is a more widespread benefit. However, neither the code under"},{"line_number":140,"context_line":"  modification nor the dependencies are static and there are typically"},{"line_number":141,"context_line":"  several patches \"in-flight\" at a given moment. The risks of"},{"line_number":142,"context_line":"  regressions, source code conflicts, and complexity of tracking down"},{"line_number":143,"context_line":"  issues balances the benefits of refactoring critical pieces of code."},{"line_number":144,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"3a961159_e093ce58","line":141,"in_reply_to":"5a890539_fb1a4d6d","updated":"2014-12-11 16:16:01.000000000","message":"It\u0027s really a bit of a quagmire. I think the best we could do is put a priority on getting the priority refactors (like objects) and bug fixes merged and then put a moratorium on anything but important bug fixes.","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b2a130931d9d1bd89819d73f753e7ab9ca4d0fdd","unresolved":false,"context_lines":[{"line_number":144,"context_line":""},{"line_number":145,"context_line":"* Without the larger context of the expected end result, patches are"},{"line_number":146,"context_line":"  difficult to evaluate. Knowledge of both Nova and Neutron is not"},{"line_number":147,"context_line":"  commonplace, implying a subset of available for reviewers. The"},{"line_number":148,"context_line":"  cross-component nature of the code is also an obstacle to \"getting"},{"line_number":149,"context_line":"  good reviews\". Patches that include all of the relevant context would"},{"line_number":150,"context_line":"  be easier to digest and review effectively."}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a8c0949_d6a19faa","line":147,"updated":"2014-11-03 08:00:50.000000000","message":"s/for/core/?","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"b9fab210edada6b2b632b7e24938fbba14f31300","unresolved":false,"context_lines":[{"line_number":144,"context_line":""},{"line_number":145,"context_line":"* Without the larger context of the expected end result, patches are"},{"line_number":146,"context_line":"  difficult to evaluate. Knowledge of both Nova and Neutron is not"},{"line_number":147,"context_line":"  commonplace, implying a subset of available for reviewers. The"},{"line_number":148,"context_line":"  cross-component nature of the code is also an obstacle to \"getting"},{"line_number":149,"context_line":"  good reviews\". Patches that include all of the relevant context would"},{"line_number":150,"context_line":"  be easier to digest and review effectively."}],"source_content_type":"text/x-rst","patch_set":2,"id":"3a961159_00effae9","line":147,"in_reply_to":"7a8c0949_d6a19faa","updated":"2014-12-11 16:16:01.000000000","message":"Done","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b2a130931d9d1bd89819d73f753e7ab9ca4d0fdd","unresolved":false,"context_lines":[{"line_number":149,"context_line":"  good reviews\". Patches that include all of the relevant context would"},{"line_number":150,"context_line":"  be easier to digest and review effectively."},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"* The phased approach introduces a targeting problem for changes that"},{"line_number":153,"context_line":"  are currently in-flight or come up during a cycle. Are they introduced"},{"line_number":154,"context_line":"  as patches against the current code, the refactoring-in-progress code"},{"line_number":155,"context_line":"  or deferred to post refactoring? The decision would be case specific"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a8c0949_7692ab58","line":152,"updated":"2014-11-03 08:00:50.000000000","message":"Let\u0027s take https://review.openstack.org/#/c/126309/ as an example since it touches everyone\u0027s favorite monolithic method allocate_for_instance.\n\nIf we\u0027re not going to require this comes after the re-write, how are we going to track that we don\u0027t lose this if allocate_for_instance is re-written before https://review.openstack.org/#/c/126309/ is merged and we are writing new tests for the newly re-written allocate_for_instance?  One way would be Tempest coverage, but I doubt we have that for the bug that https://review.openstack.org/#/c/126309/ is addressing.","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"92bed6276c7104503ffc330c012be13a6999b292","unresolved":false,"context_lines":[{"line_number":149,"context_line":"  good reviews\". Patches that include all of the relevant context would"},{"line_number":150,"context_line":"  be easier to digest and review effectively."},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"* The phased approach introduces a targeting problem for changes that"},{"line_number":153,"context_line":"  are currently in-flight or come up during a cycle. Are they introduced"},{"line_number":154,"context_line":"  as patches against the current code, the refactoring-in-progress code"},{"line_number":155,"context_line":"  or deferred to post refactoring? The decision would be case specific"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a890539_fb316ded","line":152,"in_reply_to":"7a8c0949_7692ab58","updated":"2014-11-26 09:59:19.000000000","message":"Nearly a month later, that patch is still waiting. I\u0027ve seen in IRC that people are unwilling to review code because of the difficulty in grokking sections of the neutron api.","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b2a130931d9d1bd89819d73f753e7ab9ca4d0fdd","unresolved":false,"context_lines":[{"line_number":162,"context_line":"Data model impact"},{"line_number":163,"context_line":"-----------------"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"There are no planned data model or remotable objects changes at this time and,"},{"line_number":166,"context_line":"for the sake of this effort, should be avoided. The intent is to provide a drop"},{"line_number":167,"context_line":"in replacement for the existing implementation. Implementation specific"},{"line_number":168,"context_line":"alterations to the data model and remotable objects increase the risk and"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a8c0949_969f175f","line":165,"updated":"2014-11-03 08:00:50.000000000","message":"Line 98 says there are data model impacts.","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"b9fab210edada6b2b632b7e24938fbba14f31300","unresolved":false,"context_lines":[{"line_number":162,"context_line":"Data model impact"},{"line_number":163,"context_line":"-----------------"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"There are no planned data model or remotable objects changes at this time and,"},{"line_number":166,"context_line":"for the sake of this effort, should be avoided. The intent is to provide a drop"},{"line_number":167,"context_line":"in replacement for the existing implementation. Implementation specific"},{"line_number":168,"context_line":"alterations to the data model and remotable objects increase the risk and"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3a961159_40d5821a","line":165,"in_reply_to":"7a8c0949_969f175f","updated":"2014-12-11 16:16:01.000000000","message":"Yup, removed.","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b2a130931d9d1bd89819d73f753e7ab9ca4d0fdd","unresolved":false,"context_lines":[{"line_number":189,"context_line":"Other end user impact"},{"line_number":190,"context_line":"---------------------"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"Users will need to explicitly configure the new implementation in Nova in"},{"line_number":193,"context_line":"order to use it."},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"Performance Impact"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a8c0949_7679cb2e","line":192,"updated":"2014-11-03 08:00:50.000000000","message":"Updating this:\n\nhttp://git.openstack.org/cgit/openstack/nova/tree/nova/utils.py#n1053\n\nShould make the code just work with the new API regardless of configuration.","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b2a130931d9d1bd89819d73f753e7ab9ca4d0fdd","unresolved":false,"context_lines":[{"line_number":197,"context_line":""},{"line_number":198,"context_line":"The refactoring includes profiling and rationalizing of Nova/Neutron"},{"line_number":199,"context_line":"interaction and reduction in redundant calls. Performance is not"},{"line_number":200,"context_line":"adversely affected and should be improved in some cases."},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"Other deployer impact"},{"line_number":203,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a8c0949_3688231f","line":200,"updated":"2014-11-03 08:00:50.000000000","message":"\u0027should be\u0027 but this doesn\u0027t leave me feeling warm and fuzzy...I wonder if we could get Boris and the Rally folks to run perf tests against both APIs at some point to look for gaps.  I don\u0027t know what they do today for Neutron network API performance testing.\n\nOr OSProfiler or whatever it is...","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"b9fab210edada6b2b632b7e24938fbba14f31300","unresolved":false,"context_lines":[{"line_number":197,"context_line":""},{"line_number":198,"context_line":"The refactoring includes profiling and rationalizing of Nova/Neutron"},{"line_number":199,"context_line":"interaction and reduction in redundant calls. Performance is not"},{"line_number":200,"context_line":"adversely affected and should be improved in some cases."},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"Other deployer impact"},{"line_number":203,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3a961159_e0f74ed1","line":200,"in_reply_to":"3a961159_aef8dec3","updated":"2014-12-11 16:16:01.000000000","message":"Okay, removed :) It\u0027s not something that we can easily describe within the context of the work at hand anyways.","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"794a4db09616b7eacbecabd2f0997289a29eca5a","unresolved":false,"context_lines":[{"line_number":197,"context_line":""},{"line_number":198,"context_line":"The refactoring includes profiling and rationalizing of Nova/Neutron"},{"line_number":199,"context_line":"interaction and reduction in redundant calls. Performance is not"},{"line_number":200,"context_line":"adversely affected and should be improved in some cases."},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"Other deployer impact"},{"line_number":203,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3a961159_aef8dec3","line":200,"in_reply_to":"5a890539_9b106901","updated":"2014-12-11 14:05:01.000000000","message":"+1 gilliard","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"92bed6276c7104503ffc330c012be13a6999b292","unresolved":false,"context_lines":[{"line_number":197,"context_line":""},{"line_number":198,"context_line":"The refactoring includes profiling and rationalizing of Nova/Neutron"},{"line_number":199,"context_line":"interaction and reduction in redundant calls. Performance is not"},{"line_number":200,"context_line":"adversely affected and should be improved in some cases."},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"Other deployer impact"},{"line_number":203,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a890539_9b106901","line":200,"in_reply_to":"7a8c0949_3688231f","updated":"2014-11-26 09:59:19.000000000","message":"I\u0027m wary of any claim that we\u0027re going to improve performance. It\u0027s a non-goal here. Any perf improvement will be more easily achieved separately once the code is malleable.","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"92bed6276c7104503ffc330c012be13a6999b292","unresolved":false,"context_lines":[{"line_number":204,"context_line":""},{"line_number":205,"context_line":"It is expected that additional source files will be created. Deployment"},{"line_number":206,"context_line":"tools that are not wild card based in file selection will need to be"},{"line_number":207,"context_line":"modified to include the new files."},{"line_number":208,"context_line":""},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"Developer impact"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a890539_1bfc79b4","line":207,"updated":"2014-11-26 09:59:19.000000000","message":"And the new config value?","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"b9fab210edada6b2b632b7e24938fbba14f31300","unresolved":false,"context_lines":[{"line_number":204,"context_line":""},{"line_number":205,"context_line":"It is expected that additional source files will be created. Deployment"},{"line_number":206,"context_line":"tools that are not wild card based in file selection will need to be"},{"line_number":207,"context_line":"modified to include the new files."},{"line_number":208,"context_line":""},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"Developer impact"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3a961159_205076d3","line":207,"in_reply_to":"5a890539_1bfc79b4","updated":"2014-12-11 16:16:01.000000000","message":"I think the idea is that the new config value isn\u0027t required.","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b2a130931d9d1bd89819d73f753e7ab9ca4d0fdd","unresolved":false,"context_lines":[{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Developers working with the existing code will be lightly impacted by"},{"line_number":214,"context_line":"incremental patches that land during the refactoring process. These"},{"line_number":215,"context_line":"patches primarily impact the Network API, the related data model and the"},{"line_number":216,"context_line":"consumers of both. The existing Neutron implementation will be adapted"},{"line_number":217,"context_line":"to supply implementations for these changes as much as possible to avoid"},{"line_number":218,"context_line":"loss of functionality."}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a8c0949_9676373d","line":215,"updated":"2014-11-03 08:00:50.000000000","message":"Again, mentioning data model impacts...","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"b9fab210edada6b2b632b7e24938fbba14f31300","unresolved":false,"context_lines":[{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Developers working with the existing code will be lightly impacted by"},{"line_number":214,"context_line":"incremental patches that land during the refactoring process. These"},{"line_number":215,"context_line":"patches primarily impact the Network API, the related data model and the"},{"line_number":216,"context_line":"consumers of both. The existing Neutron implementation will be adapted"},{"line_number":217,"context_line":"to supply implementations for these changes as much as possible to avoid"},{"line_number":218,"context_line":"loss of functionality."}],"source_content_type":"text/x-rst","patch_set":2,"id":"3a961159_a044661b","line":215,"in_reply_to":"7a8c0949_9676373d","updated":"2014-12-11 16:16:01.000000000","message":"removed.","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b2a130931d9d1bd89819d73f753e7ab9ca4d0fdd","unresolved":false,"context_lines":[{"line_number":230,"context_line":"One or more sponsors from the core teams should have direct involvement"},{"line_number":231,"context_line":"in an, at minimum, advisory capacity. Particularly:"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"* Dan Smith - Nova: objects, data model and migration."},{"line_number":234,"context_line":"* (interested neutron cores?)"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a8c0949_d68fdf21","line":233,"updated":"2014-11-03 08:00:50.000000000","message":"You can add me to this list since this is something I\u0027m interested in helping with in Kilo.","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"b9fab210edada6b2b632b7e24938fbba14f31300","unresolved":false,"context_lines":[{"line_number":230,"context_line":"One or more sponsors from the core teams should have direct involvement"},{"line_number":231,"context_line":"in an, at minimum, advisory capacity. Particularly:"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"* Dan Smith - Nova: objects, data model and migration."},{"line_number":234,"context_line":"* (interested neutron cores?)"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"3a961159_803f6a86","line":233,"in_reply_to":"7a8c0949_d68fdf21","updated":"2014-12-11 16:16:01.000000000","message":"Done","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b2a130931d9d1bd89819d73f753e7ab9ca4d0fdd","unresolved":false,"context_lines":[{"line_number":242,"context_line":"----------"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"1. Create repeatable profiling test cases for common use cases."},{"line_number":245,"context_line":"2. Verify and extend Nova network API functional tests."},{"line_number":246,"context_line":"3. Construct and verify new API implementation"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a8c0949_169a4763","line":245,"updated":"2014-11-03 08:00:50.000000000","message":"Functional tests in nova?  Where are these today?","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"b9fab210edada6b2b632b7e24938fbba14f31300","unresolved":false,"context_lines":[{"line_number":242,"context_line":"----------"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"1. Create repeatable profiling test cases for common use cases."},{"line_number":245,"context_line":"2. Verify and extend Nova network API functional tests."},{"line_number":246,"context_line":"3. Construct and verify new API implementation"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"3a961159_603efe8d","line":245,"in_reply_to":"5a890539_db78312d","updated":"2014-12-11 16:16:01.000000000","message":"Added a note about test work items being described in the individual detailed refactor step specs.","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"92bed6276c7104503ffc330c012be13a6999b292","unresolved":false,"context_lines":[{"line_number":242,"context_line":"----------"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"1. Create repeatable profiling test cases for common use cases."},{"line_number":245,"context_line":"2. Verify and extend Nova network API functional tests."},{"line_number":246,"context_line":"3. Construct and verify new API implementation"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a890539_db78312d","line":245,"in_reply_to":"7a8c0949_169a4763","updated":"2014-11-26 09:59:19.000000000","message":"Just merged, and just about to be gated, I believe.  Do we need to expand this section in light of that?","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b2a130931d9d1bd89819d73f753e7ab9ca4d0fdd","unresolved":false,"context_lines":[{"line_number":249,"context_line":"Dependencies"},{"line_number":250,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"The relative stability of the networking API, as well as well as"},{"line_number":253,"context_line":"internal APIs of adjacent code (e.g. objects) as well as the neutron"},{"line_number":254,"context_line":"REST APIs."},{"line_number":255,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a8c0949_56a3ef9d","line":252,"updated":"2014-11-03 08:00:50.000000000","message":"s/as well as well/as well/\n\nHowever, I think this section could be \u0027None\u0027 also.  We don\u0027t expect the network APIs to be changing a bunch while working on this, and if they did, they still have to be backwards compatible.","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"b9fab210edada6b2b632b7e24938fbba14f31300","unresolved":false,"context_lines":[{"line_number":249,"context_line":"Dependencies"},{"line_number":250,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"The relative stability of the networking API, as well as well as"},{"line_number":253,"context_line":"internal APIs of adjacent code (e.g. objects) as well as the neutron"},{"line_number":254,"context_line":"REST APIs."},{"line_number":255,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"3a961159_80f12a03","line":252,"in_reply_to":"7a8c0949_56a3ef9d","updated":"2014-12-11 16:16:01.000000000","message":"Done","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b2a130931d9d1bd89819d73f753e7ab9ca4d0fdd","unresolved":false,"context_lines":[{"line_number":256,"context_line":"Testing"},{"line_number":257,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"Additional functional tests may be required to provide sufficient rigor"},{"line_number":260,"context_line":"for validating the new implementation."},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a8c0949_16b167e1","line":259,"updated":"2014-11-03 08:00:50.000000000","message":"I\u0027d think we\u0027d want a CI job on the experimental queue that configures devstack with the new rewrite implementation, then we can run Tempest with neutron against the new API.","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"b9fab210edada6b2b632b7e24938fbba14f31300","unresolved":false,"context_lines":[{"line_number":256,"context_line":"Testing"},{"line_number":257,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"Additional functional tests may be required to provide sufficient rigor"},{"line_number":260,"context_line":"for validating the new implementation."},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3a961159_208b1669","line":259,"in_reply_to":"7a8c0949_16b167e1","updated":"2014-12-11 16:16:01.000000000","message":"Done","commit_id":"18e8e3d50a0565b0cb18b068c878321574a30de3"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"d66c1b278992cc95abc851a06b18d622de37b599","unresolved":false,"context_lines":[{"line_number":8,"context_line":"Refactor of the Neutron network adapter"},{"line_number":9,"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"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Include the URL of your launchpad blueprint:"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"https://blueprints.launchpad.net/nova/+spec/nova-neutron-refactor"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_c871770d","line":11,"updated":"2014-12-12 15:00:16.000000000","message":"don\u0027t need this line","commit_id":"e47e4c3d37a4d3922d78d232daac9b4ae9720f60"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"df0b23044515b9cb38f1aa626a5ffdb6eed1838e","unresolved":false,"context_lines":[{"line_number":8,"context_line":"Refactor of the Neutron network adapter"},{"line_number":9,"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"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Include the URL of your launchpad blueprint:"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"https://blueprints.launchpad.net/nova/+spec/nova-neutron-refactor"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_d541550c","line":11,"in_reply_to":"3a961159_c871770d","updated":"2014-12-18 18:26:30.000000000","message":"Done","commit_id":"e47e4c3d37a4d3922d78d232daac9b4ae9720f60"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"d66c1b278992cc95abc851a06b18d622de37b599","unresolved":false,"context_lines":[{"line_number":39,"context_line":"  difficult to create and maintain effective unit tests."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"* Data type and organization were simply added to (e.g. adding another"},{"line_number":42,"context_line":"  element to a tuple) accommodate new requirements as opposed toh"},{"line_number":43,"context_line":"  refactoring to a more appropriate data structure such as class type."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"* While Neutron client API calls are accompanied by try/catch blocks, the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_a84d0bc6","line":42,"updated":"2014-12-12 15:00:16.000000000","message":"nit: \u0027toh\u0027\n\nShould be two sentences","commit_id":"e47e4c3d37a4d3922d78d232daac9b4ae9720f60"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"df0b23044515b9cb38f1aa626a5ffdb6eed1838e","unresolved":false,"context_lines":[{"line_number":39,"context_line":"  difficult to create and maintain effective unit tests."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"* Data type and organization were simply added to (e.g. adding another"},{"line_number":42,"context_line":"  element to a tuple) accommodate new requirements as opposed toh"},{"line_number":43,"context_line":"  refactoring to a more appropriate data structure such as class type."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"* While Neutron client API calls are accompanied by try/catch blocks, the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_5503a5b7","line":42,"in_reply_to":"3a961159_a84d0bc6","updated":"2014-12-18 18:26:30.000000000","message":"Handled, reworded into one sentence.","commit_id":"e47e4c3d37a4d3922d78d232daac9b4ae9720f60"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"4262a3c3bf9a19cd2b8ccd2d1f1829c0b85e0e9f","unresolved":false,"context_lines":[{"line_number":46,"context_line":"  Neutron exceptions are not translated to Nova exceptions so they can be"},{"line_number":47,"context_line":"  immmediately used in calling code. Neutron exceptions permeating the"},{"line_number":48,"context_line":"  Nova/Neutron boundary obviates the potential for networking backend agnostic"},{"line_number":49,"context_line":"  code."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"* Certain APIs methods have become entry points for logically divergent"},{"line_number":52,"context_line":"  operations (i.e. candy machine interfaces). This is easily identifiable"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_74cf8056","line":49,"updated":"2014-12-12 13:07:40.000000000","message":"+1 This is much nicer with clear examples for each one. Especially this about the exception handling.","commit_id":"e47e4c3d37a4d3922d78d232daac9b4ae9720f60"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"d66c1b278992cc95abc851a06b18d622de37b599","unresolved":false,"context_lines":[{"line_number":48,"context_line":"  Nova/Neutron boundary obviates the potential for networking backend agnostic"},{"line_number":49,"context_line":"  code."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"* Certain APIs methods have become entry points for logically divergent"},{"line_number":52,"context_line":"  operations (i.e. candy machine interfaces). This is easily identifiable"},{"line_number":53,"context_line":"  by the complexity and size of their implementation."},{"line_number":54,"context_line":"  `allocate_for_instance` is another good example of this. It has several"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_c8dfb7d4","line":51,"updated":"2014-12-12 15:00:16.000000000","message":"nit: API methods","commit_id":"e47e4c3d37a4d3922d78d232daac9b4ae9720f60"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"df0b23044515b9cb38f1aa626a5ffdb6eed1838e","unresolved":false,"context_lines":[{"line_number":48,"context_line":"  Nova/Neutron boundary obviates the potential for networking backend agnostic"},{"line_number":49,"context_line":"  code."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"* Certain APIs methods have become entry points for logically divergent"},{"line_number":52,"context_line":"  operations (i.e. candy machine interfaces). This is easily identifiable"},{"line_number":53,"context_line":"  by the complexity and size of their implementation."},{"line_number":54,"context_line":"  `allocate_for_instance` is another good example of this. It has several"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_b52f693d","line":51,"in_reply_to":"3a961159_c8dfb7d4","updated":"2014-12-18 18:26:30.000000000","message":"Done","commit_id":"e47e4c3d37a4d3922d78d232daac9b4ae9720f60"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"41b8bfd14ce19404fc4d4f2e9da17959c2b8ddde","unresolved":false,"context_lines":[{"line_number":66,"context_line":"  Efforts to modify or extend the python neutron client to create a"},{"line_number":67,"context_line":"  higher level facade to hide REST request body formatting are under"},{"line_number":68,"context_line":"  discussion."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Use Cases"},{"line_number":71,"context_line":"----------"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_a4818bfc","line":69,"updated":"2014-12-15 09:26:56.000000000","message":"I think that you also need to mention that the neutron code is terribly difficult to test.","commit_id":"e47e4c3d37a4d3922d78d232daac9b4ae9720f60"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"df0b23044515b9cb38f1aa626a5ffdb6eed1838e","unresolved":false,"context_lines":[{"line_number":66,"context_line":"  Efforts to modify or extend the python neutron client to create a"},{"line_number":67,"context_line":"  higher level facade to hide REST request body formatting are under"},{"line_number":68,"context_line":"  discussion."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Use Cases"},{"line_number":71,"context_line":"----------"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_55f1e5cb","line":69,"in_reply_to":"3a961159_a4818bfc","updated":"2014-12-18 18:26:30.000000000","message":"I\u0027m not sure how to squeeze that in. Can you be more specific?","commit_id":"e47e4c3d37a4d3922d78d232daac9b4ae9720f60"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"4262a3c3bf9a19cd2b8ccd2d1f1829c0b85e0e9f","unresolved":false,"context_lines":[{"line_number":73,"context_line":"As a critical and fundamental API, developers need an implementation that"},{"line_number":74,"context_line":"is more maintainable and testable. Risk of regressions or non-deterministic"},{"line_number":75,"context_line":"consequences when extending or repairing the implementation should not be"},{"line_number":76,"context_line":"disproportionate to the changes being made."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"Project Priority"},{"line_number":79,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_74f6a090","line":76,"updated":"2014-12-12 13:07:40.000000000","message":"Excactly. Great.","commit_id":"e47e4c3d37a4d3922d78d232daac9b4ae9720f60"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"41b8bfd14ce19404fc4d4f2e9da17959c2b8ddde","unresolved":false,"context_lines":[{"line_number":112,"context_line":"refactoring spread across multiple phases. For example,"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"* Phase 1: Code cleanup and reorganization and use the Neutron API more"},{"line_number":115,"context_line":"  efficiently."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"* Phase 2: Apply patterns and improve implementation."},{"line_number":118,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_a4e6ebe5","line":115,"updated":"2014-12-15 09:26:56.000000000","message":"I am not sure that I agree with the efficiency part. One of the concerns with the current implementation that I have is that everything is done at the nova compute level. This could have been validated at the Nova API level (and part of the mess that we have would not occur).\nI would go for cleanup here and then at a later phase do the optimizations","commit_id":"e47e4c3d37a4d3922d78d232daac9b4ae9720f60"},{"author":{"_account_id":3217,"name":"Ian Wells","username":"ijw-ubuntu"},"change_message_id":"7124fa016114176c648db4fe0f9201ad0ee4717f","unresolved":false,"context_lines":[{"line_number":112,"context_line":"refactoring spread across multiple phases. For example,"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"* Phase 1: Code cleanup and reorganization and use the Neutron API more"},{"line_number":115,"context_line":"  efficiently."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"* Phase 2: Apply patterns and improve implementation."},{"line_number":118,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_91112506","line":115,"in_reply_to":"3a961159_a4e6ebe5","updated":"2014-12-15 13:46:06.000000000","message":"This is an alternative, not the plan...","commit_id":"e47e4c3d37a4d3922d78d232daac9b4ae9720f60"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"d66c1b278992cc95abc851a06b18d622de37b599","unresolved":false,"context_lines":[{"line_number":213,"context_line":"incremental patches that land during the refactoring process. These patches"},{"line_number":214,"context_line":"primarily impact the Network API and its consumers as the existing"},{"line_number":215,"context_line":"implementation is adapted to match improvements in parameters and return"},{"line_number":216,"context_line":"values"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"Implementation"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_687a43be","line":216,"updated":"2014-12-12 15:00:16.000000000","message":"nit: full stop\n\nwould probably be clearer to say \"as API signatures are adapted.\"","commit_id":"e47e4c3d37a4d3922d78d232daac9b4ae9720f60"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"df0b23044515b9cb38f1aa626a5ffdb6eed1838e","unresolved":false,"context_lines":[{"line_number":213,"context_line":"incremental patches that land during the refactoring process. These patches"},{"line_number":214,"context_line":"primarily impact the Network API and its consumers as the existing"},{"line_number":215,"context_line":"implementation is adapted to match improvements in parameters and return"},{"line_number":216,"context_line":"values"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"Implementation"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_9588ad23","line":216,"in_reply_to":"3a961159_687a43be","updated":"2014-12-18 18:26:30.000000000","message":"I agree that is more accurate. Done!","commit_id":"e47e4c3d37a4d3922d78d232daac9b4ae9720f60"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"41b8bfd14ce19404fc4d4f2e9da17959c2b8ddde","unresolved":false,"context_lines":[{"line_number":230,"context_line":""},{"line_number":231,"context_line":"* Dan Smith - Nova: objects, data model and migration."},{"line_number":232,"context_line":"* Matt Riedemann"},{"line_number":233,"context_line":"* (interested neutron cores?)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"Primary assignee:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_840acf87","line":233,"updated":"2014-12-15 09:26:56.000000000","message":"Please add me to the list of people who want to and will help","commit_id":"e47e4c3d37a4d3922d78d232daac9b4ae9720f60"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"df0b23044515b9cb38f1aa626a5ffdb6eed1838e","unresolved":false,"context_lines":[{"line_number":230,"context_line":""},{"line_number":231,"context_line":"* Dan Smith - Nova: objects, data model and migration."},{"line_number":232,"context_line":"* Matt Riedemann"},{"line_number":233,"context_line":"* (interested neutron cores?)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"Primary assignee:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_b5920949","line":233,"in_reply_to":"3a961159_840acf87","updated":"2014-12-18 18:26:30.000000000","message":"No, you are not allowed ;) jk, of course. Added!","commit_id":"e47e4c3d37a4d3922d78d232daac9b4ae9720f60"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"4262a3c3bf9a19cd2b8ccd2d1f1829c0b85e0e9f","unresolved":false,"context_lines":[{"line_number":256,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"A CI job will be added to the experimental work queue to run Tempest with"},{"line_number":259,"context_line":"the new implementation in place."},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"Additional functional tests may be required to provide sufficient rigor"},{"line_number":262,"context_line":"for validating the new implementation."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_14e8fc7a","line":259,"updated":"2014-12-12 13:07:40.000000000","message":"How does this work? We say above that it\u0027s not configurable which one is used.  I\u0027m a bit confused on this point.  I think we can do it without an experimental job.","commit_id":"e47e4c3d37a4d3922d78d232daac9b4ae9720f60"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"df0b23044515b9cb38f1aa626a5ffdb6eed1838e","unresolved":false,"context_lines":[{"line_number":256,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"A CI job will be added to the experimental work queue to run Tempest with"},{"line_number":259,"context_line":"the new implementation in place."},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"Additional functional tests may be required to provide sufficient rigor"},{"line_number":262,"context_line":"for validating the new implementation."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_15cafd4e","line":259,"in_reply_to":"3a961159_14e8fc7a","updated":"2014-12-18 18:26:30.000000000","message":"Right... I\u0027ve done away with mention of the experimental queue for the time being. If we end up needing to, then we\u0027ll deal with it.","commit_id":"e47e4c3d37a4d3922d78d232daac9b4ae9720f60"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"d66c1b278992cc95abc851a06b18d622de37b599","unresolved":false,"context_lines":[{"line_number":268,"context_line":"The refactored implementation will appear as an additional network"},{"line_number":269,"context_line":"back-end API until such time that it can replace the current API"},{"line_number":270,"context_line":"implementation. A configuration to select the alternate implementation"},{"line_number":271,"context_line":"will need documentation."},{"line_number":272,"context_line":""},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"References"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_a82eeba2","line":271,"updated":"2014-12-12 15:00:16.000000000","message":"this also seems to conflict with the day-one jump to a new facade.","commit_id":"e47e4c3d37a4d3922d78d232daac9b4ae9720f60"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"df0b23044515b9cb38f1aa626a5ffdb6eed1838e","unresolved":false,"context_lines":[{"line_number":268,"context_line":"The refactored implementation will appear as an additional network"},{"line_number":269,"context_line":"back-end API until such time that it can replace the current API"},{"line_number":270,"context_line":"implementation. A configuration to select the alternate implementation"},{"line_number":271,"context_line":"will need documentation."},{"line_number":272,"context_line":""},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"References"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_f5ead1aa","line":271,"in_reply_to":"3a961159_a82eeba2","updated":"2014-12-18 18:26:30.000000000","message":"Yes, you are right. This isn\u0027t really relevant any more.","commit_id":"e47e4c3d37a4d3922d78d232daac9b4ae9720f60"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"4b4a4b2b86a89dec93692c76d5de8e8502d22a2f","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"* Encourage extension through acceptable coding and design practices and"},{"line_number":23,"context_line":"  idioms."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Problem description"},{"line_number":27,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9a80dd14_d660fc02","line":24,"updated":"2015-03-10 10:05:45.000000000","message":"We should also add that this should improve the performance of nova/neutron interaction.","commit_id":"c4a953a60f63ca12933735c2b2a4901bd548ad90"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"e51540be7f70a4b4af7abc1a8178a2e0465444fd","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"* Encourage extension through acceptable coding and design practices and"},{"line_number":23,"context_line":"  idioms."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Problem description"},{"line_number":27,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1aca2d91_b9278011","line":24,"in_reply_to":"9a80dd14_d660fc02","updated":"2015-05-07 19:28:33.000000000","message":"Done","commit_id":"c4a953a60f63ca12933735c2b2a4901bd548ad90"},{"author":{"_account_id":13734,"name":"Nell Jerram","email":"nell@tigera.io","username":"neiljerram"},"change_message_id":"9f966c94550b98981dff91a408893caff31aa03c","unresolved":false,"context_lines":[{"line_number":27,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"The majority of Network API adapter is currently contained in"},{"line_number":30,"context_line":"nova/network/neutronv2/api.py. The principle implementation class is API"},{"line_number":31,"context_line":"and is direct descendant of `nova.network.base_api.NetworkAPI`. The"},{"line_number":32,"context_line":"implementation code has some issues:"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"3ab451fb_0b8894e6","line":30,"updated":"2015-04-17 12:48:28.000000000","message":"\"principal\"","commit_id":"c4a953a60f63ca12933735c2b2a4901bd548ad90"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"e51540be7f70a4b4af7abc1a8178a2e0465444fd","unresolved":false,"context_lines":[{"line_number":27,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"The majority of Network API adapter is currently contained in"},{"line_number":30,"context_line":"nova/network/neutronv2/api.py. The principle implementation class is API"},{"line_number":31,"context_line":"and is direct descendant of `nova.network.base_api.NetworkAPI`. The"},{"line_number":32,"context_line":"implementation code has some issues:"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"1aca2d91_99228400","line":30,"in_reply_to":"3ab451fb_0b8894e6","updated":"2015-05-07 19:28:33.000000000","message":"Done","commit_id":"c4a953a60f63ca12933735c2b2a4901bd548ad90"},{"author":{"_account_id":13734,"name":"Nell Jerram","email":"nell@tigera.io","username":"neiljerram"},"change_message_id":"9f966c94550b98981dff91a408893caff31aa03c","unresolved":false,"context_lines":[{"line_number":93,"context_line":"delegating to the existing implementation. Refactorings can then be"},{"line_number":94,"context_line":"performed *across* the API (e.g. exception mapping, argument conversion),"},{"line_number":95,"context_line":"per method, or per method use case (e.g. `allocate_for_instance` with no"},{"line_number":96,"context_line":"requested networks)."},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"Specific proposed refactorings are covered by additional blueprints and"},{"line_number":99,"context_line":"related by common topic."}],"source_content_type":"text/x-rst","patch_set":4,"id":"3ab451fb_0e0e6234","line":96,"updated":"2015-04-17 12:48:28.000000000","message":"Hmm.  So this spec is really about a combined refactoring of both the _interface_ (base_api.py) _and_ the Neutron _implementation_, isn\u0027t it?\n\nI think that\u0027s very likely an excellent thing to do - but I worry that this spec\u0027s presentation of that is a little confused.","commit_id":"c4a953a60f63ca12933735c2b2a4901bd548ad90"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"e51540be7f70a4b4af7abc1a8178a2e0465444fd","unresolved":false,"context_lines":[{"line_number":93,"context_line":"delegating to the existing implementation. Refactorings can then be"},{"line_number":94,"context_line":"performed *across* the API (e.g. exception mapping, argument conversion),"},{"line_number":95,"context_line":"per method, or per method use case (e.g. `allocate_for_instance` with no"},{"line_number":96,"context_line":"requested networks)."},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"Specific proposed refactorings are covered by additional blueprints and"},{"line_number":99,"context_line":"related by common topic."}],"source_content_type":"text/x-rst","patch_set":4,"id":"1aca2d91_f95a9882","line":96,"in_reply_to":"3ab451fb_0e0e6234","updated":"2015-05-07 19:28:33.000000000","message":"I understand your point. The changing of the API was introduced here to open the door to modifying the API should we uncover ways that really improve things. Now would be a good opportunity!","commit_id":"c4a953a60f63ca12933735c2b2a4901bd548ad90"},{"author":{"_account_id":13734,"name":"Nell Jerram","email":"nell@tigera.io","username":"neiljerram"},"change_message_id":"9f966c94550b98981dff91a408893caff31aa03c","unresolved":false,"context_lines":[{"line_number":96,"context_line":"requested networks)."},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"Specific proposed refactorings are covered by additional blueprints and"},{"line_number":99,"context_line":"related by common topic."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"In addition to changes to the implementation of the API itself,"},{"line_number":102,"context_line":"consideration will be given to extending the functionality of the existing"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3ab451fb_6e4de671","line":99,"updated":"2015-04-17 12:48:28.000000000","message":"What does \"related by common topic\" mean?","commit_id":"c4a953a60f63ca12933735c2b2a4901bd548ad90"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"e51540be7f70a4b4af7abc1a8178a2e0465444fd","unresolved":false,"context_lines":[{"line_number":96,"context_line":"requested networks)."},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"Specific proposed refactorings are covered by additional blueprints and"},{"line_number":99,"context_line":"related by common topic."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"In addition to changes to the implementation of the API itself,"},{"line_number":102,"context_line":"consideration will be given to extending the functionality of the existing"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1aca2d91_d9eb5c77","line":99,"in_reply_to":"3ab451fb_6e4de671","updated":"2015-05-07 19:28:33.000000000","message":"I meant gerrit topic. I\u0027ll clarify.","commit_id":"c4a953a60f63ca12933735c2b2a4901bd548ad90"}],"specs/liberty/approved/nova-neutron-refactor.rst":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c5d0b0474e10f40e8f3ccd45b005f28780b84d44","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":".. note::"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"  Efforts to modify or extend the python neutron client to create a"},{"line_number":68,"context_line":"  higher level facade to hide REST request body formatting are under"},{"line_number":69,"context_line":"  discussion."},{"line_number":70,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"7a016987_5ee027fa","line":67,"updated":"2015-05-19 21:32:52.000000000","message":"The OpenStack SDK has come up as an alternative for nova using python-neutronclient to hit the neutron APIs but in the sdk design summit session it sounds like we shouldn\u0027t do that b/c of dependency hell - although they said the sdk would be very lightweight and not have many dependencies, so I\u0027m confused:\n\nhttps://etherpad.openstack.org/p/sdk-cross-project-vancouver\n\nMaybe nova shouldn\u0027t be going through neutronclient at all and just using it\u0027s own service wrappers like what tempest/tempest-lib does:\n\nhttps://github.com/openstack/tempest/blob/master/tempest/services/network/json/network_client.py","commit_id":"5fae627190a8736f770d5ffa7d6a6ef5df42561f"}]}
