)]}'
{"doc/source/api/octaviaapi.rst":[{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"a9004418e1b8d1d061d285159f66f7dd1afd72de","unresolved":false,"context_lines":[{"line_number":636,"context_line":"+----------------+-----------------------------------------------------------+"},{"line_number":637,"context_line":"| Request Type   | ``GET``                                                   |"},{"line_number":638,"context_line":"+----------------+-----------------------------------------------------------+"},{"line_number":639,"context_line":"| Endpoint       | ``URL/v1/loadbalancers/{lb_id}/pools``                    |"},{"line_number":640,"context_line":"+----------------+---------+-------------------------------------------------+"},{"line_number":641,"context_line":"|                | Success | 200                                             |"},{"line_number":642,"context_line":"| Response Codes +---------+-------------------------------------------------+"}],"source_content_type":"text/x-rst","patch_set":6,"id":"da6ed579_df4a3583","line":639,"updated":"2016-01-13 06:49:37.000000000","message":"i asked this in neutron-lbaas, but can we not maintain the lbs -\u003e listeners -\u003e pools relationship in the url? I\u0027ve got some ideas on this so we may have to talk a bit tomorrow about it.","commit_id":"9277ee4f4fa34ec73279cc7229cd5d9298be4b4f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"e27af64859501732e8def6e88f5fe486004c1458","unresolved":false,"context_lines":[{"line_number":636,"context_line":"+----------------+-----------------------------------------------------------+"},{"line_number":637,"context_line":"| Request Type   | ``GET``                                                   |"},{"line_number":638,"context_line":"+----------------+-----------------------------------------------------------+"},{"line_number":639,"context_line":"| Endpoint       | ``URL/v1/loadbalancers/{lb_id}/pools``                    |"},{"line_number":640,"context_line":"+----------------+---------+-------------------------------------------------+"},{"line_number":641,"context_line":"|                | Success | 200                                             |"},{"line_number":642,"context_line":"| Response Codes +---------+-------------------------------------------------+"}],"source_content_type":"text/x-rst","patch_set":6,"id":"da6ed579_2a7e9219","line":639,"in_reply_to":"da6ed579_df4a3583","updated":"2016-01-13 15:28:11.000000000","message":"That path actually still works, but it\u0027s deprecated. I figured that we don\u0027t want to advertise deprecated paths in the documentation, where people are likely to write code that interfaces with it.\n\nIf we want to have a /URL/v1/loadbalancers/{lb_id}/default_pool endpoint that works, we can absolutely do that. But per our discussion this morning, let\u0027s do that in a subsequent patch. In any case, none of the legacy paths should be broken with this patch.","commit_id":"9277ee4f4fa34ec73279cc7229cd5d9298be4b4f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"540f0fbbd954f56702ec6c96113997787fcbe6f8","unresolved":false,"context_lines":[{"line_number":366,"context_line":"           \u0027id\u0027: \u0027uuid\u0027,"},{"line_number":367,"context_line":"           \u0027operating_status\u0027: \u0027ONLINE\u0027,"},{"line_number":368,"context_line":"           \u0027name\u0027: \u0027listener_name\u0027,"},{"line_number":369,"context_line":"           \u0027default_pool_id\u0027: \u0027uuid\u0027"},{"line_number":370,"context_line":"       }"},{"line_number":371,"context_line":"   ］"},{"line_number":372,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"da6ed579_52ad5c99","line":369,"updated":"2016-01-15 04:34:29.000000000","message":"I think this might be too much information for the list listeners table.  We didn\u0027t list the pool in the list call before, so not sure it should be here now.  In all fairness, I think the same of sni_containers.","commit_id":"67d14f2c79b998460043327dd0e88564ee7abcb6"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"35e4fb5f3922e0ad3caa74dbc243f8459f358c11","unresolved":false,"context_lines":[{"line_number":366,"context_line":"           \u0027id\u0027: \u0027uuid\u0027,"},{"line_number":367,"context_line":"           \u0027operating_status\u0027: \u0027ONLINE\u0027,"},{"line_number":368,"context_line":"           \u0027name\u0027: \u0027listener_name\u0027,"},{"line_number":369,"context_line":"           \u0027default_pool_id\u0027: \u0027uuid\u0027"},{"line_number":370,"context_line":"       }"},{"line_number":371,"context_line":"   ］"},{"line_number":372,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"da6ed579_8364e4b8","line":369,"in_reply_to":"da6ed579_52ad5c99","updated":"2016-01-15 06:06:52.000000000","message":"I strongly disagree. I also think that when you\u0027re coding a machine interface, \"too much information\" is when it actually costs you something to produce it when it won\u0027t be used often. In this case, default_pool_id is a field on the listener table, so it costs us zero to provide that information along with the rest of the listener details. Limiting the output of an API call (which 99.9999% of the time isn\u0027t going to have a human reader anyway-- and when it does, they\u0027re probably debugging and would like more information anyway), is just silly. Sure, provide brief views in the CLI output... but again, an API is a *machine* interface. There is essentially no such thing as too much information unless it costs more to provide.\n\nAlso, there is no other way for the user (or program they\u0027re using) to discover the default_pool_id. There is no URL/v1/loadbalancers/{lb_id}/listeners/{listener_id}/default_pool path, and the .../pools path will shortly list all the pools referenced by the listener and L7 policies when the L7 stuff lands-- the user needs to be able to discover which of those is the default pool.","commit_id":"67d14f2c79b998460043327dd0e88564ee7abcb6"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"540f0fbbd954f56702ec6c96113997787fcbe6f8","unresolved":false,"context_lines":[{"line_number":636,"context_line":"+----------------+-----------------------------------------------------------+"},{"line_number":637,"context_line":"| Request Type   | ``GET``                                                   |"},{"line_number":638,"context_line":"+----------------+-----------------------------------------------------------+"},{"line_number":639,"context_line":"| Endpoint       | ``URL/v1/loadbalancers/{lb_id}/pools``                    |"},{"line_number":640,"context_line":"+----------------+---------+-------------------------------------------------+"},{"line_number":641,"context_line":"|                | Success | 200                                             |"},{"line_number":642,"context_line":"| Response Codes +---------+-------------------------------------------------+"}],"source_content_type":"text/x-rst","patch_set":8,"id":"da6ed579_3281c8fb","line":639,"updated":"2016-01-15 04:34:29.000000000","message":"I think we should leave this in the doc, marked deprecated, as it was a published/released API.\nThis is a pretty major change and I think we should manage the transition carefully.","commit_id":"67d14f2c79b998460043327dd0e88564ee7abcb6"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"35e4fb5f3922e0ad3caa74dbc243f8459f358c11","unresolved":false,"context_lines":[{"line_number":636,"context_line":"+----------------+-----------------------------------------------------------+"},{"line_number":637,"context_line":"| Request Type   | ``GET``                                                   |"},{"line_number":638,"context_line":"+----------------+-----------------------------------------------------------+"},{"line_number":639,"context_line":"| Endpoint       | ``URL/v1/loadbalancers/{lb_id}/pools``                    |"},{"line_number":640,"context_line":"+----------------+---------+-------------------------------------------------+"},{"line_number":641,"context_line":"|                | Success | 200                                             |"},{"line_number":642,"context_line":"| Response Codes +---------+-------------------------------------------------+"}],"source_content_type":"text/x-rst","patch_set":8,"id":"da6ed579_8332a4a5","line":639,"in_reply_to":"da6ed579_3281c8fb","updated":"2016-01-15 06:06:52.000000000","message":"I think you would have a stronger case if we could name one person who is using Octavia in production, let alone one who has written code to interact directly with Octavia outside of the Neutron LBaaS interface. However, since this isn\u0027t worth fighting over, I\u0027ll go ahead and add these endpoints back into this document with a glaringly bold statement saying the old paths are deprecated, each time they\u0027re mentioned. Even though this is totally unnecessary. :P","commit_id":"67d14f2c79b998460043327dd0e88564ee7abcb6"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"540f0fbbd954f56702ec6c96113997787fcbe6f8","unresolved":false,"context_lines":[{"line_number":669,"context_line":"+----------------+-----------------------------------------------------------+"},{"line_number":670,"context_line":"| Request Type   | ``GET``                                                   |"},{"line_number":671,"context_line":"+----------------+-----------------------------------------------------------+"},{"line_number":672,"context_line":"| Endpoint       | ``URL/v1/loadbalancers/{lb_id}/pools/{pool_id}``          |"},{"line_number":673,"context_line":"+----------------+---------+-------------------------------------------------+"},{"line_number":674,"context_line":"|                | Success | 200                                             |"},{"line_number":675,"context_line":"| Response Codes +---------+-------------------------------------------------+"}],"source_content_type":"text/x-rst","patch_set":8,"id":"da6ed579_7292e04d","line":672,"updated":"2016-01-15 04:34:29.000000000","message":"Same as above, deprecated?","commit_id":"67d14f2c79b998460043327dd0e88564ee7abcb6"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"540f0fbbd954f56702ec6c96113997787fcbe6f8","unresolved":false,"context_lines":[{"line_number":700,"context_line":"+----------------+-----------------------------------------------------------+"},{"line_number":701,"context_line":"| Request Type   | ``POST``                                                  |"},{"line_number":702,"context_line":"+----------------+-----------------------------------------------------------+"},{"line_number":703,"context_line":"| Endpoint       | ``URL/v1/loadbalancers/{lb_id}/pools``                    |"},{"line_number":704,"context_line":"+----------------+---------+-------------------------------------------------+"},{"line_number":705,"context_line":"|                | Success | 202                                             |"},{"line_number":706,"context_line":"| Response Codes +---------+-------------------------------------------------+"}],"source_content_type":"text/x-rst","patch_set":8,"id":"da6ed579_92951434","line":703,"updated":"2016-01-15 04:34:29.000000000","message":"Same as above, deprecated?","commit_id":"67d14f2c79b998460043327dd0e88564ee7abcb6"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"540f0fbbd954f56702ec6c96113997787fcbe6f8","unresolved":false,"context_lines":[{"line_number":764,"context_line":"+----------------+-----------------------------------------------------------+"},{"line_number":765,"context_line":"| Request Type   | ``PUT``                                                   |"},{"line_number":766,"context_line":"+----------------+-----------------------------------------------------------+"},{"line_number":767,"context_line":"| Endpoint       | ``URL/v1/loadbalancers/{lb_id}/pools/{pool_id}``          |"},{"line_number":768,"context_line":"+----------------+---------+-------------------------------------------------+"},{"line_number":769,"context_line":"|                | Success | 202                                             |"},{"line_number":770,"context_line":"| Response Codes +---------+-------------------------------------------------+"}],"source_content_type":"text/x-rst","patch_set":8,"id":"da6ed579_3298e869","line":767,"updated":"2016-01-15 04:34:29.000000000","message":"Same as above, deprecated?","commit_id":"67d14f2c79b998460043327dd0e88564ee7abcb6"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"540f0fbbd954f56702ec6c96113997787fcbe6f8","unresolved":false,"context_lines":[{"line_number":827,"context_line":"+----------------+-----------------------------------------------------------+"},{"line_number":828,"context_line":"| Request Type   | ``DELETE``                                                |"},{"line_number":829,"context_line":"+----------------+-----------------------------------------------------------+"},{"line_number":830,"context_line":"| Endpoint       | ``URL/v1/loadbalancers/{lb_id}/pools/{pool_id}``          |"},{"line_number":831,"context_line":"+----------------+---------+-------------------------------------------------+"},{"line_number":832,"context_line":"|                | Success | 202                                             |"},{"line_number":833,"context_line":"| Response Codes +---------+-------------------------------------------------+"}],"source_content_type":"text/x-rst","patch_set":8,"id":"da6ed579_f2a6d0ac","line":830,"updated":"2016-01-15 04:34:29.000000000","message":"Same as above, deprecated?","commit_id":"67d14f2c79b998460043327dd0e88564ee7abcb6"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"540f0fbbd954f56702ec6c96113997787fcbe6f8","unresolved":false,"context_lines":[{"line_number":882,"context_line":"+----------------+-----------------------------------------------------------+"},{"line_number":883,"context_line":"| Request Type   | ``GET``                                                   |"},{"line_number":884,"context_line":"+----------------+-----------------------------------------------------------+"},{"line_number":885,"context_line":"| Endpoint       | ``URL/v1/loadbalancers/{lb_id}``\\                         |"},{"line_number":886,"context_line":"|                | ``/pools/{pool_id}/health_monitor``                       |"},{"line_number":887,"context_line":"+----------------+---------+-------------------------------------------------+"},{"line_number":888,"context_line":"|                | Success | 200                                             |"}],"source_content_type":"text/x-rst","patch_set":8,"id":"da6ed579_b2acd88c","line":885,"updated":"2016-01-15 04:34:29.000000000","message":"Same as above, deprecated?","commit_id":"67d14f2c79b998460043327dd0e88564ee7abcb6"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"540f0fbbd954f56702ec6c96113997787fcbe6f8","unresolved":false,"context_lines":[{"line_number":912,"context_line":"+----------------+-----------------------------------------------------------+"},{"line_number":913,"context_line":"| Request Type   | ``POST``                                                  |"},{"line_number":914,"context_line":"+----------------+-----------------------------------------------------------+"},{"line_number":915,"context_line":"| Endpoint       | ``URL/v1/loadbalancers/{lb_id}``\\                         |"},{"line_number":916,"context_line":"|                | ``/pools/{pool_id}/health_monitor``                       |"},{"line_number":917,"context_line":"+----------------+---------+-------------------------------------------------+"},{"line_number":918,"context_line":"|                | Success | 202                                             |"}],"source_content_type":"text/x-rst","patch_set":8,"id":"da6ed579_52b23ce6","line":915,"updated":"2016-01-15 04:34:29.000000000","message":"Same as above, deprecated?","commit_id":"67d14f2c79b998460043327dd0e88564ee7abcb6"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"540f0fbbd954f56702ec6c96113997787fcbe6f8","unresolved":false,"context_lines":[{"line_number":980,"context_line":"+----------------+-----------------------------------------------------------+"},{"line_number":981,"context_line":"| Request Type   | ``PUT``                                                   |"},{"line_number":982,"context_line":"+----------------+-----------------------------------------------------------+"},{"line_number":983,"context_line":"| Endpoint       | ``URL/v1/loadbalancers/{lb_id}``\\                         |"},{"line_number":984,"context_line":"|                | ``/pools/{pool_id}/health_monitor``                       |"},{"line_number":985,"context_line":"+----------------+---------+-------------------------------------------------+"},{"line_number":986,"context_line":"|                | Success | 202                                             |"}],"source_content_type":"text/x-rst","patch_set":8,"id":"da6ed579_f2cd7066","line":983,"updated":"2016-01-15 04:34:29.000000000","message":"Same as above, deprecated?","commit_id":"67d14f2c79b998460043327dd0e88564ee7abcb6"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"540f0fbbd954f56702ec6c96113997787fcbe6f8","unresolved":false,"context_lines":[{"line_number":1048,"context_line":"+----------------+-----------------------------------------------------------+"},{"line_number":1049,"context_line":"| Request Type   | ``DELETE``                                                |"},{"line_number":1050,"context_line":"+----------------+-----------------------------------------------------------+"},{"line_number":1051,"context_line":"| Endpoint       | ``URL/v1/loadbalancers/{lb_id}``\\                         |"},{"line_number":1052,"context_line":"|                | ``/pools/{pool_id}/health_monitor``                       |"},{"line_number":1053,"context_line":"+----------------+---------+-------------------------------------------------+"},{"line_number":1054,"context_line":"|                | Success | 202                                             |"}],"source_content_type":"text/x-rst","patch_set":8,"id":"da6ed579_d2be2cad","line":1051,"updated":"2016-01-15 04:34:29.000000000","message":"Same as above, deprecated?","commit_id":"67d14f2c79b998460043327dd0e88564ee7abcb6"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"540f0fbbd954f56702ec6c96113997787fcbe6f8","unresolved":false,"context_lines":[{"line_number":1089,"context_line":"+----------------+-----------------------------------------------------------+"},{"line_number":1090,"context_line":"| Request Type   | ``GET``                                                   |"},{"line_number":1091,"context_line":"+----------------+-----------------------------------------------------------+"},{"line_number":1092,"context_line":"| Endpoint       | ``URL/v1/loadbalancers/{lb_id}``\\                         |"},{"line_number":1093,"context_line":"|                | ``/pools/{pool_id}/members``                              |"},{"line_number":1094,"context_line":"+----------------+---------+-------------------------------------------------+"},{"line_number":1095,"context_line":"|                | Success | 200                                             |"}],"source_content_type":"text/x-rst","patch_set":8,"id":"da6ed579_92e3d4d8","line":1092,"updated":"2016-01-15 04:34:29.000000000","message":"Same as above, deprecated?","commit_id":"67d14f2c79b998460043327dd0e88564ee7abcb6"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"540f0fbbd954f56702ec6c96113997787fcbe6f8","unresolved":false,"context_lines":[{"line_number":1120,"context_line":"+----------------+-----------------------------------------------------------+"},{"line_number":1121,"context_line":"| Request Type   | ``GET``                                                   |"},{"line_number":1122,"context_line":"+----------------+-----------------------------------------------------------+"},{"line_number":1123,"context_line":"| Endpoint       | ``URL/v1/loadbalancers/{lb_id}``\\                         |"},{"line_number":1124,"context_line":"|                | ``/pools/{pool_id}/members/{member_id}``                  |"},{"line_number":1125,"context_line":"+----------------+---------+-------------------------------------------------+"},{"line_number":1126,"context_line":"|                | Success | 200                                             |"}],"source_content_type":"text/x-rst","patch_set":8,"id":"da6ed579_f2d490ec","line":1123,"updated":"2016-01-15 04:34:29.000000000","message":"Same as above, deprecated?","commit_id":"67d14f2c79b998460043327dd0e88564ee7abcb6"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"540f0fbbd954f56702ec6c96113997787fcbe6f8","unresolved":false,"context_lines":[{"line_number":1148,"context_line":"+----------------+-----------------------------------------------------------+"},{"line_number":1149,"context_line":"| Request Type   | ``POST``                                                  |"},{"line_number":1150,"context_line":"+----------------+-----------------------------------------------------------+"},{"line_number":1151,"context_line":"| Endpoint       | ``URL/v1/loadbalancers/{lb_id}``\\                         |"},{"line_number":1152,"context_line":"|                | ``/pools/{pool_id}/health_monitor``                       |"},{"line_number":1153,"context_line":"+----------------+---------+-------------------------------------------------+"},{"line_number":1154,"context_line":"|                | Success | 202                                             |"}],"source_content_type":"text/x-rst","patch_set":8,"id":"da6ed579_12d044f5","line":1151,"updated":"2016-01-15 04:34:29.000000000","message":"Same as above, deprecated?","commit_id":"67d14f2c79b998460043327dd0e88564ee7abcb6"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"540f0fbbd954f56702ec6c96113997787fcbe6f8","unresolved":false,"context_lines":[{"line_number":1202,"context_line":"+----------------+-----------------------------------------------------------+"},{"line_number":1203,"context_line":"| Request Type   | ``PUT``                                                   |"},{"line_number":1204,"context_line":"+----------------+-----------------------------------------------------------+"},{"line_number":1205,"context_line":"| Endpoint       | ``URL/v1/loadbalancers/{lb_id}``\\                         |"},{"line_number":1206,"context_line":"|                | ``/pools/{pool_id}/members/{member_id}``                  |"},{"line_number":1207,"context_line":"+----------------+---------+-------------------------------------------------+"},{"line_number":1208,"context_line":"|                | Success | 202                                             |"}],"source_content_type":"text/x-rst","patch_set":8,"id":"da6ed579_d2d5cce4","line":1205,"updated":"2016-01-15 04:34:29.000000000","message":"Same as above, deprecated?","commit_id":"67d14f2c79b998460043327dd0e88564ee7abcb6"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"540f0fbbd954f56702ec6c96113997787fcbe6f8","unresolved":false,"context_lines":[{"line_number":1250,"context_line":"+----------------+-----------------------------------------------------------+"},{"line_number":1251,"context_line":"| Request Type   | ``DELETE``                                                |"},{"line_number":1252,"context_line":"+----------------+-----------------------------------------------------------+"},{"line_number":1253,"context_line":"| Endpoint       | ``URL/v1/loadbalancers/{lb_id}``\\                         |"},{"line_number":1254,"context_line":"|                | ``/pools/{pool_id}/members/{member_id}``                  |"},{"line_number":1255,"context_line":"+----------------+---------+-------------------------------------------------+"},{"line_number":1256,"context_line":"|                | Success | 202                                             |"}],"source_content_type":"text/x-rst","patch_set":8,"id":"da6ed579_32fd486e","line":1253,"updated":"2016-01-15 04:34:29.000000000","message":"Same as above, deprecated?","commit_id":"67d14f2c79b998460043327dd0e88564ee7abcb6"},{"author":{"_account_id":8157,"name":"Bertrand LALLAU","email":"bertrand.lallau@gmail.com","username":"blallau"},"change_message_id":"a6f4a0b371ab44a89d379c730dfd695ec4275e96","unresolved":false,"context_lines":[{"line_number":477,"context_line":"        \u0027name\u0027: \u0027listener_name\u0027,"},{"line_number":478,"context_line":"        \u0027description\u0027: \u0027listener_description\u0027,"},{"line_number":479,"context_line":"        \u0027default_pool_id\u0027: \u0027uuid\u0027,"},{"line_number":480,"context_line":"        \u0027enabled\u0027: true,"},{"line_number":481,"context_line":"    }"},{"line_number":482,"context_line":""},{"line_number":483,"context_line":"**Response Example**::"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9a68dd71_af1fd46a","line":480,"range":{"start_line":480,"start_character":23,"end_line":480,"end_character":24},"updated":"2016-01-22 17:20:37.000000000","message":"comma not needed","commit_id":"49f57d09f743bf608d99f65d7bd3cc431a30164b"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"8ed21433230150978bdda8bfa84b560c6c12030c","unresolved":false,"context_lines":[{"line_number":477,"context_line":"        \u0027name\u0027: \u0027listener_name\u0027,"},{"line_number":478,"context_line":"        \u0027description\u0027: \u0027listener_description\u0027,"},{"line_number":479,"context_line":"        \u0027default_pool_id\u0027: \u0027uuid\u0027,"},{"line_number":480,"context_line":"        \u0027enabled\u0027: true,"},{"line_number":481,"context_line":"    }"},{"line_number":482,"context_line":""},{"line_number":483,"context_line":"**Response Example**::"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9a68dd71_1fa2a54b","line":480,"range":{"start_line":480,"start_character":23,"end_line":480,"end_character":24},"in_reply_to":"9a68dd71_af1fd46a","updated":"2016-01-24 02:24:04.000000000","message":"Done","commit_id":"49f57d09f743bf608d99f65d7bd3cc431a30164b"},{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"1007228aca1613cdfa08640f437ee36aa87f7a8d","unresolved":false,"context_lines":[{"line_number":640,"context_line":"+----------------+-----------------------------------------------------------+"},{"line_number":641,"context_line":"| Endpoints      | ``URL/v1/loadbalancers/{lb_id}/pools``                    |"},{"line_number":642,"context_line":"|                |                                                           |"},{"line_number":643,"context_line":"|                | ``URL/v1/loadbalancers/{lb_id}``\\                         |"},{"line_number":644,"context_line":"|                | ``/listeners/{listener_id}/pools``                        |"},{"line_number":645,"context_line":"+----------------+---------+-------------------------------------------------+"},{"line_number":646,"context_line":"|                | Success | 200                                             |"}],"source_content_type":"text/x-rst","patch_set":16,"id":"9a68dd71_53769e06","line":643,"updated":"2016-01-25 21:23:15.000000000","message":"This should also be deprecated, and a query parameter of \"?listener_id\" or something of the sort should be added to the above endpoint.  This will allow the contextualization of what pools are used by what listeners.","commit_id":"9e323ccc10adafd2389aadb7a2b20296d67075a7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"a178a0a754c0a94f8818bb95316e57510fce92a4","unresolved":false,"context_lines":[{"line_number":640,"context_line":"+----------------+-----------------------------------------------------------+"},{"line_number":641,"context_line":"| Endpoints      | ``URL/v1/loadbalancers/{lb_id}/pools``                    |"},{"line_number":642,"context_line":"|                |                                                           |"},{"line_number":643,"context_line":"|                | ``URL/v1/loadbalancers/{lb_id}``\\                         |"},{"line_number":644,"context_line":"|                | ``/listeners/{listener_id}/pools``                        |"},{"line_number":645,"context_line":"+----------------+---------+-------------------------------------------------+"},{"line_number":646,"context_line":"|                | Success | 200                                             |"}],"source_content_type":"text/x-rst","patch_set":16,"id":"9a68dd71_e19faa63","line":643,"in_reply_to":"9a68dd71_53769e06","updated":"2016-01-26 09:26:44.000000000","message":"Done","commit_id":"9e323ccc10adafd2389aadb7a2b20296d67075a7"}],"octavia/amphorae/drivers/haproxy/jinja/jinja_cfg.py":[{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"43d34fd4a4c2fe6cf059dcd4715f603bca02af99","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        if listener.default_pool:"},{"line_number":181,"context_line":"            ret_value[\u0027default_pool\u0027] \u003d self._transform_pool("},{"line_number":182,"context_line":"                listener.default_pool)"},{"line_number":183,"context_line":"        # TODO(sbalukoff): Handle pools referenced by L7Policies"},{"line_number":184,"context_line":"        return ret_value"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def _transform_pool(self, pool):"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_87a6e751","line":183,"updated":"2016-01-26 20:36:27.000000000","message":"Is this \"TODO in future patch\" or you haven\u0027t done it here yet?","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"c0aaa5062ddac70c34146d5c0c952717bb2ffe9a","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        if listener.default_pool:"},{"line_number":181,"context_line":"            ret_value[\u0027default_pool\u0027] \u003d self._transform_pool("},{"line_number":182,"context_line":"                listener.default_pool)"},{"line_number":183,"context_line":"        # TODO(sbalukoff): Handle pools referenced by L7Policies"},{"line_number":184,"context_line":"        return ret_value"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def _transform_pool(self, pool):"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_de3573f7","line":183,"in_reply_to":"9a68dd71_87a6e751","updated":"2016-01-27 00:17:05.000000000","message":"This was a note to remind myself to actually do this in a later patch set (which will be part of the several that make up the L7 functionality).  If you want me to remove this comment now I can, but... it will be removed in the appropriate L7-related patch.","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"}],"octavia/amphorae/drivers/haproxy/jinja/templates/haproxy_listener.template":[{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"43d34fd4a4c2fe6cf059dcd4715f603bca02af99","unresolved":false,"context_lines":[{"line_number":29,"context_line":"{% if loadbalancer.listener.default_pool %}"},{"line_number":30,"context_line":"{{ backend_macro(constants, loadbalancer.listener, loadbalancer.listener.default_pool) }}"},{"line_number":31,"context_line":"{% endif %}"},{"line_number":32,"context_line":"{#  TODO(sbalukoff): Will need to add pools referenced by L7Policies attached"},{"line_number":33,"context_line":"#   to the listener, but ensure each only gets listed once, eh."},{"line_number":34,"context_line":"#}"},{"line_number":35,"context_line":"{% endblock proxies %}"}],"source_content_type":"application/octet-stream","patch_set":17,"id":"9a68dd71_0748b786","line":32,"updated":"2016-01-26 20:36:27.000000000","message":"Same \"TODO\" distinction","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"c0aaa5062ddac70c34146d5c0c952717bb2ffe9a","unresolved":false,"context_lines":[{"line_number":29,"context_line":"{% if loadbalancer.listener.default_pool %}"},{"line_number":30,"context_line":"{{ backend_macro(constants, loadbalancer.listener, loadbalancer.listener.default_pool) }}"},{"line_number":31,"context_line":"{% endif %}"},{"line_number":32,"context_line":"{#  TODO(sbalukoff): Will need to add pools referenced by L7Policies attached"},{"line_number":33,"context_line":"#   to the listener, but ensure each only gets listed once, eh."},{"line_number":34,"context_line":"#}"},{"line_number":35,"context_line":"{% endblock proxies %}"}],"source_content_type":"application/octet-stream","patch_set":17,"id":"9a68dd71_7e11e75c","line":32,"in_reply_to":"9a68dd71_0748b786","updated":"2016-01-27 00:17:05.000000000","message":"Yep-- same distinction. Note to myself that will be removed in a later L7-related patch.","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11302,"name":"Phillip Toohill","email":"phillip.toohill@rackspace.com","username":"ptoohill1"},"change_message_id":"5e12e7a171a3567504185a104b655c5f10e0c914","unresolved":false,"context_lines":[{"line_number":32,"context_line":"{#  TODO(sbalukoff): Will need to add pools referenced by L7Policies attached"},{"line_number":33,"context_line":"#   to the listener, but ensure each only gets listed once, eh."},{"line_number":34,"context_line":"#}"},{"line_number":35,"context_line":"{% endblock proxies %}"}],"source_content_type":"application/octet-stream","patch_set":17,"id":"9a68dd71_f8af3929","line":35,"updated":"2016-01-26 18:30:12.000000000","message":"nit: This causes unwanted white space.\n\n Also, if I remember correctly the haproxy_listener.template was really being used because we had yet to support multiple listeners. You may want to take a look at the haproxy_loadbalancer.template and/or remove/rework them in your later updates. Maybe make note of it here?","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ab6e3f78c4ce17559f66570c7310b958a54621d8","unresolved":false,"context_lines":[{"line_number":32,"context_line":"{#  TODO(sbalukoff): Will need to add pools referenced by L7Policies attached"},{"line_number":33,"context_line":"#   to the listener, but ensure each only gets listed once, eh."},{"line_number":34,"context_line":"#}"},{"line_number":35,"context_line":"{% endblock proxies %}"}],"source_content_type":"application/octet-stream","patch_set":17,"id":"9a68dd71_c09b5b71","line":35,"in_reply_to":"9a68dd71_f8af3929","updated":"2016-01-26 20:16:20.000000000","message":"Yeah, the templates are going to need some significant changes for L7. I\u0027ll think on what we can do to make things more logical here. (I\u0027m less concerned about whitespace in the generated file as I am about readability of the template. It annoys the shit out of me that you can\u0027t really do proper indentation with a jinja template...)","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"}],"octavia/amphorae/drivers/haproxy/jinja/templates/haproxy_proxies.template":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"540f0fbbd954f56702ec6c96113997787fcbe6f8","unresolved":false,"context_lines":[{"line_number":54,"context_line":"{% if listener.protocol.lower() \u003d\u003d constants.PROTOCOL_HTTP.lower() %}"},{"line_number":55,"context_line":"    option forwardfor"},{"line_number":56,"context_line":"{% elif listener.protocol.lower() \u003d\u003d constants.PROTOCOL_TERMINATED_HTTPS.lower() %}"},{"line_number":57,"context_line":"    option forwardfor"},{"line_number":58,"context_line":"    redirect scheme https if !{ ssl_fc }"},{"line_number":59,"context_line":"{% endif %}"},{"line_number":60,"context_line":"    {{ bind_macro(constants, listener, lb_vip_address)|trim() }}"}],"source_content_type":"application/octet-stream","patch_set":8,"id":"da6ed579_9250b433","line":57,"updated":"2016-01-15 04:34:29.000000000","message":"I think forwardfor should be on the pool, as it is a re-write for the backend servers.  Backend takes precedent anyway.","commit_id":"67d14f2c79b998460043327dd0e88564ee7abcb6"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"35e4fb5f3922e0ad3caa74dbc243f8459f358c11","unresolved":false,"context_lines":[{"line_number":54,"context_line":"{% if listener.protocol.lower() \u003d\u003d constants.PROTOCOL_HTTP.lower() %}"},{"line_number":55,"context_line":"    option forwardfor"},{"line_number":56,"context_line":"{% elif listener.protocol.lower() \u003d\u003d constants.PROTOCOL_TERMINATED_HTTPS.lower() %}"},{"line_number":57,"context_line":"    option forwardfor"},{"line_number":58,"context_line":"    redirect scheme https if !{ ssl_fc }"},{"line_number":59,"context_line":"{% endif %}"},{"line_number":60,"context_line":"    {{ bind_macro(constants, listener, lb_vip_address)|trim() }}"}],"source_content_type":"application/octet-stream","patch_set":8,"id":"da6ed579_8395c433","line":57,"in_reply_to":"da6ed579_9250b433","updated":"2016-01-15 06:06:52.000000000","message":"But... the original code basing the \u0027forwardfor\u0027 on the listener.protocol attribute. Are you saying we should instead be checking the pool.protocol? And isn\u0027t *that* a change beyond the scope of the shared pools functionality? (ie. should appear in another patchset entirely?)","commit_id":"67d14f2c79b998460043327dd0e88564ee7abcb6"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"998cbd63b551c0484007ec5a00934cc50d206a10","unresolved":false,"context_lines":[{"line_number":54,"context_line":"{% if listener.protocol.lower() \u003d\u003d constants.PROTOCOL_HTTP.lower() %}"},{"line_number":55,"context_line":"    option forwardfor"},{"line_number":56,"context_line":"{% elif listener.protocol.lower() \u003d\u003d constants.PROTOCOL_TERMINATED_HTTPS.lower() %}"},{"line_number":57,"context_line":"    option forwardfor"},{"line_number":58,"context_line":"    redirect scheme https if !{ ssl_fc }"},{"line_number":59,"context_line":"{% endif %}"},{"line_number":60,"context_line":"    {{ bind_macro(constants, listener, lb_vip_address)|trim() }}"}],"source_content_type":"application/octet-stream","patch_set":21,"id":"5a5ae5dd_8ddee96b","line":57,"updated":"2016-02-04 02:00:42.000000000","message":"The shed should be red....\nI think forwardfor is a backend/pool setting instead of putting it on the frontend.  Mostly because the backend will override the frontend setting and I like to be explicit in the user modifiable templates.","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ec8b009f97bfa5ef665a186dfad0fa1f3ed77969","unresolved":false,"context_lines":[{"line_number":54,"context_line":"{% if listener.protocol.lower() \u003d\u003d constants.PROTOCOL_HTTP.lower() %}"},{"line_number":55,"context_line":"    option forwardfor"},{"line_number":56,"context_line":"{% elif listener.protocol.lower() \u003d\u003d constants.PROTOCOL_TERMINATED_HTTPS.lower() %}"},{"line_number":57,"context_line":"    option forwardfor"},{"line_number":58,"context_line":"    redirect scheme https if !{ ssl_fc }"},{"line_number":59,"context_line":"{% endif %}"},{"line_number":60,"context_line":"    {{ bind_macro(constants, listener, lb_vip_address)|trim() }}"}],"source_content_type":"application/octet-stream","patch_set":21,"id":"5a5ae5dd_815eb210","line":57,"in_reply_to":"5a5ae5dd_8ddee96b","updated":"2016-02-04 10:52:57.000000000","message":"This was mostly to try to keep listener stuff in the frontend section and pool stuff in the backend section.\n\nThe more I think about this (since the conversation at the mid-cycle), the more I agree with you; I think I\u0027ll change this to key off the pool\u0027s protocol instead (until the patch merges which allows these options to be configurable based on pool properties.)","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"}],"octavia/api/v1/controllers/health_monitor.py":[{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"43d34fd4a4c2fe6cf059dcd4715f603bca02af99","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        return db_hm"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    @wsme_pecan.wsexpose(hm_types.HealthMonitorResponse)"},{"line_number":56,"context_line":"    def get_all(self):"},{"line_number":57,"context_line":"        \"\"\"Gets a single health monitor\u0027s details.\"\"\""},{"line_number":58,"context_line":"        # NOTE(blogan): since a pool can only have one health monitor"},{"line_number":59,"context_line":"        # we are using the get_all method to only get the single health monitor"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_c39b7271","line":56,"updated":"2016-01-26 20:36:27.000000000","message":"I can\u0027t say I agree with this, though I\u0027m not sure this place is right to fix it.  \"get_all\" when a pool can only have one HM should throw an error response, unless we plan to someday have a 1:M or N:M relationship for pools:HMs","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"c0aaa5062ddac70c34146d5c0c952717bb2ffe9a","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        return db_hm"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    @wsme_pecan.wsexpose(hm_types.HealthMonitorResponse)"},{"line_number":56,"context_line":"    def get_all(self):"},{"line_number":57,"context_line":"        \"\"\"Gets a single health monitor\u0027s details.\"\"\""},{"line_number":58,"context_line":"        # NOTE(blogan): since a pool can only have one health monitor"},{"line_number":59,"context_line":"        # we are using the get_all method to only get the single health monitor"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_e96be383","line":56,"in_reply_to":"9a68dd71_c39b7271","updated":"2016-01-27 00:17:05.000000000","message":"So the fact that health_monitors are their own distinct objects instead of just attributes of a pool has always been a bit confusing to me. Would a pool ever have more than one health monitor? How does that even make sense?\n\nThis is something we inherited back from the bad old lbaasv1 days, and I suspect it has to do with the idea that some vendors actually have distinct health monitors that can be shared between pools or something. Not wanting to rock the boat, lbaasv2 (and Octavia) adopted the same structure even though it doesn\u0027t really make much sense for something that is powered by haproxy. Whether we want to \"fix\" this is a discussion probably to be had around Neutron-LBaaS.\n\nIn any case, I don\u0027t think that the shared pools patch is the right place to address this, eh.","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"998cbd63b551c0484007ec5a00934cc50d206a10","unresolved":false,"context_lines":[{"line_number":106,"context_line":"            self.repositories.load_balancer.update("},{"line_number":107,"context_line":"                context.session, self.load_balancer_id,"},{"line_number":108,"context_line":"                provisioning_status\u003dconstants.ACTIVE)"},{"line_number":109,"context_line":"            if self.listener_id:"},{"line_number":110,"context_line":"                self.repositories.listener.update("},{"line_number":111,"context_line":"                    context.session, self.listener_id,"},{"line_number":112,"context_line":"                    provisioning_status\u003dconstants.ACTIVE)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_13645c20","line":109,"updated":"2016-02-04 02:00:42.000000000","message":"The unit test needs to be updated for this conditional path.  (admittedly this unit test was incomplete before, but you touched it, so you bought it... grin)","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ec8b009f97bfa5ef665a186dfad0fa1f3ed77969","unresolved":false,"context_lines":[{"line_number":106,"context_line":"            self.repositories.load_balancer.update("},{"line_number":107,"context_line":"                context.session, self.load_balancer_id,"},{"line_number":108,"context_line":"                provisioning_status\u003dconstants.ACTIVE)"},{"line_number":109,"context_line":"            if self.listener_id:"},{"line_number":110,"context_line":"                self.repositories.listener.update("},{"line_number":111,"context_line":"                    context.session, self.listener_id,"},{"line_number":112,"context_line":"                    provisioning_status\u003dconstants.ACTIVE)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_c747da1b","line":109,"in_reply_to":"5a5ae5dd_13645c20","updated":"2016-02-04 10:52:57.000000000","message":"A couple things about this:\n\nFirst, it\u0027s a little bit dickish to ask me to fix existing technical debt at the same time as doing something as overarchingly huge as the rest of the stuff in this patch. I am impressed, padawan. ;)\n\nSecond... by unit test, I assume you mean functional test? Because the only unit tests for api stuff that we have are checking input types.\n\nThird... I *think* I\u0027ve added this in the right place in the health monitor functional testing stuff (verifying listener and load balancer status in the test_bad_create call. That should verify this code path is being executed.) Please let me know if I should be putting this somewhere else.","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"998cbd63b551c0484007ec5a00934cc50d206a10","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            self.handler.create(db_hm)"},{"line_number":119,"context_line":"        except Exception:"},{"line_number":120,"context_line":"            with excutils.save_and_reraise_exception(reraise\u003dFalse):"},{"line_number":121,"context_line":"                if self.listener_id:"},{"line_number":122,"context_line":"                    self.repositories.listener.update("},{"line_number":123,"context_line":"                        context.session, self.listener_id,"},{"line_number":124,"context_line":"                        operating_status\u003dconstants.ERROR)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_d36d6405","line":121,"updated":"2016-02-04 02:00:42.000000000","message":"Same unit test issue here.","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ec8b009f97bfa5ef665a186dfad0fa1f3ed77969","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            self.handler.create(db_hm)"},{"line_number":119,"context_line":"        except Exception:"},{"line_number":120,"context_line":"            with excutils.save_and_reraise_exception(reraise\u003dFalse):"},{"line_number":121,"context_line":"                if self.listener_id:"},{"line_number":122,"context_line":"                    self.repositories.listener.update("},{"line_number":123,"context_line":"                        context.session, self.listener_id,"},{"line_number":124,"context_line":"                        operating_status\u003dconstants.ERROR)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_45eafd10","line":121,"in_reply_to":"5a5ae5dd_d36d6405","updated":"2016-02-04 10:52:57.000000000","message":"Many bogons died to bring you this test. In related news, mock mocks me, and rm_work is awesome.","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"998cbd63b551c0484007ec5a00934cc50d206a10","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            self.handler.update(db_hm, health_monitor)"},{"line_number":145,"context_line":"        except Exception:"},{"line_number":146,"context_line":"            with excutils.save_and_reraise_exception(reraise\u003dFalse):"},{"line_number":147,"context_line":"                if self.listener_id:"},{"line_number":148,"context_line":"                    self.repositories.listener.update("},{"line_number":149,"context_line":"                        context.session, self.listener_id,"},{"line_number":150,"context_line":"                        operating_status\u003dconstants.ERROR)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_93784cc6","line":147,"updated":"2016-02-04 02:00:42.000000000","message":"Same unit test issue here.","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ec8b009f97bfa5ef665a186dfad0fa1f3ed77969","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            self.handler.update(db_hm, health_monitor)"},{"line_number":145,"context_line":"        except Exception:"},{"line_number":146,"context_line":"            with excutils.save_and_reraise_exception(reraise\u003dFalse):"},{"line_number":147,"context_line":"                if self.listener_id:"},{"line_number":148,"context_line":"                    self.repositories.listener.update("},{"line_number":149,"context_line":"                        context.session, self.listener_id,"},{"line_number":150,"context_line":"                        operating_status\u003dconstants.ERROR)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_25390142","line":147,"in_reply_to":"5a5ae5dd_93784cc6","updated":"2016-02-04 10:52:57.000000000","message":"Another bogon dead.","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"998cbd63b551c0484007ec5a00934cc50d206a10","unresolved":false,"context_lines":[{"line_number":164,"context_line":"            self.handler.delete(db_hm)"},{"line_number":165,"context_line":"        except Exception:"},{"line_number":166,"context_line":"            with excutils.save_and_reraise_exception(reraise\u003dFalse):"},{"line_number":167,"context_line":"                if self.listener_id:"},{"line_number":168,"context_line":"                    self.repositories.listener.update("},{"line_number":169,"context_line":"                        context.session, self.listener_id,"},{"line_number":170,"context_line":"                        operating_status\u003dconstants.ERROR)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_5382d495","line":167,"updated":"2016-02-04 02:00:42.000000000","message":"Same unit test issue here.","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ec8b009f97bfa5ef665a186dfad0fa1f3ed77969","unresolved":false,"context_lines":[{"line_number":164,"context_line":"            self.handler.delete(db_hm)"},{"line_number":165,"context_line":"        except Exception:"},{"line_number":166,"context_line":"            with excutils.save_and_reraise_exception(reraise\u003dFalse):"},{"line_number":167,"context_line":"                if self.listener_id:"},{"line_number":168,"context_line":"                    self.repositories.listener.update("},{"line_number":169,"context_line":"                        context.session, self.listener_id,"},{"line_number":170,"context_line":"                        operating_status\u003dconstants.ERROR)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_c5402da8","line":167,"in_reply_to":"5a5ae5dd_5382d495","updated":"2016-02-04 10:52:57.000000000","message":"...and another.","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"5a73ac9ba4b2f968b0fc94d2a456cf0ea363e36e","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        db_hm \u003d self._get_db_hm(context.session)"},{"line_number":62,"context_line":"        return self._convert_db_to_type(db_hm, hm_types.HealthMonitorResponse)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def _test_lb_status(self, session, hm\u003dNone):"},{"line_number":65,"context_line":"        \"\"\"Verify load balancer is in a mutable state.\"\"\""},{"line_number":66,"context_line":"        # We need to verify that any listeners referencing this pool are also"},{"line_number":67,"context_line":"        # mutable"}],"source_content_type":"text/x-python","patch_set":23,"id":"5a5ae5dd_08e4f00a","line":64,"updated":"2016-02-04 21:40:47.000000000","message":"nit: This method checks lb and the listener mutability, should potentially be named more appropriately.","commit_id":"189f6f0842b5f8703314a5bfd883aeff13fc8fd6"},{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"8998dbd833c3a54d6fa6340810654f242f09fdf5","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        db_hm \u003d self._get_db_hm(context.session)"},{"line_number":62,"context_line":"        return self._convert_db_to_type(db_hm, hm_types.HealthMonitorResponse)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def _test_lb_status(self, session, hm\u003dNone):"},{"line_number":65,"context_line":"        \"\"\"Verify load balancer is in a mutable state.\"\"\""},{"line_number":66,"context_line":"        # We need to verify that any listeners referencing this pool are also"},{"line_number":67,"context_line":"        # mutable"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a5ae5dd_4b5c22ed","line":64,"updated":"2016-02-04 21:44:28.000000000","message":"nit: This method checks lb and the listener mutability, should potentially be named more appropriately.","commit_id":"89a4cebe355a57f44eef4239a25b421855836fbd"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"e14d08b992472415ba0d81a8a1ef7eb34c2345f8","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        db_hm \u003d self._get_db_hm(context.session)"},{"line_number":62,"context_line":"        return self._convert_db_to_type(db_hm, hm_types.HealthMonitorResponse)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def _test_lb_status(self, session, hm\u003dNone):"},{"line_number":65,"context_line":"        \"\"\"Verify load balancer is in a mutable state.\"\"\""},{"line_number":66,"context_line":"        # We need to verify that any listeners referencing this pool are also"},{"line_number":67,"context_line":"        # mutable"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a5ae5dd_cba9f27c","line":64,"in_reply_to":"5a5ae5dd_4b5c22ed","updated":"2016-02-04 21:53:18.000000000","message":"Done","commit_id":"89a4cebe355a57f44eef4239a25b421855836fbd"}],"octavia/api/v1/controllers/listener.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"998cbd63b551c0484007ec5a00934cc50d206a10","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        return self._convert_db_to_type(db_listeners,"},{"line_number":74,"context_line":"                                        [listener_types.ListenerResponse])"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def _test_lb_status(self, session, id\u003dNone,"},{"line_number":77,"context_line":"                        listener_status\u003dconstants.PENDING_UPDATE):"},{"line_number":78,"context_line":"        \"\"\"Verify load balancer is in a mutable state.\"\"\""},{"line_number":79,"context_line":"        lb_repo \u003d self.repositories.load_balancer"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_0d38b99f","line":76,"updated":"2016-02-04 02:00:42.000000000","message":"Can we call this listener_id?  It\u0027s a bit confusing as the method is \"_test_lb_status\" so I would expect id to be the load balancer id.","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ec8b009f97bfa5ef665a186dfad0fa1f3ed77969","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        return self._convert_db_to_type(db_listeners,"},{"line_number":74,"context_line":"                                        [listener_types.ListenerResponse])"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def _test_lb_status(self, session, id\u003dNone,"},{"line_number":77,"context_line":"                        listener_status\u003dconstants.PENDING_UPDATE):"},{"line_number":78,"context_line":"        \"\"\"Verify load balancer is in a mutable state.\"\"\""},{"line_number":79,"context_line":"        lb_repo \u003d self.repositories.load_balancer"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_657db9e6","line":76,"in_reply_to":"5a5ae5dd_0d38b99f","updated":"2016-02-04 10:52:57.000000000","message":"I\u0027ll make it both-- since listener_id will get checked if it\u0027s present, but the load balancer will always get checked, regardless.","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"}],"octavia/api/v1/controllers/load_balancer.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"998cbd63b551c0484007ec5a00934cc50d206a10","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        lb_dict \u003d load_balancer.to_dict()"},{"line_number":89,"context_line":"        vip_dict \u003d lb_dict.pop(\u0027vip\u0027)"},{"line_number":90,"context_line":"        lb_dict[\u0027provisioning_status\u0027] \u003d constants.PENDING_CREATE"},{"line_number":91,"context_line":"        lb_dict[\u0027operating_status\u0027] \u003d constants.OFFLINE"},{"line_number":92,"context_line":"        try:"},{"line_number":93,"context_line":"            db_lb \u003d self.repositories.create_load_balancer_and_vip("},{"line_number":94,"context_line":"                context.session, lb_dict, vip_dict)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_cd41410d","line":91,"updated":"2016-02-04 02:00:42.000000000","message":"Why did we drop project_id here?","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ec8b009f97bfa5ef665a186dfad0fa1f3ed77969","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        lb_dict \u003d load_balancer.to_dict()"},{"line_number":89,"context_line":"        vip_dict \u003d lb_dict.pop(\u0027vip\u0027)"},{"line_number":90,"context_line":"        lb_dict[\u0027provisioning_status\u0027] \u003d constants.PENDING_CREATE"},{"line_number":91,"context_line":"        lb_dict[\u0027operating_status\u0027] \u003d constants.OFFLINE"},{"line_number":92,"context_line":"        try:"},{"line_number":93,"context_line":"            db_lb \u003d self.repositories.create_load_balancer_and_vip("},{"line_number":94,"context_line":"                context.session, lb_dict, vip_dict)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_65f29971","line":91,"in_reply_to":"5a5ae5dd_cd41410d","updated":"2016-02-04 10:52:57.000000000","message":"Good catch. This was probably a rebase mistake on my part. I\u0027ll add it back in.","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"}],"octavia/api/v1/controllers/member.py":[{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"636fea6a1b071e52f7503f582ccafd3624ecb1af","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright 2014 Rackspace"},{"line_number":2,"context_line":"#    Copyright 2015 Blue Box, an IBM Company"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":5,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a68dd71_042c1eaa","line":2,"range":{"start_line":2,"start_character":15,"end_line":2,"end_character":19},"updated":"2016-01-27 01:09:21.000000000","message":"2015 eh?","commit_id":"4730c62629bd4c654aad362c4e5ee22a4e7ff72f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"998cbd63b551c0484007ec5a00934cc50d206a10","unresolved":false,"context_lines":[{"line_number":105,"context_line":"            self.repositories.load_balancer.update("},{"line_number":106,"context_line":"                context.session, self.load_balancer_id,"},{"line_number":107,"context_line":"                provisioning_status\u003dconstants.ACTIVE)"},{"line_number":108,"context_line":"            if self.listener_id:"},{"line_number":109,"context_line":"                self.repositories.listener.update("},{"line_number":110,"context_line":"                    context.session, self.listener_id,"},{"line_number":111,"context_line":"                    provisioning_status\u003dconstants.ACTIVE)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_b321c8b6","line":108,"updated":"2016-02-04 02:00:42.000000000","message":"The unit test does not cover both paths of this conditional.","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ec8b009f97bfa5ef665a186dfad0fa1f3ed77969","unresolved":false,"context_lines":[{"line_number":105,"context_line":"            self.repositories.load_balancer.update("},{"line_number":106,"context_line":"                context.session, self.load_balancer_id,"},{"line_number":107,"context_line":"                provisioning_status\u003dconstants.ACTIVE)"},{"line_number":108,"context_line":"            if self.listener_id:"},{"line_number":109,"context_line":"                self.repositories.listener.update("},{"line_number":110,"context_line":"                    context.session, self.listener_id,"},{"line_number":111,"context_line":"                    provisioning_status\u003dconstants.ACTIVE)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_056e4501","line":108,"in_reply_to":"5a5ae5dd_b321c8b6","updated":"2016-02-04 10:52:57.000000000","message":"Yep. Just like the health_monitor controller. You\u0027re really into killing bogons, aren\u0027t you? ;)\n\nI\u0027ll get it added (as I have done for the rest).","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"998cbd63b551c0484007ec5a00934cc50d206a10","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            self.handler.update(db_member, member)"},{"line_number":143,"context_line":"        except Exception:"},{"line_number":144,"context_line":"            with excutils.save_and_reraise_exception(reraise\u003dFalse):"},{"line_number":145,"context_line":"                if self.listener_id:"},{"line_number":146,"context_line":"                    self.repositories.listener.update("},{"line_number":147,"context_line":"                        context.session, self.listener_id,"},{"line_number":148,"context_line":"                        operating_status\u003dconstants.ERROR)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_5307341c","line":145,"updated":"2016-02-04 02:00:42.000000000","message":"Missing unit test for this.\n(same story as before)","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ec8b009f97bfa5ef665a186dfad0fa1f3ed77969","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            self.handler.update(db_member, member)"},{"line_number":143,"context_line":"        except Exception:"},{"line_number":144,"context_line":"            with excutils.save_and_reraise_exception(reraise\u003dFalse):"},{"line_number":145,"context_line":"                if self.listener_id:"},{"line_number":146,"context_line":"                    self.repositories.listener.update("},{"line_number":147,"context_line":"                        context.session, self.listener_id,"},{"line_number":148,"context_line":"                        operating_status\u003dconstants.ERROR)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_c0c57b8e","line":145,"in_reply_to":"5a5ae5dd_5307341c","updated":"2016-02-04 10:52:57.000000000","message":"Done","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"998cbd63b551c0484007ec5a00934cc50d206a10","unresolved":false,"context_lines":[{"line_number":162,"context_line":"            self.handler.delete(db_member)"},{"line_number":163,"context_line":"        except Exception:"},{"line_number":164,"context_line":"            with excutils.save_and_reraise_exception(reraise\u003dFalse):"},{"line_number":165,"context_line":"                if self.listener_id:"},{"line_number":166,"context_line":"                    self.repositories.listener.update("},{"line_number":167,"context_line":"                        context.session, self.listener_id,"},{"line_number":168,"context_line":"                        operating_status\u003dconstants.ERROR)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_d609d22d","line":165,"updated":"2016-02-04 02:00:42.000000000","message":"Same missing unit test.","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ec8b009f97bfa5ef665a186dfad0fa1f3ed77969","unresolved":false,"context_lines":[{"line_number":162,"context_line":"            self.handler.delete(db_member)"},{"line_number":163,"context_line":"        except Exception:"},{"line_number":164,"context_line":"            with excutils.save_and_reraise_exception(reraise\u003dFalse):"},{"line_number":165,"context_line":"                if self.listener_id:"},{"line_number":166,"context_line":"                    self.repositories.listener.update("},{"line_number":167,"context_line":"                        context.session, self.listener_id,"},{"line_number":168,"context_line":"                        operating_status\u003dconstants.ERROR)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_80bf83fa","line":165,"in_reply_to":"5a5ae5dd_d609d22d","updated":"2016-02-04 10:52:57.000000000","message":"Done","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"5a73ac9ba4b2f968b0fc94d2a456cf0ea363e36e","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        self.handler \u003d self.handler.member"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def _get_db_member(self, session, id):"},{"line_number":45,"context_line":"        \"\"\"Gets the current member object from the database.\"\"\""},{"line_number":46,"context_line":"        db_member \u003d self.repositories.member.get(session, id\u003did)"},{"line_number":47,"context_line":"        if not db_member:"},{"line_number":48,"context_line":"            LOG.info(_LI(\"Member %s not found\"), id)"}],"source_content_type":"text/x-python","patch_set":23,"id":"5a5ae5dd_2813ec67","line":45,"range":{"start_line":45,"start_character":16,"end_line":45,"end_character":27},"updated":"2016-02-04 21:40:47.000000000","message":"nit: replace with \"a specific\".  You provide an ID to the method, so it just seems more clear.  Maybe you disagree.  I don\u0027t know.  Pedantic.","commit_id":"189f6f0842b5f8703314a5bfd883aeff13fc8fd6"},{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"5a73ac9ba4b2f968b0fc94d2a456cf0ea363e36e","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        return self._convert_db_to_type(db_members,"},{"line_number":67,"context_line":"                                        [member_types.MemberResponse])"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def _test_lb_status(self, session, member\u003dNone):"},{"line_number":70,"context_line":"        \"\"\"Verify load balancer is in a mutable state.\"\"\""},{"line_number":71,"context_line":"        # We need to verify that any listeners referencing this member\u0027s"},{"line_number":72,"context_line":"        # pool are also mutable"}],"source_content_type":"text/x-python","patch_set":23,"id":"5a5ae5dd_2bf446f0","line":69,"updated":"2016-02-04 21:40:47.000000000","message":"nit: Same about the name change.","commit_id":"189f6f0842b5f8703314a5bfd883aeff13fc8fd6"},{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"8998dbd833c3a54d6fa6340810654f242f09fdf5","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        self.handler \u003d self.handler.member"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def _get_db_member(self, session, id):"},{"line_number":45,"context_line":"        \"\"\"Gets the current member object from the database.\"\"\""},{"line_number":46,"context_line":"        db_member \u003d self.repositories.member.get(session, id\u003did)"},{"line_number":47,"context_line":"        if not db_member:"},{"line_number":48,"context_line":"            LOG.info(_LI(\"Member %s not found\"), id)"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a5ae5dd_0bf62ad7","line":45,"range":{"start_line":45,"start_character":16,"end_line":45,"end_character":27},"updated":"2016-02-04 21:44:28.000000000","message":"nit: replace with \"a specific\".  You provide an ID to the method, so it just seems more clear.  Maybe you disagree.  I don\u0027t know.  Pedantic.","commit_id":"89a4cebe355a57f44eef4239a25b421855836fbd"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"e14d08b992472415ba0d81a8a1ef7eb34c2345f8","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        self.handler \u003d self.handler.member"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def _get_db_member(self, session, id):"},{"line_number":45,"context_line":"        \"\"\"Gets the current member object from the database.\"\"\""},{"line_number":46,"context_line":"        db_member \u003d self.repositories.member.get(session, id\u003did)"},{"line_number":47,"context_line":"        if not db_member:"},{"line_number":48,"context_line":"            LOG.info(_LI(\"Member %s not found\"), id)"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a5ae5dd_ebd2aeff","line":45,"range":{"start_line":45,"start_character":16,"end_line":45,"end_character":27},"in_reply_to":"5a5ae5dd_0bf62ad7","updated":"2016-02-04 21:53:18.000000000","message":"Done","commit_id":"89a4cebe355a57f44eef4239a25b421855836fbd"},{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"8998dbd833c3a54d6fa6340810654f242f09fdf5","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        return self._convert_db_to_type(db_members,"},{"line_number":67,"context_line":"                                        [member_types.MemberResponse])"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def _test_lb_status(self, session, member\u003dNone):"},{"line_number":70,"context_line":"        \"\"\"Verify load balancer is in a mutable state.\"\"\""},{"line_number":71,"context_line":"        # We need to verify that any listeners referencing this member\u0027s"},{"line_number":72,"context_line":"        # pool are also mutable"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a5ae5dd_6b06becf","line":69,"updated":"2016-02-04 21:44:28.000000000","message":"nit: Same about the name change.","commit_id":"89a4cebe355a57f44eef4239a25b421855836fbd"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"e14d08b992472415ba0d81a8a1ef7eb34c2345f8","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        return self._convert_db_to_type(db_members,"},{"line_number":67,"context_line":"                                        [member_types.MemberResponse])"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def _test_lb_status(self, session, member\u003dNone):"},{"line_number":70,"context_line":"        \"\"\"Verify load balancer is in a mutable state.\"\"\""},{"line_number":71,"context_line":"        # We need to verify that any listeners referencing this member\u0027s"},{"line_number":72,"context_line":"        # pool are also mutable"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a5ae5dd_cbd7b2eb","line":69,"in_reply_to":"5a5ae5dd_6b06becf","updated":"2016-02-04 21:53:18.000000000","message":"Done","commit_id":"89a4cebe355a57f44eef4239a25b421855836fbd"}],"octavia/api/v1/controllers/pool.py":[{"author":{"_account_id":11302,"name":"Phillip Toohill","email":"phillip.toohill@rackspace.com","username":"ptoohill1"},"change_message_id":"21021edadb04f1e5943303e743f6835c289927ca","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        which controller, if any, should control be passed."},{"line_number":208,"context_line":"        \"\"\""},{"line_number":209,"context_line":"        context \u003d pecan.request.context.get(\u0027octavia_context\u0027)"},{"line_number":210,"context_line":"        if pool_id and len(remainder) and (remainder[0] \u003d\u003d \u0027members\u0027 or"},{"line_number":211,"context_line":"                                           remainder[0] \u003d\u003d \u0027healthmonitor\u0027):"},{"line_number":212,"context_line":"            controller \u003d remainder[0]"},{"line_number":213,"context_line":"            remainder \u003d remainder[1:]"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a68dd71_60091431","line":210,"range":{"start_line":210,"start_character":60,"end_line":210,"end_character":67},"updated":"2016-01-21 23:58:40.000000000","message":"Can we get these put into constants? ~Throughout patch","commit_id":"49f57d09f743bf608d99f65d7bd3cc431a30164b"},{"author":{"_account_id":11302,"name":"Phillip Toohill","email":"phillip.toohill@rackspace.com","username":"ptoohill1"},"change_message_id":"cbda135b5160cb8fbf261d3f8dd3f48b13496dbe","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        which controller, if any, should control be passed."},{"line_number":208,"context_line":"        \"\"\""},{"line_number":209,"context_line":"        context \u003d pecan.request.context.get(\u0027octavia_context\u0027)"},{"line_number":210,"context_line":"        if pool_id and len(remainder) and (remainder[0] \u003d\u003d \u0027members\u0027 or"},{"line_number":211,"context_line":"                                           remainder[0] \u003d\u003d \u0027healthmonitor\u0027):"},{"line_number":212,"context_line":"            controller \u003d remainder[0]"},{"line_number":213,"context_line":"            remainder \u003d remainder[1:]"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a68dd71_17096e31","line":210,"range":{"start_line":210,"start_character":60,"end_line":210,"end_character":67},"in_reply_to":"9a68dd71_0cf5e581","updated":"2016-01-22 08:40:22.000000000","message":"No biggie. nit","commit_id":"49f57d09f743bf608d99f65d7bd3cc431a30164b"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"0fc0fc227cb13e5522567483e1ab90f902388fdd","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        which controller, if any, should control be passed."},{"line_number":208,"context_line":"        \"\"\""},{"line_number":209,"context_line":"        context \u003d pecan.request.context.get(\u0027octavia_context\u0027)"},{"line_number":210,"context_line":"        if pool_id and len(remainder) and (remainder[0] \u003d\u003d \u0027members\u0027 or"},{"line_number":211,"context_line":"                                           remainder[0] \u003d\u003d \u0027healthmonitor\u0027):"},{"line_number":212,"context_line":"            controller \u003d remainder[0]"},{"line_number":213,"context_line":"            remainder \u003d remainder[1:]"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a68dd71_0cf5e581","line":210,"range":{"start_line":210,"start_character":60,"end_line":210,"end_character":67},"in_reply_to":"9a68dd71_60091431","updated":"2016-01-22 08:05:44.000000000","message":"Probably. But is it worth it? (The original code didn\u0027t have this, and I\u0027m pretty sure those constants would only be used in these API files.)","commit_id":"49f57d09f743bf608d99f65d7bd3cc431a30164b"},{"author":{"_account_id":11302,"name":"Phillip Toohill","email":"phillip.toohill@rackspace.com","username":"ptoohill1"},"change_message_id":"21021edadb04f1e5943303e743f6835c289927ca","unresolved":false,"context_lines":[{"line_number":216,"context_line":"                LOG.info(_LI(\"Pool %s not found.\"), pool_id)"},{"line_number":217,"context_line":"                raise exceptions.NotFound(resource\u003ddata_models.Pool._name(),"},{"line_number":218,"context_line":"                                          id\u003dpool_id)"},{"line_number":219,"context_line":"            if controller \u003d\u003d \u0027members\u0027:"},{"line_number":220,"context_line":"                return member.MembersController("},{"line_number":221,"context_line":"                    load_balancer_id\u003dself.load_balancer_id,"},{"line_number":222,"context_line":"                    pool_id\u003ddb_pool.id,"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a68dd71_f45e2511","line":219,"updated":"2016-01-21 23:58:40.000000000","message":"When going through workflow:\n\ncreate lb\u003elistener\u003epool\u003emember, and in this specific case, the endpoint being pool\u003emember, the listener id is never populated. This makes the rest of the workflow basically do nothing as the data that gets updated later on in the flows is the listener data and since its never loaded/passed along nothing is updated.\n\nAlso, to note, the pool was created with a loadbalancer_id, so that explains why its not here.","commit_id":"49f57d09f743bf608d99f65d7bd3cc431a30164b"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"b1544871e7f78e72a6a7974457e24e20c8a64837","unresolved":false,"context_lines":[{"line_number":216,"context_line":"                LOG.info(_LI(\"Pool %s not found.\"), pool_id)"},{"line_number":217,"context_line":"                raise exceptions.NotFound(resource\u003ddata_models.Pool._name(),"},{"line_number":218,"context_line":"                                          id\u003dpool_id)"},{"line_number":219,"context_line":"            if controller \u003d\u003d \u0027members\u0027:"},{"line_number":220,"context_line":"                return member.MembersController("},{"line_number":221,"context_line":"                    load_balancer_id\u003dself.load_balancer_id,"},{"line_number":222,"context_line":"                    pool_id\u003ddb_pool.id,"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a68dd71_327a64be","line":219,"in_reply_to":"9a68dd71_52805446","updated":"2016-01-22 17:03:27.000000000","message":"No, you are correct and this is almost certainly a bug. I\u0027ll see if I can track down where the bug is today. (I\u0027ll just try to re-create your exact steps.)","commit_id":"49f57d09f743bf608d99f65d7bd3cc431a30164b"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"0fc0fc227cb13e5522567483e1ab90f902388fdd","unresolved":false,"context_lines":[{"line_number":216,"context_line":"                LOG.info(_LI(\"Pool %s not found.\"), pool_id)"},{"line_number":217,"context_line":"                raise exceptions.NotFound(resource\u003ddata_models.Pool._name(),"},{"line_number":218,"context_line":"                                          id\u003dpool_id)"},{"line_number":219,"context_line":"            if controller \u003d\u003d \u0027members\u0027:"},{"line_number":220,"context_line":"                return member.MembersController("},{"line_number":221,"context_line":"                    load_balancer_id\u003dself.load_balancer_id,"},{"line_number":222,"context_line":"                    pool_id\u003ddb_pool.id,"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a68dd71_ec273110","line":219,"in_reply_to":"9a68dd71_94bb29e5","updated":"2016-01-22 08:05:44.000000000","message":"Just to verify how you\u0027re running the workflow:  Are you doing this through the neutron client + lbaasv2, or going this directly against the Octavia API?  (Just trying to limit where to look for this bug.)","commit_id":"49f57d09f743bf608d99f65d7bd3cc431a30164b"},{"author":{"_account_id":11302,"name":"Phillip Toohill","email":"phillip.toohill@rackspace.com","username":"ptoohill1"},"change_message_id":"cbda135b5160cb8fbf261d3f8dd3f48b13496dbe","unresolved":false,"context_lines":[{"line_number":216,"context_line":"                LOG.info(_LI(\"Pool %s not found.\"), pool_id)"},{"line_number":217,"context_line":"                raise exceptions.NotFound(resource\u003ddata_models.Pool._name(),"},{"line_number":218,"context_line":"                                          id\u003dpool_id)"},{"line_number":219,"context_line":"            if controller \u003d\u003d \u0027members\u0027:"},{"line_number":220,"context_line":"                return member.MembersController("},{"line_number":221,"context_line":"                    load_balancer_id\u003dself.load_balancer_id,"},{"line_number":222,"context_line":"                    pool_id\u003ddb_pool.id,"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a68dd71_52805446","line":219,"in_reply_to":"9a68dd71_ec273110","updated":"2016-01-22 08:40:22.000000000","message":"I am going through lbaav2 sending curl requests outside of client. The data should have been saved by this point, or am I thinking about this wrong?","commit_id":"49f57d09f743bf608d99f65d7bd3cc431a30164b"},{"author":{"_account_id":11302,"name":"Phillip Toohill","email":"phillip.toohill@rackspace.com","username":"ptoohill1"},"change_message_id":"62d536acc05f849b59088cc7c635b8df4bd147dd","unresolved":false,"context_lines":[{"line_number":216,"context_line":"                LOG.info(_LI(\"Pool %s not found.\"), pool_id)"},{"line_number":217,"context_line":"                raise exceptions.NotFound(resource\u003ddata_models.Pool._name(),"},{"line_number":218,"context_line":"                                          id\u003dpool_id)"},{"line_number":219,"context_line":"            if controller \u003d\u003d \u0027members\u0027:"},{"line_number":220,"context_line":"                return member.MembersController("},{"line_number":221,"context_line":"                    load_balancer_id\u003dself.load_balancer_id,"},{"line_number":222,"context_line":"                    pool_id\u003ddb_pool.id,"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a68dd71_94bb29e5","line":219,"in_reply_to":"9a68dd71_f45e2511","updated":"2016-01-22 00:03:48.000000000","message":"Correction, the pool was NOT created with loadbalancer_id, but instead the listener_id, so i am not quite sure why its not populated here.","commit_id":"49f57d09f743bf608d99f65d7bd3cc431a30164b"},{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"43d34fd4a4c2fe6cf059dcd4715f603bca02af99","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                context.session, id\u003dself.load_balancer_id).pools"},{"line_number":82,"context_line":"        return self._convert_db_to_type(pools, [pool_types.PoolResponse])"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def _test_lb_status(self, session, pool\u003dNone):"},{"line_number":85,"context_line":"        \"\"\"Verify load balancer is in a mutable state.\"\"\""},{"line_number":86,"context_line":"        # We need to verify that any listeners referencing this pool are also"},{"line_number":87,"context_line":"        # mutable"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_65864167","line":84,"updated":"2016-01-26 20:36:27.000000000","message":"Should possibly name \"_test_lb_listener_statuses\" or something since it actually checks more than just the LB status now.","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"c0aaa5062ddac70c34146d5c0c952717bb2ffe9a","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                context.session, id\u003dself.load_balancer_id).pools"},{"line_number":82,"context_line":"        return self._convert_db_to_type(pools, [pool_types.PoolResponse])"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def _test_lb_status(self, session, pool\u003dNone):"},{"line_number":85,"context_line":"        \"\"\"Verify load balancer is in a mutable state.\"\"\""},{"line_number":86,"context_line":"        # We need to verify that any listeners referencing this pool are also"},{"line_number":87,"context_line":"        # mutable"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_091757ee","line":84,"in_reply_to":"9a68dd71_65864167","updated":"2016-01-27 00:17:05.000000000","message":"Done","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"998cbd63b551c0484007ec5a00934cc50d206a10","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    def _get_db_listener(self, session, id):"},{"line_number":54,"context_line":"        \"\"\"Gets a listener object from the database.\"\"\""},{"line_number":55,"context_line":"        db_listener \u003d self.repositories.listener.get(session, id\u003did)"},{"line_number":56,"context_line":"        if not db_listener:"},{"line_number":57,"context_line":"            LOG.info(_LI(\"Listener %s not found.\"), id)"},{"line_number":58,"context_line":"            raise exceptions.NotFound(resource\u003ddata_models.Listener._name(),"},{"line_number":59,"context_line":"                                      id\u003did)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_b63696e5","line":56,"updated":"2016-02-04 02:00:42.000000000","message":"Missing unit test for this conditional path","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"f9aea2b851304f97847b66ffc66b733be7fcaf45","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    def _get_db_listener(self, session, id):"},{"line_number":54,"context_line":"        \"\"\"Gets a listener object from the database.\"\"\""},{"line_number":55,"context_line":"        db_listener \u003d self.repositories.listener.get(session, id\u003did)"},{"line_number":56,"context_line":"        if not db_listener:"},{"line_number":57,"context_line":"            LOG.info(_LI(\"Listener %s not found.\"), id)"},{"line_number":58,"context_line":"            raise exceptions.NotFound(resource\u003ddata_models.Listener._name(),"},{"line_number":59,"context_line":"                                      id\u003did)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_2ed0e21e","line":56,"in_reply_to":"5a5ae5dd_20100fa8","updated":"2016-02-04 19:28:52.000000000","message":"According to the coverage report, it\u0027s not:\nhttp://sonar.octavia.io/archive/octavia/75e3adc9d672b62bb4f611461ef3a65ae3b7324e/208/cover/octavia_api_v1_controllers_pool_py.html#n56","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"d5972f6ee34a0f03a0785373279a6798407bf58a","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    def _get_db_listener(self, session, id):"},{"line_number":54,"context_line":"        \"\"\"Gets a listener object from the database.\"\"\""},{"line_number":55,"context_line":"        db_listener \u003d self.repositories.listener.get(session, id\u003did)"},{"line_number":56,"context_line":"        if not db_listener:"},{"line_number":57,"context_line":"            LOG.info(_LI(\"Listener %s not found.\"), id)"},{"line_number":58,"context_line":"            raise exceptions.NotFound(resource\u003ddata_models.Listener._name(),"},{"line_number":59,"context_line":"                                      id\u003did)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_f46e142e","line":56,"in_reply_to":"5a5ae5dd_2ed0e21e","updated":"2016-02-04 21:09:53.000000000","message":"Aah-- you are correct. I need to do a test of get_all pools with a bad listener ID.","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ec8b009f97bfa5ef665a186dfad0fa1f3ed77969","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    def _get_db_listener(self, session, id):"},{"line_number":54,"context_line":"        \"\"\"Gets a listener object from the database.\"\"\""},{"line_number":55,"context_line":"        db_listener \u003d self.repositories.listener.get(session, id\u003did)"},{"line_number":56,"context_line":"        if not db_listener:"},{"line_number":57,"context_line":"            LOG.info(_LI(\"Listener %s not found.\"), id)"},{"line_number":58,"context_line":"            raise exceptions.NotFound(resource\u003ddata_models.Listener._name(),"},{"line_number":59,"context_line":"                                      id\u003did)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_20100fa8","line":56,"in_reply_to":"5a5ae5dd_b63696e5","updated":"2016-02-04 10:52:57.000000000","message":"Actually, test_get_all_with_listener exercises this code.","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"998cbd63b551c0484007ec5a00934cc50d206a10","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        \"\"\""},{"line_number":110,"context_line":"        # For some API requests the listener_id will be passed in the"},{"line_number":111,"context_line":"        # pool_dict:"},{"line_number":112,"context_line":"        if \u0027listener_id\u0027 in pool_dict:"},{"line_number":113,"context_line":"            if pool_dict[\u0027listener_id\u0027] is not None:"},{"line_number":114,"context_line":"                self.listener_id \u003d pool_dict.pop(\u0027listener_id\u0027)"},{"line_number":115,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_96427a3d","line":112,"updated":"2016-02-04 02:00:42.000000000","message":"Missing unit test for conditional path","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ec8b009f97bfa5ef665a186dfad0fa1f3ed77969","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        \"\"\""},{"line_number":110,"context_line":"        # For some API requests the listener_id will be passed in the"},{"line_number":111,"context_line":"        # pool_dict:"},{"line_number":112,"context_line":"        if \u0027listener_id\u0027 in pool_dict:"},{"line_number":113,"context_line":"            if pool_dict[\u0027listener_id\u0027] is not None:"},{"line_number":114,"context_line":"                self.listener_id \u003d pool_dict.pop(\u0027listener_id\u0027)"},{"line_number":115,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_017dd4e6","line":112,"in_reply_to":"5a5ae5dd_96427a3d","updated":"2016-02-04 10:52:57.000000000","message":"This has been corrected. (And good catch-- there was a small error here.)","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"998cbd63b551c0484007ec5a00934cc50d206a10","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        except odb_exceptions.DBError:"},{"line_number":125,"context_line":"            # Setting LB and Listener back to active because this is just a"},{"line_number":126,"context_line":"            # validation failure"},{"line_number":127,"context_line":"            if self.listener_id:"},{"line_number":128,"context_line":"                self.repositories.listener.update("},{"line_number":129,"context_line":"                    session, self.listener_id,"},{"line_number":130,"context_line":"                    provisioning_status\u003dconstants.ACTIVE)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_7647be4b","line":127,"updated":"2016-02-04 02:00:42.000000000","message":"Missing unit test for this conditional path","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ec8b009f97bfa5ef665a186dfad0fa1f3ed77969","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        except odb_exceptions.DBError:"},{"line_number":125,"context_line":"            # Setting LB and Listener back to active because this is just a"},{"line_number":126,"context_line":"            # validation failure"},{"line_number":127,"context_line":"            if self.listener_id:"},{"line_number":128,"context_line":"                self.repositories.listener.update("},{"line_number":129,"context_line":"                    session, self.listener_id,"},{"line_number":130,"context_line":"                    provisioning_status\u003dconstants.ACTIVE)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_81fea436","line":127,"in_reply_to":"5a5ae5dd_7647be4b","updated":"2016-02-04 10:52:57.000000000","message":"Done","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"998cbd63b551c0484007ec5a00934cc50d206a10","unresolved":false,"context_lines":[{"line_number":140,"context_line":"                     db_pool.id)"},{"line_number":141,"context_line":"            self.handler.create(db_pool)"},{"line_number":142,"context_line":"        except Exception:"},{"line_number":143,"context_line":"            if self.listener_id:"},{"line_number":144,"context_line":"                with excutils.save_and_reraise_exception(reraise\u003dFalse):"},{"line_number":145,"context_line":"                    self.repositories.listener.update("},{"line_number":146,"context_line":"                        session, self.listener_id,"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_d66eb2c8","line":143,"updated":"2016-02-04 02:00:42.000000000","message":"Missing unit test here too","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ec8b009f97bfa5ef665a186dfad0fa1f3ed77969","unresolved":false,"context_lines":[{"line_number":140,"context_line":"                     db_pool.id)"},{"line_number":141,"context_line":"            self.handler.create(db_pool)"},{"line_number":142,"context_line":"        except Exception:"},{"line_number":143,"context_line":"            if self.listener_id:"},{"line_number":144,"context_line":"                with excutils.save_and_reraise_exception(reraise\u003dFalse):"},{"line_number":145,"context_line":"                    self.repositories.listener.update("},{"line_number":146,"context_line":"                        session, self.listener_id,"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_44d75aed","line":143,"in_reply_to":"5a5ae5dd_d66eb2c8","updated":"2016-02-04 10:52:57.000000000","message":"Done","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"998cbd63b551c0484007ec5a00934cc50d206a10","unresolved":false,"context_lines":[{"line_number":159,"context_line":"        a default_pool."},{"line_number":160,"context_line":"        \"\"\""},{"line_number":161,"context_line":"        context \u003d pecan.request.context.get(\u0027octavia_context\u0027)"},{"line_number":162,"context_line":"        if self.listener_id and self.repositories.listener.has_default_pool("},{"line_number":163,"context_line":"                context.session, self.listener_id):"},{"line_number":164,"context_line":"            raise exceptions.DuplicatePoolEntry()"},{"line_number":165,"context_line":"        self._test_lb_listener_statuses(context.session)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_b66456e5","line":162,"updated":"2016-02-04 02:00:42.000000000","message":"Missing unit test for conditional branch","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ec8b009f97bfa5ef665a186dfad0fa1f3ed77969","unresolved":false,"context_lines":[{"line_number":159,"context_line":"        a default_pool."},{"line_number":160,"context_line":"        \"\"\""},{"line_number":161,"context_line":"        context \u003d pecan.request.context.get(\u0027octavia_context\u0027)"},{"line_number":162,"context_line":"        if self.listener_id and self.repositories.listener.has_default_pool("},{"line_number":163,"context_line":"                context.session, self.listener_id):"},{"line_number":164,"context_line":"            raise exceptions.DuplicatePoolEntry()"},{"line_number":165,"context_line":"        self._test_lb_listener_statuses(context.session)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_646936be","line":162,"in_reply_to":"5a5ae5dd_b66456e5","updated":"2016-02-04 10:52:57.000000000","message":"Actually test_create_with_listener_with_default_pool_id_set exercises this path.","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ec8b009f97bfa5ef665a186dfad0fa1f3ed77969","unresolved":false,"context_lines":[{"line_number":183,"context_line":"            LOG.info(_LI(\"Sending Update of Pool %s to handler\"), id)"},{"line_number":184,"context_line":"            self.handler.update(db_pool, pool)"},{"line_number":185,"context_line":"        except Exception:"},{"line_number":186,"context_line":"            with excutils.save_and_reraise_exception(reraise\u003dFalse):"},{"line_number":187,"context_line":"                self.repositories.listener.update("},{"line_number":188,"context_line":"                    context.session, self.listener_id,"},{"line_number":189,"context_line":"                    operating_status\u003dconstants.ERROR)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_2421fefb","line":186,"range":{"start_line":186,"start_character":17,"end_line":186,"end_character":25},"updated":"2016-02-04 10:52:57.000000000","message":"Missing unit test here. Too.\n\nDone.","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"998cbd63b551c0484007ec5a00934cc50d206a10","unresolved":false,"context_lines":[{"line_number":203,"context_line":"            self.handler.delete(db_pool)"},{"line_number":204,"context_line":"        except Exception:"},{"line_number":205,"context_line":"            with excutils.save_and_reraise_exception(reraise\u003dFalse):"},{"line_number":206,"context_line":"                for listener in db_pool.listeners:"},{"line_number":207,"context_line":"                    self.repositories.listener.update("},{"line_number":208,"context_line":"                        context.session, listener.id,"},{"line_number":209,"context_line":"                        operating_status\u003dconstants.ERROR)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_369f06b6","line":206,"updated":"2016-02-04 02:00:42.000000000","message":"Missing unit test","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ec8b009f97bfa5ef665a186dfad0fa1f3ed77969","unresolved":false,"context_lines":[{"line_number":203,"context_line":"            self.handler.delete(db_pool)"},{"line_number":204,"context_line":"        except Exception:"},{"line_number":205,"context_line":"            with excutils.save_and_reraise_exception(reraise\u003dFalse):"},{"line_number":206,"context_line":"                for listener in db_pool.listeners:"},{"line_number":207,"context_line":"                    self.repositories.listener.update("},{"line_number":208,"context_line":"                        context.session, listener.id,"},{"line_number":209,"context_line":"                        operating_status\u003dconstants.ERROR)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_6f1caf13","line":206,"in_reply_to":"5a5ae5dd_369f06b6","updated":"2016-02-04 10:52:57.000000000","message":"Done","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"}],"octavia/api/v1/handlers/controller_simulator/handler.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"998cbd63b551c0484007ec5a00934cc50d206a10","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        elif create:"},{"line_number":66,"context_line":"            repo.member.update(db_api.get_session(), member.id,"},{"line_number":67,"context_line":"                               operating_status\u003dconstants.ONLINE)"},{"line_number":68,"context_line":"        listeners \u003d []"},{"line_number":69,"context_line":"        if db_mem:"},{"line_number":70,"context_line":"            for listener in db_mem.pool.listeners:"},{"line_number":71,"context_line":"                if listener not in listeners:"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_36edc625","line":68,"updated":"2016-02-04 02:00:42.000000000","message":"No unit tests for this file.\nHate to ask you to implement some as they weren\u0027t there before.\nI will negotiate on this one.","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ec8b009f97bfa5ef665a186dfad0fa1f3ed77969","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        elif create:"},{"line_number":66,"context_line":"            repo.member.update(db_api.get_session(), member.id,"},{"line_number":67,"context_line":"                               operating_status\u003dconstants.ONLINE)"},{"line_number":68,"context_line":"        listeners \u003d []"},{"line_number":69,"context_line":"        if db_mem:"},{"line_number":70,"context_line":"            for listener in db_mem.pool.listeners:"},{"line_number":71,"context_line":"                if listener not in listeners:"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_8f824bff","line":68,"in_reply_to":"5a5ae5dd_36edc625","updated":"2016-02-04 10:52:57.000000000","message":"This entire handler is used by all the api functional tests. So even though there might not be any unit tests for this file, this file is being inadvertently tested through the api functional tests.","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"}],"octavia/api/v1/types/listener.py":[{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"b3a4ee67d6fb348d46ddea44da83bb082ecd756b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright 2014 Rackspace"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_dbf82ac7","line":1,"updated":"2016-01-26 20:41:25.000000000","message":"Add your Copyright section here.","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"66c80c1c53ffa970712391b1f669b0dda4aa0a3a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright 2014 Rackspace"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_1eeeabec","line":1,"in_reply_to":"9a68dd71_dbf82ac7","updated":"2016-01-26 23:53:39.000000000","message":"Done","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"998cbd63b551c0484007ec5a00934cc50d206a10","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    tls_certificate_id \u003d wtypes.wsattr(wtypes.StringType(max_length\u003d255))"},{"line_number":40,"context_line":"    sni_containers \u003d [wtypes.StringType(max_length\u003d255)]"},{"line_number":41,"context_line":"    project_id \u003d wtypes.wsattr(wtypes.UuidType())"},{"line_number":42,"context_line":"    default_pool_id \u003d wtypes.wsattr(wtypes.StringType(max_length\u003d255))"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"class ListenerPOST(base.BaseType):"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_6d512dd8","line":42,"updated":"2016-02-04 02:00:42.000000000","message":"Shouldn\u0027t this be wtypes.UuidType()?","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ec8b009f97bfa5ef665a186dfad0fa1f3ed77969","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    tls_certificate_id \u003d wtypes.wsattr(wtypes.StringType(max_length\u003d255))"},{"line_number":40,"context_line":"    sni_containers \u003d [wtypes.StringType(max_length\u003d255)]"},{"line_number":41,"context_line":"    project_id \u003d wtypes.wsattr(wtypes.UuidType())"},{"line_number":42,"context_line":"    default_pool_id \u003d wtypes.wsattr(wtypes.StringType(max_length\u003d255))"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"class ListenerPOST(base.BaseType):"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_2ff8f748","line":42,"in_reply_to":"5a5ae5dd_6d512dd8","updated":"2016-02-04 10:52:57.000000000","message":"Aah-- yes. Good catch.","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"998cbd63b551c0484007ec5a00934cc50d206a10","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    tls_termination \u003d wtypes.wsattr(TLSTermination)"},{"line_number":57,"context_line":"    sni_containers \u003d [wtypes.StringType(max_length\u003d255)]"},{"line_number":58,"context_line":"    project_id \u003d wtypes.wsattr(wtypes.UuidType())"},{"line_number":59,"context_line":"    default_pool_id \u003d wtypes.wsattr(wtypes.StringType(max_length\u003d255))"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class ListenerPUT(base.BaseType):"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_0d5f59e6","line":59,"updated":"2016-02-04 02:00:42.000000000","message":"Shouldn\u0027t this be wtypes.UuidType()?","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ec8b009f97bfa5ef665a186dfad0fa1f3ed77969","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    tls_termination \u003d wtypes.wsattr(TLSTermination)"},{"line_number":57,"context_line":"    sni_containers \u003d [wtypes.StringType(max_length\u003d255)]"},{"line_number":58,"context_line":"    project_id \u003d wtypes.wsattr(wtypes.UuidType())"},{"line_number":59,"context_line":"    default_pool_id \u003d wtypes.wsattr(wtypes.StringType(max_length\u003d255))"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class ListenerPUT(base.BaseType):"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_ef989f1d","line":59,"in_reply_to":"5a5ae5dd_0d5f59e6","updated":"2016-02-04 10:52:57.000000000","message":"Done","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"998cbd63b551c0484007ec5a00934cc50d206a10","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    tls_certificate_id \u003d wtypes.wsattr(wtypes.StringType(max_length\u003d255))"},{"line_number":71,"context_line":"    tls_termination \u003d wtypes.wsattr(TLSTermination)"},{"line_number":72,"context_line":"    sni_containers \u003d [wtypes.StringType(max_length\u003d255)]"},{"line_number":73,"context_line":"    default_pool_id \u003d wtypes.wsattr(wtypes.StringType(max_length\u003d255))"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_cd5861fd","line":73,"updated":"2016-02-04 02:00:42.000000000","message":"Shouldn\u0027t this be wtypes.UuidType()?","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ec8b009f97bfa5ef665a186dfad0fa1f3ed77969","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    tls_certificate_id \u003d wtypes.wsattr(wtypes.StringType(max_length\u003d255))"},{"line_number":71,"context_line":"    tls_termination \u003d wtypes.wsattr(TLSTermination)"},{"line_number":72,"context_line":"    sni_containers \u003d [wtypes.StringType(max_length\u003d255)]"},{"line_number":73,"context_line":"    default_pool_id \u003d wtypes.wsattr(wtypes.StringType(max_length\u003d255))"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_8f9fab02","line":73,"in_reply_to":"5a5ae5dd_cd5861fd","updated":"2016-02-04 10:52:57.000000000","message":"Done","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"}],"octavia/api/v1/types/pool.py":[{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"b3a4ee67d6fb348d46ddea44da83bb082ecd756b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright 2014 Rackspace"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_9b02b2b3","line":1,"updated":"2016-01-26 20:41:25.000000000","message":"Add your Copyright section here.","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"66c80c1c53ffa970712391b1f669b0dda4aa0a3a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright 2014 Rackspace"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_7eb3270b","line":1,"in_reply_to":"9a68dd71_9b02b2b3","updated":"2016-01-26 23:53:39.000000000","message":"Done","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"}],"octavia/common/data_models.py":[{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"b3a4ee67d6fb348d46ddea44da83bb082ecd756b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright (c) 2014 Rackspace"},{"line_number":2,"context_line":"#    All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_1b25625b","line":1,"updated":"2016-01-26 20:41:25.000000000","message":"Add your Copyright section here.","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"66c80c1c53ffa970712391b1f669b0dda4aa0a3a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright (c) 2014 Rackspace"},{"line_number":2,"context_line":"#    All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_1ec54b5a","line":1,"in_reply_to":"9a68dd71_1b25625b","updated":"2016-01-26 23:53:39.000000000","message":"Done","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"43d34fd4a4c2fe6cf059dcd4715f603bca02af99","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        self.listeners \u003d listeners or []"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def delete(self):"},{"line_number":121,"context_line":"        # TODO(sbalukoff): Clean up L7Policies that reference this pool"},{"line_number":122,"context_line":"        for listener in self.listeners:"},{"line_number":123,"context_line":"            if listener.default_pool_id \u003d\u003d self.id:"},{"line_number":124,"context_line":"                listener.default_pool \u003d None"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_255cc9ec","line":121,"updated":"2016-01-26 20:36:27.000000000","message":"Same \"TODO\" distinction.","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"c0aaa5062ddac70c34146d5c0c952717bb2ffe9a","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        self.listeners \u003d listeners or []"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def delete(self):"},{"line_number":121,"context_line":"        # TODO(sbalukoff): Clean up L7Policies that reference this pool"},{"line_number":122,"context_line":"        for listener in self.listeners:"},{"line_number":123,"context_line":"            if listener.default_pool_id \u003d\u003d self.id:"},{"line_number":124,"context_line":"                listener.default_pool \u003d None"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_c9be1fd4","line":121,"in_reply_to":"9a68dd71_255cc9ec","updated":"2016-01-27 00:17:05.000000000","message":"Yep, and same explanation. (And this code is also already written in the L7 patches, as I did models and data models for L7 first...)","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"998cbd63b551c0484007ec5a00934cc50d206a10","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                 protocol\u003dNone, lb_algorithm\u003dNone, enabled\u003dNone,"},{"line_number":102,"context_line":"                 operating_status\u003dNone, members\u003dNone, health_monitor\u003dNone,"},{"line_number":103,"context_line":"                 session_persistence\u003dNone, load_balancer_id\u003dNone,"},{"line_number":104,"context_line":"                 load_balancer\u003dNone, listeners\u003dNone):"},{"line_number":105,"context_line":"        self.id \u003d id"},{"line_number":106,"context_line":"        self.project_id \u003d project_id"},{"line_number":107,"context_line":"        self.name \u003d name"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_ad6e4594","line":104,"updated":"2016-02-04 02:00:42.000000000","message":"Do we need both load_balancer and load_balancer_id?  Can\u0027t we just get the id from the load_balancer?","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ec8b009f97bfa5ef665a186dfad0fa1f3ed77969","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                 protocol\u003dNone, lb_algorithm\u003dNone, enabled\u003dNone,"},{"line_number":102,"context_line":"                 operating_status\u003dNone, members\u003dNone, health_monitor\u003dNone,"},{"line_number":103,"context_line":"                 session_persistence\u003dNone, load_balancer_id\u003dNone,"},{"line_number":104,"context_line":"                 load_balancer\u003dNone, listeners\u003dNone):"},{"line_number":105,"context_line":"        self.id \u003d id"},{"line_number":106,"context_line":"        self.project_id \u003d project_id"},{"line_number":107,"context_line":"        self.name \u003d name"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_aa0cd53b","line":104,"in_reply_to":"5a5ae5dd_ad6e4594","updated":"2016-02-04 10:52:57.000000000","message":"Copying what is done here for the Listener. And I think we do need both or SQLAlchemy freaks out:  load_balancer_id is a field in the database, and load_balancer is a relationship.","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"998cbd63b551c0484007ec5a00934cc50d206a10","unresolved":false,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def delete(self):"},{"line_number":121,"context_line":"        # TODO(sbalukoff): Clean up L7Policies that reference this pool"},{"line_number":122,"context_line":"        for listener in self.listeners:"},{"line_number":123,"context_line":"            if listener.default_pool_id \u003d\u003d self.id:"},{"line_number":124,"context_line":"                listener.default_pool \u003d None"},{"line_number":125,"context_line":"                listener.default_pool_id \u003d None"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_16d1aa57","line":122,"updated":"2016-02-04 02:00:42.000000000","message":"Missing unit test","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ec8b009f97bfa5ef665a186dfad0fa1f3ed77969","unresolved":false,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def delete(self):"},{"line_number":121,"context_line":"        # TODO(sbalukoff): Clean up L7Policies that reference this pool"},{"line_number":122,"context_line":"        for listener in self.listeners:"},{"line_number":123,"context_line":"            if listener.default_pool_id \u003d\u003d self.id:"},{"line_number":124,"context_line":"                listener.default_pool \u003d None"},{"line_number":125,"context_line":"                listener.default_pool_id \u003d None"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_0a35e9d8","line":122,"in_reply_to":"5a5ae5dd_16d1aa57","updated":"2016-02-04 10:52:57.000000000","message":"So, this method get expanded and thoroughly tested in the l7-schema patch (ie. the next one that will merge after this one for L7 functionality.)  Since I\u0027d just have to overhaul this unit test anyway, I\u0027d rather hold off on creating it in this patch.","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"}],"octavia/controller/worker/controller_worker.py":[{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"b3a4ee67d6fb348d46ddea44da83bb082ecd756b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_3b2aa62d","line":1,"updated":"2016-01-26 20:41:25.000000000","message":"Add your Copyright section here.","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"66c80c1c53ffa970712391b1f669b0dda4aa0a3a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_fe9e3762","line":1,"in_reply_to":"9a68dd71_3b2aa62d","updated":"2016-01-26 23:53:39.000000000","message":"Done","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"}],"octavia/controller/worker/flows/amphora_flows.py":[{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"b3a4ee67d6fb348d46ddea44da83bb082ecd756b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_fb1c0e15","line":1,"updated":"2016-01-26 20:41:25.000000000","message":"Add your Copyright section here.","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"66c80c1c53ffa970712391b1f669b0dda4aa0a3a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_de8c9337","line":1,"in_reply_to":"9a68dd71_fb1c0e15","updated":"2016-01-26 23:53:39.000000000","message":"Done","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"}],"octavia/controller/worker/flows/health_monitor_flows.py":[{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"b3a4ee67d6fb348d46ddea44da83bb082ecd756b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_9b195225","line":1,"updated":"2016-01-26 20:41:25.000000000","message":"Add your Copyright section here.","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"66c80c1c53ffa970712391b1f669b0dda4aa0a3a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_be8e7f25","line":1,"in_reply_to":"9a68dd71_9b195225","updated":"2016-01-26 23:53:39.000000000","message":"Done","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"998cbd63b551c0484007ec5a00934cc50d206a10","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        delete_hm_flow.add(model_tasks."},{"line_number":46,"context_line":"                           DeleteModelObject(rebind\u003d{constants.OBJECT:"},{"line_number":47,"context_line":"                                                     constants.HEALTH_MON}))"},{"line_number":48,"context_line":"        delete_hm_flow.add(database_tasks.DeleteHealthMonitorInDB("},{"line_number":49,"context_line":"            requires\u003dconstants.POOL_ID))"},{"line_number":50,"context_line":"        delete_hm_flow.add(amphora_driver_tasks.ListenersUpdate("},{"line_number":51,"context_line":"            requires\u003d[constants.LOADBALANCER, constants.LISTENERS]))"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_add725be","line":48,"updated":"2016-02-04 02:00:42.000000000","message":"If you reorder this to delete from the database first, why do you need to delete it from the model above?\nThis ordering was in place to allow consistent rollback by leaving the database with old state until the update completed.\nIf you feel strongly about deleting in the DB first, there really is no reason to have the data model manipulation above.","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ec8b009f97bfa5ef665a186dfad0fa1f3ed77969","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        delete_hm_flow.add(model_tasks."},{"line_number":46,"context_line":"                           DeleteModelObject(rebind\u003d{constants.OBJECT:"},{"line_number":47,"context_line":"                                                     constants.HEALTH_MON}))"},{"line_number":48,"context_line":"        delete_hm_flow.add(database_tasks.DeleteHealthMonitorInDB("},{"line_number":49,"context_line":"            requires\u003dconstants.POOL_ID))"},{"line_number":50,"context_line":"        delete_hm_flow.add(amphora_driver_tasks.ListenersUpdate("},{"line_number":51,"context_line":"            requires\u003d[constants.LOADBALANCER, constants.LISTENERS]))"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_ea85ed58","line":48,"in_reply_to":"5a5ae5dd_add725be","updated":"2016-02-04 10:52:57.000000000","message":"I discovered this error while running scenario tests: The ListenersUpdate task (based off the ListenerUpdate method) loads the listener data from the database. As such, if you update the listener *before* you update the database, you end up pushing out old data in the configuration. *All* of the flows that work this way have this problem specifically because the task doesn\u0027t look at the model, it looks at the database.\n\nIn effect, I was copying the work I saw in the bugfix here for all flows (the bugfix only addressed one flow): https://bugs.launchpad.net/octavia/+bug/1514510","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"998cbd63b551c0484007ec5a00934cc50d206a10","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                           UpdateAttributes("},{"line_number":65,"context_line":"                               rebind\u003d{constants.OBJECT: constants.HEALTH_MON},"},{"line_number":66,"context_line":"                               requires\u003d[constants.UPDATE_DICT]))"},{"line_number":67,"context_line":"        update_hm_flow.add(database_tasks.UpdateHealthMonInDB("},{"line_number":68,"context_line":"            requires\u003d[constants.HEALTH_MON, constants.UPDATE_DICT]))"},{"line_number":69,"context_line":"        update_hm_flow.add(amphora_driver_tasks.ListenersUpdate("},{"line_number":70,"context_line":"            requires\u003d[constants.LOADBALANCER, constants.LISTENERS]))"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_6de12d9a","line":67,"updated":"2016-02-04 02:00:42.000000000","message":"Same comment as above.","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ec8b009f97bfa5ef665a186dfad0fa1f3ed77969","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                           UpdateAttributes("},{"line_number":65,"context_line":"                               rebind\u003d{constants.OBJECT: constants.HEALTH_MON},"},{"line_number":66,"context_line":"                               requires\u003d[constants.UPDATE_DICT]))"},{"line_number":67,"context_line":"        update_hm_flow.add(database_tasks.UpdateHealthMonInDB("},{"line_number":68,"context_line":"            requires\u003d[constants.HEALTH_MON, constants.UPDATE_DICT]))"},{"line_number":69,"context_line":"        update_hm_flow.add(amphora_driver_tasks.ListenersUpdate("},{"line_number":70,"context_line":"            requires\u003d[constants.LOADBALANCER, constants.LISTENERS]))"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_8a8239ff","line":67,"in_reply_to":"5a5ae5dd_6de12d9a","updated":"2016-02-04 10:52:57.000000000","message":"Same response.","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"}],"octavia/controller/worker/flows/listener_flows.py":[{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"b3a4ee67d6fb348d46ddea44da83bb082ecd756b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_bb1696ef","line":1,"updated":"2016-01-26 20:41:25.000000000","message":"Add your Copyright section here.","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"66c80c1c53ffa970712391b1f669b0dda4aa0a3a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_7e98076b","line":1,"in_reply_to":"9a68dd71_bb1696ef","updated":"2016-01-26 23:53:39.000000000","message":"Done","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"998cbd63b551c0484007ec5a00934cc50d206a10","unresolved":false,"context_lines":[{"line_number":38,"context_line":"            provides\u003d\u0027listener\u0027))"},{"line_number":39,"context_line":"        create_listener_flow.add(network_tasks.UpdateVIP("},{"line_number":40,"context_line":"            requires\u003dconstants.LOADBALANCER))"},{"line_number":41,"context_line":"        create_listener_flow.add(amphora_driver_tasks.ListenersUpdate("},{"line_number":42,"context_line":"            requires\u003d[constants.LOADBALANCER, constants.LISTENERS]))"},{"line_number":43,"context_line":"        create_listener_flow.add(database_tasks."},{"line_number":44,"context_line":"                                 MarkLBAndListenerActiveInDB("}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_906922c1","line":41,"updated":"2016-02-04 02:00:42.000000000","message":"I preferred this the old way where the configuration on the amp is updated before the security groups are changed in UpdateVIP.","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ec8b009f97bfa5ef665a186dfad0fa1f3ed77969","unresolved":false,"context_lines":[{"line_number":38,"context_line":"            provides\u003d\u0027listener\u0027))"},{"line_number":39,"context_line":"        create_listener_flow.add(network_tasks.UpdateVIP("},{"line_number":40,"context_line":"            requires\u003dconstants.LOADBALANCER))"},{"line_number":41,"context_line":"        create_listener_flow.add(amphora_driver_tasks.ListenersUpdate("},{"line_number":42,"context_line":"            requires\u003d[constants.LOADBALANCER, constants.LISTENERS]))"},{"line_number":43,"context_line":"        create_listener_flow.add(database_tasks."},{"line_number":44,"context_line":"                                 MarkLBAndListenerActiveInDB("}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_4af9a17f","line":41,"in_reply_to":"5a5ae5dd_906922c1","updated":"2016-02-04 10:52:57.000000000","message":"If the VIP doesn\u0027t exist on the amphora yet, haproxy can\u0027t bind to the VIP IP address.","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"998cbd63b551c0484007ec5a00934cc50d206a10","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                                     requires\u003d[constants.UPDATE_DICT]))"},{"line_number":77,"context_line":"        update_listener_flow.add(database_tasks.UpdateListenerInDB("},{"line_number":78,"context_line":"            requires\u003d[constants.LISTENER, constants.UPDATE_DICT]))"},{"line_number":79,"context_line":"        update_listener_flow.add(amphora_driver_tasks.ListenersUpdate("},{"line_number":80,"context_line":"            requires\u003d[constants.LOADBALANCER, constants.LISTENERS]))"},{"line_number":81,"context_line":"        update_listener_flow.add(database_tasks."},{"line_number":82,"context_line":"                                 MarkLBAndListenerActiveInDB("}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_d07c7a74","line":79,"updated":"2016-02-04 02:00:42.000000000","message":"If you reorder this to update the database first, why do you need to update the model above?\nThis ordering was in place to allow consistent rollback by leaving the database with old state until the update completed.\nIf you feel strongly about updating the DB first, there really is no reason to have the data model manipulation above.","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ec8b009f97bfa5ef665a186dfad0fa1f3ed77969","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                                     requires\u003d[constants.UPDATE_DICT]))"},{"line_number":77,"context_line":"        update_listener_flow.add(database_tasks.UpdateListenerInDB("},{"line_number":78,"context_line":"            requires\u003d[constants.LISTENER, constants.UPDATE_DICT]))"},{"line_number":79,"context_line":"        update_listener_flow.add(amphora_driver_tasks.ListenersUpdate("},{"line_number":80,"context_line":"            requires\u003d[constants.LOADBALANCER, constants.LISTENERS]))"},{"line_number":81,"context_line":"        update_listener_flow.add(database_tasks."},{"line_number":82,"context_line":"                                 MarkLBAndListenerActiveInDB("}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_4a276112","line":79,"in_reply_to":"5a5ae5dd_d07c7a74","updated":"2016-02-04 10:52:57.000000000","message":"Same response as before.","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"}],"octavia/controller/worker/flows/member_flows.py":[{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"b3a4ee67d6fb348d46ddea44da83bb082ecd756b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_5bd2fa35","line":1,"updated":"2016-01-26 20:41:25.000000000","message":"Add your Copyright section here.","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"66c80c1c53ffa970712391b1f669b0dda4aa0a3a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_beb51fd1","line":1,"in_reply_to":"9a68dd71_5bd2fa35","updated":"2016-01-26 23:53:39.000000000","message":"Done","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"998cbd63b551c0484007ec5a00934cc50d206a10","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                                   requires\u003d[constants.UPDATE_DICT]))"},{"line_number":80,"context_line":"        update_member_flow.add(database_tasks.UpdateMemberInDB("},{"line_number":81,"context_line":"            requires\u003d[constants.MEMBER, constants.UPDATE_DICT]))"},{"line_number":82,"context_line":"        update_member_flow.add(amphora_driver_tasks.ListenersUpdate("},{"line_number":83,"context_line":"            requires\u003d[constants.LOADBALANCER, constants.LISTENERS]))"},{"line_number":84,"context_line":"        update_member_flow.add(database_tasks."},{"line_number":85,"context_line":"                               MarkLBAndListenersActiveInDB("}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_90de026c","line":82,"updated":"2016-02-04 02:00:42.000000000","message":"If you reorder this to update the database first, why do you need to update the model above?\nThis ordering was in place to allow consistent rollback by leaving the database with old state until the update completed.\nIf you feel strongly about updating the DB first, there really is no reason to have the data model manipulation above.","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ec8b009f97bfa5ef665a186dfad0fa1f3ed77969","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                                   requires\u003d[constants.UPDATE_DICT]))"},{"line_number":80,"context_line":"        update_member_flow.add(database_tasks.UpdateMemberInDB("},{"line_number":81,"context_line":"            requires\u003d[constants.MEMBER, constants.UPDATE_DICT]))"},{"line_number":82,"context_line":"        update_member_flow.add(amphora_driver_tasks.ListenersUpdate("},{"line_number":83,"context_line":"            requires\u003d[constants.LOADBALANCER, constants.LISTENERS]))"},{"line_number":84,"context_line":"        update_member_flow.add(database_tasks."},{"line_number":85,"context_line":"                               MarkLBAndListenersActiveInDB("}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_ca7911fe","line":82,"in_reply_to":"5a5ae5dd_90de026c","updated":"2016-02-04 10:52:57.000000000","message":"Same response as before.","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"}],"octavia/controller/worker/flows/pool_flows.py":[{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"b3a4ee67d6fb348d46ddea44da83bb082ecd756b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_7bd7be23","line":1,"updated":"2016-01-26 20:41:25.000000000","message":"Add your Copyright section here.","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"66c80c1c53ffa970712391b1f669b0dda4aa0a3a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_5ec74345","line":1,"in_reply_to":"9a68dd71_7bd7be23","updated":"2016-01-26 23:53:39.000000000","message":"Done","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"998cbd63b551c0484007ec5a00934cc50d206a10","unresolved":false,"context_lines":[{"line_number":46,"context_line":"            rebind\u003d{constants.OBJECT: constants.POOL}))"},{"line_number":47,"context_line":"        delete_pool_flow.add(database_tasks.DeletePoolInDB("},{"line_number":48,"context_line":"            requires\u003dconstants.POOL))"},{"line_number":49,"context_line":"        delete_pool_flow.add(amphora_driver_tasks.ListenersUpdate("},{"line_number":50,"context_line":"            requires\u003d[constants.LOADBALANCER, constants.LISTENERS]))"},{"line_number":51,"context_line":"        delete_pool_flow.add(database_tasks.MarkLBAndListenersActiveInDB("},{"line_number":52,"context_line":"            requires\u003d[constants.LOADBALANCER, constants.LISTENERS]))"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_50564ad3","line":49,"updated":"2016-02-04 02:00:42.000000000","message":"If you reorder this to delete from the database first, why do you need to delete it from the model above?\nThis ordering was in place to allow consistent rollback by leaving the database with old state until the update completed.\nIf you feel strongly about deleting in the DB first, there really is no reason to have the data model manipulation above.","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ec8b009f97bfa5ef665a186dfad0fa1f3ed77969","unresolved":false,"context_lines":[{"line_number":46,"context_line":"            rebind\u003d{constants.OBJECT: constants.POOL}))"},{"line_number":47,"context_line":"        delete_pool_flow.add(database_tasks.DeletePoolInDB("},{"line_number":48,"context_line":"            requires\u003dconstants.POOL))"},{"line_number":49,"context_line":"        delete_pool_flow.add(amphora_driver_tasks.ListenersUpdate("},{"line_number":50,"context_line":"            requires\u003d[constants.LOADBALANCER, constants.LISTENERS]))"},{"line_number":51,"context_line":"        delete_pool_flow.add(database_tasks.MarkLBAndListenersActiveInDB("},{"line_number":52,"context_line":"            requires\u003d[constants.LOADBALANCER, constants.LISTENERS]))"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_0a7889f1","line":49,"in_reply_to":"5a5ae5dd_50564ad3","updated":"2016-02-04 10:52:57.000000000","message":"Same response.","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"998cbd63b551c0484007ec5a00934cc50d206a10","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                                 requires\u003d[constants.UPDATE_DICT]))"},{"line_number":66,"context_line":"        update_pool_flow.add(database_tasks.UpdatePoolInDB("},{"line_number":67,"context_line":"            requires\u003d[constants.POOL, constants.UPDATE_DICT]))"},{"line_number":68,"context_line":"        update_pool_flow.add(amphora_driver_tasks.ListenersUpdate("},{"line_number":69,"context_line":"            requires\u003d[constants.LOADBALANCER, constants.LISTENERS]))"},{"line_number":70,"context_line":"        update_pool_flow.add(database_tasks.MarkLBAndListenersActiveInDB("},{"line_number":71,"context_line":"            requires\u003d[constants.LOADBALANCER, constants.LISTENERS]))"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_3062aeae","line":68,"updated":"2016-02-04 02:00:42.000000000","message":"If you reorder this to update the database first, why do you need to update the model above?\nThis ordering was in place to allow consistent rollback by leaving the database with old state until the update completed.\nIf you feel strongly about updating the DB first, there really is no reason to have the data model manipulation above.","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ec8b009f97bfa5ef665a186dfad0fa1f3ed77969","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                                 requires\u003d[constants.UPDATE_DICT]))"},{"line_number":66,"context_line":"        update_pool_flow.add(database_tasks.UpdatePoolInDB("},{"line_number":67,"context_line":"            requires\u003d[constants.POOL, constants.UPDATE_DICT]))"},{"line_number":68,"context_line":"        update_pool_flow.add(amphora_driver_tasks.ListenersUpdate("},{"line_number":69,"context_line":"            requires\u003d[constants.LOADBALANCER, constants.LISTENERS]))"},{"line_number":70,"context_line":"        update_pool_flow.add(database_tasks.MarkLBAndListenersActiveInDB("},{"line_number":71,"context_line":"            requires\u003d[constants.LOADBALANCER, constants.LISTENERS]))"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_ea63ad3f","line":68,"in_reply_to":"5a5ae5dd_3062aeae","updated":"2016-02-04 10:52:57.000000000","message":"Same response","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"}],"octavia/controller/worker/tasks/amphora_driver_tasks.py":[{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"a9004418e1b8d1d061d285159f66f7dd1afd72de","unresolved":false,"context_lines":[{"line_number":70,"context_line":"class ListenersUpdate(BaseAmphoraTask):"},{"line_number":71,"context_line":"    \"\"\"Task to update amphora with all specified listeners\u0027 configurations.\"\"\""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def execute(self, loadbalancer, listeners):"},{"line_number":74,"context_line":"        \"\"\"Execute updates per listener for an amphora.\"\"\""},{"line_number":75,"context_line":"        for listener in listeners:"},{"line_number":76,"context_line":"            self.amphora_driver.update(listener, loadbalancer.vip)"}],"source_content_type":"text/x-python","patch_set":6,"id":"da6ed579_c2a81ade","line":73,"updated":"2016-01-13 06:49:37.000000000","message":"any useful reason to do this change?","commit_id":"9277ee4f4fa34ec73279cc7229cd5d9298be4b4f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"86f23daff9adb3420ea7a26a604a8fbed9901ce2","unresolved":false,"context_lines":[{"line_number":70,"context_line":"class ListenersUpdate(BaseAmphoraTask):"},{"line_number":71,"context_line":"    \"\"\"Task to update amphora with all specified listeners\u0027 configurations.\"\"\""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def execute(self, loadbalancer, listeners):"},{"line_number":74,"context_line":"        \"\"\"Execute updates per listener for an amphora.\"\"\""},{"line_number":75,"context_line":"        for listener in listeners:"},{"line_number":76,"context_line":"            self.amphora_driver.update(listener, loadbalancer.vip)"}],"source_content_type":"text/x-python","patch_set":6,"id":"da6ed579_2f82bfc8","line":73,"in_reply_to":"da6ed579_6a36ca53","updated":"2016-01-15 04:35:03.000000000","message":"This is not a change from active-standby as this code didn\u0027t change due to active-standby.  Master shows the original hasn\u0027t changed since it was originally committed in the failover patch.  I don\u0027t see any dependencies on this patch that could lead to this.\nAs far as I see, this is a change in this patchset.","commit_id":"9277ee4f4fa34ec73279cc7229cd5d9298be4b4f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"e27af64859501732e8def6e88f5fe486004c1458","unresolved":false,"context_lines":[{"line_number":70,"context_line":"class ListenersUpdate(BaseAmphoraTask):"},{"line_number":71,"context_line":"    \"\"\"Task to update amphora with all specified listeners\u0027 configurations.\"\"\""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def execute(self, loadbalancer, listeners):"},{"line_number":74,"context_line":"        \"\"\"Execute updates per listener for an amphora.\"\"\""},{"line_number":75,"context_line":"        for listener in listeners:"},{"line_number":76,"context_line":"            self.amphora_driver.update(listener, loadbalancer.vip)"}],"source_content_type":"text/x-python","patch_set":6,"id":"da6ed579_6a36ca53","line":73,"in_reply_to":"da6ed579_c2a81ade","updated":"2016-01-13 15:28:11.000000000","message":"I think this is the result of changes made to the active-standby code that merged previously. In any case, I didn\u0027t think there was a useful reason to change this, but I didn\u0027t want to rock the boat that much.","commit_id":"9277ee4f4fa34ec73279cc7229cd5d9298be4b4f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"540f0fbbd954f56702ec6c96113997787fcbe6f8","unresolved":false,"context_lines":[{"line_number":70,"context_line":"class ListenersUpdate(BaseAmphoraTask):"},{"line_number":71,"context_line":"    \"\"\"Task to update amphora with all specified listeners\u0027 configurations.\"\"\""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def execute(self, loadbalancer, listeners):"},{"line_number":74,"context_line":"        \"\"\"Execute updates per listener for an amphora.\"\"\""},{"line_number":75,"context_line":"        for listener in listeners:"},{"line_number":76,"context_line":"            self.amphora_driver.update(listener, loadbalancer.vip)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da6ed579_9231945c","line":73,"updated":"2016-01-15 04:34:29.000000000","message":"This is not a change from active-standby as this code didn\u0027t change due to active-standby.  Master shows the original hasn\u0027t changed since it was originally committed in the failover patch.  I don\u0027t see any dependencies on this patch that could lead to this.\nAs far as I see, this is a change in this patchset.","commit_id":"67d14f2c79b998460043327dd0e88564ee7abcb6"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"35e4fb5f3922e0ad3caa74dbc243f8459f358c11","unresolved":false,"context_lines":[{"line_number":70,"context_line":"class ListenersUpdate(BaseAmphoraTask):"},{"line_number":71,"context_line":"    \"\"\"Task to update amphora with all specified listeners\u0027 configurations.\"\"\""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def execute(self, loadbalancer, listeners):"},{"line_number":74,"context_line":"        \"\"\"Execute updates per listener for an amphora.\"\"\""},{"line_number":75,"context_line":"        for listener in listeners:"},{"line_number":76,"context_line":"            self.amphora_driver.update(listener, loadbalancer.vip)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da6ed579_beb33f4c","line":73,"in_reply_to":"da6ed579_9231945c","updated":"2016-01-15 06:06:52.000000000","message":"Aah! Ok, it took me a while to track down why I made this change, but here\u0027s the reason as far as I can remember:\n\nIt turns out that the amphora_driver_task.ListenersUpdate is called in many places throughout the flows, including and especially in pool, healthmonitor, member, etc. flows (ie. pools and all their various children.) In the original code, the VIP was discovered by referencing \u0027pool.listener.loadbalancer.vip\u0027.  Well... pools no longer have a single listener, and it turns out they now have a direct reference to the loadbalancer they reference. So it\u0027s more efficient just to make the call to the ListenersUpdate by referencing the \u0027pool.loadbalancer\u0027. I\u0027m not sure why I didn\u0027t just make this the \u0027pool.loadbalancer.vip\u0027.  However, the point is kind of moot:\n\nListeners have a reference to the loadbalancer to which they are children, right? Why do we even require a VIP parameter to this method?  Why not just: def execute(self, listeners) and then derive the VIP from listener.loadbalancer.vip when we need it?\n\nThe code works as is (and ALL external references to this method, including the tests, have been updated), and there was some rhyme to my reason for changing it thus. However, how would you like me to proceed? Should I just simplify the calls to these methods and eliminate what is essentially a redundant parameter?","commit_id":"67d14f2c79b998460043327dd0e88564ee7abcb6"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"7c72057c3d277b1e8da75a81698133e2c5d73f38","unresolved":false,"context_lines":[{"line_number":70,"context_line":"class ListenersUpdate(BaseAmphoraTask):"},{"line_number":71,"context_line":"    \"\"\"Task to update amphora with all specified listeners\u0027 configurations.\"\"\""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def execute(self, loadbalancer, listeners):"},{"line_number":74,"context_line":"        \"\"\"Execute updates per listener for an amphora.\"\"\""},{"line_number":75,"context_line":"        for listener in listeners:"},{"line_number":76,"context_line":"            self.amphora_driver.update(listener, loadbalancer.vip)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da6ed579_fe8777b2","line":73,"in_reply_to":"da6ed579_beb33f4c","updated":"2016-01-15 06:34:35.000000000","message":"Oh, hold the phone on this! Maybe this wasn\u0027t my edit after all:  If I made this change, then why does this patch (merged today) show an amphora_driver_tasks.ListenerUpdate call being made with a loadbalancer and listener parameter?  https://review.openstack.org/#/c/260605/5/octavia/controller/worker/flows/member_flows.py","commit_id":"67d14f2c79b998460043327dd0e88564ee7abcb6"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"838bce7ef8d1419e0587287d587ccd94c56bb6e2","unresolved":false,"context_lines":[{"line_number":70,"context_line":"class ListenersUpdate(BaseAmphoraTask):"},{"line_number":71,"context_line":"    \"\"\"Task to update amphora with all specified listeners\u0027 configurations.\"\"\""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def execute(self, loadbalancer, listeners):"},{"line_number":74,"context_line":"        \"\"\"Execute updates per listener for an amphora.\"\"\""},{"line_number":75,"context_line":"        for listener in listeners:"},{"line_number":76,"context_line":"            self.amphora_driver.update(listener, loadbalancer.vip)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da6ed579_5ba49006","line":73,"in_reply_to":"da6ed579_fe8777b2","updated":"2016-01-15 08:19:19.000000000","message":"BWAHAHA! Ok! I\u0027ve got it: I now know exactly what happened.\n\nLook about 20 lines up in the code.\n\nI changed the obviously copied-and-pasted ListenersUpdate method to more closely resemble the ListenerUpdate method since it made no sense to have such different parameters for methods that were obviously meant to be similar. (Really, if I were less lazy I\u0027d just remove one of the methods since they\u0027re redundant and totally not DRY, and rework the things calling the eliminated method.)\n\nActually...\n\nSo! In my latest patch set (which will be uploaded shortly), I\u0027m going to remove the ListenerUpdate method since the ListenersUpdate method is more useful and called far more often. And yes, I will copy German\u0027s bug work around above into the ListenersUpdate method (since, clearly, someone forgot to copy-paste this, and this was almost certainly leading to problems on amphora active-standby failovers... the only place in the code where ListenersUpdate was being called.)\n\nAs a bonus, now the ListenersUpdate method will actually get some tests. :P\n\nAlso, Eran: I suspect this change will fix the error you found in your scenario test. However, I\u0027d like to run through this with you again to verify soon!\n\nOk, now I can sleep...","commit_id":"67d14f2c79b998460043327dd0e88564ee7abcb6"},{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"b3a4ee67d6fb348d46ddea44da83bb082ecd756b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_1bdc8245","line":1,"updated":"2016-01-26 20:41:25.000000000","message":"Add your Copyright section here.","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"66c80c1c53ffa970712391b1f669b0dda4aa0a3a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_fec39736","line":1,"in_reply_to":"9a68dd71_1bdc8245","updated":"2016-01-26 23:53:39.000000000","message":"Done","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"}],"octavia/controller/worker/tasks/database_tasks.py":[{"author":{"_account_id":8157,"name":"Bertrand LALLAU","email":"bertrand.lallau@gmail.com","username":"blallau"},"change_message_id":"a6f4a0b371ab44a89d379c730dfd695ec4275e96","unresolved":false,"context_lines":[{"line_number":695,"context_line":"        \"\"\"Mark the load balancer and listeners as broken.\"\"\""},{"line_number":696,"context_line":""},{"line_number":697,"context_line":"        LOG.warn(_LW(\"Reverting mark load balancer \""},{"line_number":698,"context_line":"                     \"and listener active in DB \""},{"line_number":699,"context_line":"                     \"for load balancer id %(LB)s and \""},{"line_number":700,"context_line":"                     \"listener ids: %(list)s\"),"},{"line_number":701,"context_line":"                 {\u0027LB\u0027: loadbalancer.id,"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a68dd71_7dcd0db6","line":698,"range":{"start_line":698,"start_character":34,"end_line":698,"end_character":35},"updated":"2016-01-22 17:20:37.000000000","message":"s/listener/listeners/","commit_id":"49f57d09f743bf608d99f65d7bd3cc431a30164b"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"8ed21433230150978bdda8bfa84b560c6c12030c","unresolved":false,"context_lines":[{"line_number":695,"context_line":"        \"\"\"Mark the load balancer and listeners as broken.\"\"\""},{"line_number":696,"context_line":""},{"line_number":697,"context_line":"        LOG.warn(_LW(\"Reverting mark load balancer \""},{"line_number":698,"context_line":"                     \"and listener active in DB \""},{"line_number":699,"context_line":"                     \"for load balancer id %(LB)s and \""},{"line_number":700,"context_line":"                     \"listener ids: %(list)s\"),"},{"line_number":701,"context_line":"                 {\u0027LB\u0027: loadbalancer.id,"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a68dd71_3fbe8965","line":698,"range":{"start_line":698,"start_character":34,"end_line":698,"end_character":35},"in_reply_to":"9a68dd71_7dcd0db6","updated":"2016-01-24 02:24:04.000000000","message":"Done","commit_id":"49f57d09f743bf608d99f65d7bd3cc431a30164b"},{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"b3a4ee67d6fb348d46ddea44da83bb082ecd756b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_3be146ff","line":1,"updated":"2016-01-26 20:41:25.000000000","message":"Add your Copyright section here.","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"66c80c1c53ffa970712391b1f669b0dda4aa0a3a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_dee1f3d1","line":1,"in_reply_to":"9a68dd71_3be146ff","updated":"2016-01-26 23:53:39.000000000","message":"Done","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"998cbd63b551c0484007ec5a00934cc50d206a10","unresolved":false,"context_lines":[{"line_number":701,"context_line":"                                  provisioning_status\u003dconstants.ERROR)"},{"line_number":702,"context_line":""},{"line_number":703,"context_line":""},{"line_number":704,"context_line":"class MarkLBAndListenersActiveInDB(BaseDatabaseTask):"},{"line_number":705,"context_line":"    \"\"\"Mark the load balancer and specified listeners active in the DB."},{"line_number":706,"context_line":""},{"line_number":707,"context_line":"    Since sqlalchemy will likely retry by itself always revert if it fails"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_f0a2d64a","line":704,"updated":"2016-02-04 02:00:42.000000000","message":"Couldn\u0027t this be consolidated with the above task?  It seems like you removed all of the other singular listener tasks (for good reason).  I would expect single calls could just pass in a list of one.","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ec8b009f97bfa5ef665a186dfad0fa1f3ed77969","unresolved":false,"context_lines":[{"line_number":701,"context_line":"                                  provisioning_status\u003dconstants.ERROR)"},{"line_number":702,"context_line":""},{"line_number":703,"context_line":""},{"line_number":704,"context_line":"class MarkLBAndListenersActiveInDB(BaseDatabaseTask):"},{"line_number":705,"context_line":"    \"\"\"Mark the load balancer and specified listeners active in the DB."},{"line_number":706,"context_line":""},{"line_number":707,"context_line":"    Since sqlalchemy will likely retry by itself always revert if it fails"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_b0f688f7","line":704,"in_reply_to":"5a5ae5dd_f0a2d64a","updated":"2016-02-04 10:52:57.000000000","message":"Er... yes I can. I have no idea why I didn\u0027t do this in the first place. XD  I must have been tired at the time...","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"998cbd63b551c0484007ec5a00934cc50d206a10","unresolved":false,"context_lines":[{"line_number":707,"context_line":"    Since sqlalchemy will likely retry by itself always revert if it fails"},{"line_number":708,"context_line":"    \"\"\""},{"line_number":709,"context_line":""},{"line_number":710,"context_line":"    def execute(self, loadbalancer, listeners):"},{"line_number":711,"context_line":"        \"\"\"Mark the load balancer and listeners as active in DB.\"\"\""},{"line_number":712,"context_line":""},{"line_number":713,"context_line":"        LOG.debug(\"Mark ACTIVE in DB for load balancer id: %s \""}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_b66e9694","line":710,"updated":"2016-02-04 02:00:42.000000000","message":"Missing unit tests","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ec8b009f97bfa5ef665a186dfad0fa1f3ed77969","unresolved":false,"context_lines":[{"line_number":707,"context_line":"    Since sqlalchemy will likely retry by itself always revert if it fails"},{"line_number":708,"context_line":"    \"\"\""},{"line_number":709,"context_line":""},{"line_number":710,"context_line":"    def execute(self, loadbalancer, listeners):"},{"line_number":711,"context_line":"        \"\"\"Mark the load balancer and listeners as active in DB.\"\"\""},{"line_number":712,"context_line":""},{"line_number":713,"context_line":"        LOG.debug(\"Mark ACTIVE in DB for load balancer id: %s \""}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_f0d3a05d","line":710,"in_reply_to":"5a5ae5dd_b66e9694","updated":"2016-02-04 10:52:57.000000000","message":"They should be there now (re-used the ones from the singular method.)","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"998cbd63b551c0484007ec5a00934cc50d206a10","unresolved":false,"context_lines":[{"line_number":720,"context_line":"            self.listener_repo.update(db_apis.get_session(), listener.id,"},{"line_number":721,"context_line":"                                      provisioning_status\u003dconstants.ACTIVE)"},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"    def revert(self, loadbalancer, listeners, *args, **kwargs):"},{"line_number":724,"context_line":"        \"\"\"Mark the load balancer and listeners as broken.\"\"\""},{"line_number":725,"context_line":""},{"line_number":726,"context_line":"        LOG.warn(_LW(\"Reverting mark load balancer \""}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_76681e88","line":723,"updated":"2016-02-04 02:00:42.000000000","message":"Missing unit tests","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ec8b009f97bfa5ef665a186dfad0fa1f3ed77969","unresolved":false,"context_lines":[{"line_number":720,"context_line":"            self.listener_repo.update(db_apis.get_session(), listener.id,"},{"line_number":721,"context_line":"                                      provisioning_status\u003dconstants.ACTIVE)"},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"    def revert(self, loadbalancer, listeners, *args, **kwargs):"},{"line_number":724,"context_line":"        \"\"\"Mark the load balancer and listeners as broken.\"\"\""},{"line_number":725,"context_line":""},{"line_number":726,"context_line":"        LOG.warn(_LW(\"Reverting mark load balancer \""}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_30ba980b","line":723,"in_reply_to":"5a5ae5dd_76681e88","updated":"2016-02-04 10:52:57.000000000","message":"They should be there now (re-used the ones from the singular method.)","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"}],"octavia/db/base_models.py":[{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"b3a4ee67d6fb348d46ddea44da83bb082ecd756b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright 2014 Rackspace"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_9bf072cb","line":1,"updated":"2016-01-26 20:41:25.000000000","message":"Add your Copyright section here.","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"66c80c1c53ffa970712391b1f669b0dda4aa0a3a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright 2014 Rackspace"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_9eeb7bb0","line":1,"in_reply_to":"9a68dd71_9bf072cb","updated":"2016-01-26 23:53:39.000000000","message":"Done","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"}],"octavia/db/migration/alembic_migrations/versions/29ff921a6eb_shared_pools.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"998cbd63b551c0484007ec5a00934cc50d206a10","unresolved":false,"context_lines":[{"line_number":15,"context_line":"\"\"\"Shared pools"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Revision ID: 29ff921a6eb"},{"line_number":18,"context_line":"Revises: 6abb04f24c5"},{"line_number":19,"context_line":"Create Date: 2015-12-09 10:32:12.712932"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"\"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_934ccc43","line":18,"updated":"2016-02-04 02:00:42.000000000","message":"This needs updated too","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ec8b009f97bfa5ef665a186dfad0fa1f3ed77969","unresolved":false,"context_lines":[{"line_number":15,"context_line":"\"\"\"Shared pools"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Revision ID: 29ff921a6eb"},{"line_number":18,"context_line":"Revises: 6abb04f24c5"},{"line_number":19,"context_line":"Create Date: 2015-12-09 10:32:12.712932"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"\"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_2aa6a553","line":18,"in_reply_to":"5a5ae5dd_934ccc43","updated":"2016-02-04 10:52:57.000000000","message":"Done","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"}],"octavia/db/models.py":[{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"b3a4ee67d6fb348d46ddea44da83bb082ecd756b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright 2014 Rackspace"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_5bb99aeb","line":1,"updated":"2016-01-26 20:41:25.000000000","message":"Add your Copyright section here.","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"66c80c1c53ffa970712391b1f669b0dda4aa0a3a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright 2014 Rackspace"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_fedab716","line":1,"in_reply_to":"9a68dd71_5bb99aeb","updated":"2016-01-26 23:53:39.000000000","message":"Done","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"43d34fd4a4c2fe6cf059dcd4715f603bca02af99","unresolved":false,"context_lines":[{"line_number":215,"context_line":"                                                         uselist\u003dTrue,"},{"line_number":216,"context_line":"                                                         cascade\u003d\"delete\"))"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    # Defining this as a custom method instead of an SQLAlchemy relationship"},{"line_number":219,"context_line":"    # for now. When L7 gets added, this list will also include any listeners"},{"line_number":220,"context_line":"    # referenced by enabled L7policies"},{"line_number":221,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_c04a7bac","line":218,"range":{"start_line":218,"start_character":50,"end_line":218,"end_character":52},"updated":"2016-01-26 20:36:27.000000000","message":"AN SQL Alchemy relationship?  \"a SQL alchemy\"... come now...","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"c0aaa5062ddac70c34146d5c0c952717bb2ffe9a","unresolved":false,"context_lines":[{"line_number":215,"context_line":"                                                         uselist\u003dTrue,"},{"line_number":216,"context_line":"                                                         cascade\u003d\"delete\"))"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    # Defining this as a custom method instead of an SQLAlchemy relationship"},{"line_number":219,"context_line":"    # for now. When L7 gets added, this list will also include any listeners"},{"line_number":220,"context_line":"    # referenced by enabled L7policies"},{"line_number":221,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_099c3768","line":218,"range":{"start_line":218,"start_character":50,"end_line":218,"end_character":52},"in_reply_to":"9a68dd71_c04a7bac","updated":"2016-01-27 00:17:05.000000000","message":"Really?  You say \"sequel\" instead of \"ess-que-ell\"? You don\u0027t like your TLAs? What kind of computer scientist are you?\n\n(Fine, fine, I\u0027ll change it. :P )","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"}],"octavia/db/repositories.py":[{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"43d34fd4a4c2fe6cf059dcd4715f603bca02af99","unresolved":false,"context_lines":[{"line_number":358,"context_line":"            listener_db.update(model_kwargs)"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"    def create(self, session, **model_kwargs):"},{"line_number":361,"context_line":"        \"\"\"Creates a new Listener with a some validation.\"\"\""},{"line_number":362,"context_line":"        with session.begin(subtransactions\u003dTrue):"},{"line_number":363,"context_line":"            # Verify any specified default_pool_id exists"},{"line_number":364,"context_line":"            default_pool_id \u003d model_kwargs.get(\u0027default_pool_id\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_c054bb22","line":361,"updated":"2016-01-26 20:36:27.000000000","message":"\"with a some validation\"  should be \"with some validation\".","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"c0aaa5062ddac70c34146d5c0c952717bb2ffe9a","unresolved":false,"context_lines":[{"line_number":358,"context_line":"            listener_db.update(model_kwargs)"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"    def create(self, session, **model_kwargs):"},{"line_number":361,"context_line":"        \"\"\"Creates a new Listener with a some validation.\"\"\""},{"line_number":362,"context_line":"        with session.begin(subtransactions\u003dTrue):"},{"line_number":363,"context_line":"            # Verify any specified default_pool_id exists"},{"line_number":364,"context_line":"            default_pool_id \u003d model_kwargs.get(\u0027default_pool_id\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_69aff37d","line":361,"in_reply_to":"9a68dd71_c054bb22","updated":"2016-01-27 00:17:05.000000000","message":"I was going for \"awesome.\"  But, eh... whatever. ;)","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"636fea6a1b071e52f7503f582ccafd3624ecb1af","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 Rackspace"},{"line_number":2,"context_line":"# Copyright 2015 Blue Box, an IBM Company"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":5,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a68dd71_af4c0b77","line":2,"updated":"2016-01-27 01:09:21.000000000","message":"2016?","commit_id":"4730c62629bd4c654aad362c4e5ee22a4e7ff72f"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"636fea6a1b071e52f7503f582ccafd3624ecb1af","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                                     default_pool_id\u003dpool_dict[\u0027id\u0027])"},{"line_number":180,"context_line":"        return self.pool.get(session, id\u003ddb_pool.id)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def update_pool_and_sp(self, session, pool_id, pool_dict, sp_dict):"},{"line_number":183,"context_line":"        \"\"\"Updates a pool and session persistence entity in the database."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        :param session: A Sql Alchemy database session."}],"source_content_type":"text/x-python","patch_set":18,"id":"9a68dd71_2f681bba","line":182,"range":{"start_line":182,"start_character":8,"end_line":182,"end_character":26},"updated":"2016-01-27 01:09:21.000000000","message":"why sp and not session_persistence?","commit_id":"4730c62629bd4c654aad362c4e5ee22a4e7ff72f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"58c26b6b0577d002b35f34388277e8f2540ef172","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                                     default_pool_id\u003dpool_dict[\u0027id\u0027])"},{"line_number":180,"context_line":"        return self.pool.get(session, id\u003ddb_pool.id)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def update_pool_and_sp(self, session, pool_id, pool_dict, sp_dict):"},{"line_number":183,"context_line":"        \"\"\"Updates a pool and session persistence entity in the database."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        :param session: A Sql Alchemy database session."}],"source_content_type":"text/x-python","patch_set":18,"id":"9a68dd71_aafe3903","line":182,"range":{"start_line":182,"start_character":8,"end_line":182,"end_character":26},"in_reply_to":"9a68dd71_2f681bba","updated":"2016-01-27 01:46:45.000000000","message":"Line length? Also, there are other methods and variable names which refer to session_persistence as \"sp\"\n\nIf you feel strongly about the name here, I can change it. Let me know.","commit_id":"4730c62629bd4c654aad362c4e5ee22a4e7ff72f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"998cbd63b551c0484007ec5a00934cc50d206a10","unresolved":false,"context_lines":[{"line_number":329,"context_line":"            pool_db \u003d (session.query(models.Pool)."},{"line_number":330,"context_line":"                       filter_by(id\u003dpool_id)."},{"line_number":331,"context_line":"                       filter(models.LoadBalancer.id.in_(lb_subquery)).first())"},{"line_number":332,"context_line":"        elif lb_id:"},{"line_number":333,"context_line":"            pool_db \u003d (session.query(models.Pool)."},{"line_number":334,"context_line":"                       filter_by(id\u003dpool_id)."},{"line_number":335,"context_line":"                       filter_by(load_balancer_id\u003dlb_id).first())"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_f6e08efc","line":332,"updated":"2016-02-04 02:00:42.000000000","message":"Missing unit test for neither condition","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ec8b009f97bfa5ef665a186dfad0fa1f3ed77969","unresolved":false,"context_lines":[{"line_number":329,"context_line":"            pool_db \u003d (session.query(models.Pool)."},{"line_number":330,"context_line":"                       filter_by(id\u003dpool_id)."},{"line_number":331,"context_line":"                       filter(models.LoadBalancer.id.in_(lb_subquery)).first())"},{"line_number":332,"context_line":"        elif lb_id:"},{"line_number":333,"context_line":"            pool_db \u003d (session.query(models.Pool)."},{"line_number":334,"context_line":"                       filter_by(id\u003dpool_id)."},{"line_number":335,"context_line":"                       filter_by(load_balancer_id\u003dlb_id).first())"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_d52c564c","line":332,"in_reply_to":"5a5ae5dd_f6e08efc","updated":"2016-02-04 10:52:57.000000000","message":"This method only gets called if default_pool_id is specified, and in those cases either the listener_id or the lb_id is also being specified. There is no way to check the \u0027neither\u0027 condition.","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"90a841c5b8d5ac4e9688b6447bfff88472610ebc","unresolved":false,"context_lines":[{"line_number":202,"context_line":"            db_pool \u003d self.pool.get(session, id\u003dpool_id)"},{"line_number":203,"context_line":"        return db_pool"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def test_and_set_lb_and_listeners_prov_status(self, session, lb_id,"},{"line_number":206,"context_line":"                                                  lb_prov_status,"},{"line_number":207,"context_line":"                                                  listener_prov_status,"},{"line_number":208,"context_line":"                                                  listener_ids\u003dNone):"}],"source_content_type":"text/x-python","patch_set":25,"id":"5a5ae5dd_c11c73c3","line":205,"updated":"2016-02-04 22:33:52.000000000","message":"nit: \"test_and_set_lb_and_listeners_prov_statuses\"... if you want to be 100% accurate :D","commit_id":"4bfea2a35b9b1cee30543d225f74dd1bd654008d"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"8e77ccc07b2a729c1c6191712f1452e205b9d649","unresolved":false,"context_lines":[{"line_number":202,"context_line":"            db_pool \u003d self.pool.get(session, id\u003dpool_id)"},{"line_number":203,"context_line":"        return db_pool"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def test_and_set_lb_and_listeners_prov_status(self, session, lb_id,"},{"line_number":206,"context_line":"                                                  lb_prov_status,"},{"line_number":207,"context_line":"                                                  listener_prov_status,"},{"line_number":208,"context_line":"                                                  listener_ids\u003dNone):"}],"source_content_type":"text/x-python","patch_set":25,"id":"5a5ae5dd_ada60651","line":205,"in_reply_to":"5a5ae5dd_c11c73c3","updated":"2016-02-05 00:46:09.000000000","message":"I thought about it, but figured it\u0027s already a long enough method name, and is obvious from the name what it\u0027s doing...","commit_id":"4bfea2a35b9b1cee30543d225f74dd1bd654008d"}],"octavia/tests/functional/api/v1/base.py":[{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"b3a4ee67d6fb348d46ddea44da83bb082ecd756b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright 2014 Rackspace"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_3bb866e5","line":1,"updated":"2016-01-26 20:41:25.000000000","message":"Add your Copyright section here.","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"66c80c1c53ffa970712391b1f669b0dda4aa0a3a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright 2014 Rackspace"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_1eef8bb1","line":1,"in_reply_to":"9a68dd71_3bb866e5","updated":"2016-01-26 23:53:39.000000000","message":"Done","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"}],"octavia/tests/functional/api/v1/test_health_monitor.py":[{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"b3a4ee67d6fb348d46ddea44da83bb082ecd756b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright 2014 Rackspace"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_fbcace6d","line":1,"updated":"2016-01-26 20:41:25.000000000","message":"Add your Copyright section here.","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"66c80c1c53ffa970712391b1f669b0dda4aa0a3a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright 2014 Rackspace"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_5e3c232f","line":1,"in_reply_to":"9a68dd71_fbcace6d","updated":"2016-01-26 23:53:39.000000000","message":"Done","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"998cbd63b551c0484007ec5a00934cc50d206a10","unresolved":false,"context_lines":[{"line_number":207,"context_line":"                                   constants.HEALTH_MONITOR_HTTP, 1, 1, 1, 1)"},{"line_number":208,"context_line":"        self.set_lb_status(self.lb.get(\u0027id\u0027))"},{"line_number":209,"context_line":"        self.delete(self.LB_PATH.format(lb_id\u003dself.lb.get(\u0027id\u0027)))"},{"line_number":210,"context_line":"        self.delete(self.hm_path, status\u003d409)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_73eef0b5","line":210,"updated":"2016-02-04 02:00:42.000000000","message":"Why did this file change?","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ec8b009f97bfa5ef665a186dfad0fa1f3ed77969","unresolved":false,"context_lines":[{"line_number":207,"context_line":"                                   constants.HEALTH_MONITOR_HTTP, 1, 1, 1, 1)"},{"line_number":208,"context_line":"        self.set_lb_status(self.lb.get(\u0027id\u0027))"},{"line_number":209,"context_line":"        self.delete(self.LB_PATH.format(lb_id\u003dself.lb.get(\u0027id\u0027)))"},{"line_number":210,"context_line":"        self.delete(self.hm_path, status\u003d409)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_4a0d213d","line":210,"in_reply_to":"5a5ae5dd_73eef0b5","updated":"2016-02-04 10:52:57.000000000","message":"That\u0027s weird... I\u0027m not sure. In any case, it\u0027s changed a lot more now (more unit tests).","commit_id":"f4fa64025b1d6d4251b3431bc0210efd1470a9c7"}],"octavia/tests/functional/api/v1/test_pool.py":[{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"b3a4ee67d6fb348d46ddea44da83bb082ecd756b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright 2014 Rackspace"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_5ba0baa5","line":1,"updated":"2016-01-26 20:41:25.000000000","message":"Add your Copyright section here.","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"66c80c1c53ffa970712391b1f669b0dda4aa0a3a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright 2014 Rackspace"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_1e46abbf","line":1,"in_reply_to":"9a68dd71_5ba0baa5","updated":"2016-01-26 23:53:39.000000000","message":"Done","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"}],"octavia/tests/functional/db/test_models.py":[{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"b3a4ee67d6fb348d46ddea44da83bb082ecd756b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright 2014 Rackspace"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_1baa4286","line":1,"updated":"2016-01-26 20:41:25.000000000","message":"Add your Copyright section here.","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"66c80c1c53ffa970712391b1f669b0dda4aa0a3a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright 2014 Rackspace"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_5e23c305","line":1,"in_reply_to":"9a68dd71_1baa4286","updated":"2016-01-26 23:53:39.000000000","message":"Done","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"}],"octavia/tests/functional/db/test_repositories.py":[{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"b3a4ee67d6fb348d46ddea44da83bb082ecd756b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright 2014 Rackspace"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_3baf0696","line":1,"updated":"2016-01-26 20:41:25.000000000","message":"Add your Copyright section here.","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"66c80c1c53ffa970712391b1f669b0dda4aa0a3a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright 2014 Rackspace"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_1e1d4bbd","line":1,"in_reply_to":"9a68dd71_3baf0696","updated":"2016-01-26 23:53:39.000000000","message":"Done","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"}],"octavia/tests/unit/amphorae/drivers/haproxy/jinja/test_jinja_cfg.py":[{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"b3a4ee67d6fb348d46ddea44da83bb082ecd756b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 OpenStack Foundation"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_db94aa45","line":1,"updated":"2016-01-26 20:41:25.000000000","message":"Add your Copyright section here.","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"66c80c1c53ffa970712391b1f669b0dda4aa0a3a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 OpenStack Foundation"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_5e6ae31b","line":1,"in_reply_to":"9a68dd71_db94aa45","updated":"2016-01-26 23:53:39.000000000","message":"Done","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"}],"octavia/tests/unit/api/v1/types/test_listeners.py":[{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"b3a4ee67d6fb348d46ddea44da83bb082ecd756b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright 2014 Rackspace"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_bb9bf671","line":1,"updated":"2016-01-26 20:41:25.000000000","message":"Add your Copyright section here.","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"66c80c1c53ffa970712391b1f669b0dda4aa0a3a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright 2014 Rackspace"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_de64934a","line":1,"in_reply_to":"9a68dd71_bb9bf671","updated":"2016-01-26 23:53:39.000000000","message":"Done","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"}],"octavia/tests/unit/common/sample_configs/sample_configs.py":[{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"b3a4ee67d6fb348d46ddea44da83bb082ecd756b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_5b875a12","line":1,"updated":"2016-01-26 20:41:25.000000000","message":"Add your Copyright section here.","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"66c80c1c53ffa970712391b1f669b0dda4aa0a3a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_fee4f7ac","line":1,"in_reply_to":"9a68dd71_5b875a12","updated":"2016-01-26 23:53:39.000000000","message":"Done","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"}],"octavia/tests/unit/controller/worker/flows/test_health_monitor_flows.py":[{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"b3a4ee67d6fb348d46ddea44da83bb082ecd756b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_1b81e2fb","line":1,"updated":"2016-01-26 20:41:25.000000000","message":"Add your Copyright section here.","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"66c80c1c53ffa970712391b1f669b0dda4aa0a3a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_3e028f3f","line":1,"in_reply_to":"9a68dd71_1b81e2fb","updated":"2016-01-26 23:53:39.000000000","message":"Done","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"}],"octavia/tests/unit/controller/worker/flows/test_listener_flows.py":[{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"b3a4ee67d6fb348d46ddea44da83bb082ecd756b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_3b862614","line":1,"updated":"2016-01-26 20:41:25.000000000","message":"Add your Copyright section here.","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"66c80c1c53ffa970712391b1f669b0dda4aa0a3a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_fefb9745","line":1,"in_reply_to":"9a68dd71_3b862614","updated":"2016-01-26 23:53:39.000000000","message":"Done","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"}],"octavia/tests/unit/controller/worker/flows/test_member_flows.py":[{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"b3a4ee67d6fb348d46ddea44da83bb082ecd756b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_db7b4a28","line":1,"updated":"2016-01-26 20:41:25.000000000","message":"Add your Copyright section here.","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"66c80c1c53ffa970712391b1f669b0dda4aa0a3a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_de99f320","line":1,"in_reply_to":"9a68dd71_db7b4a28","updated":"2016-01-26 23:53:39.000000000","message":"Done","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"}],"octavia/tests/unit/controller/worker/flows/test_pool_flows.py":[{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"b3a4ee67d6fb348d46ddea44da83bb082ecd756b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_fb788e2d","line":1,"updated":"2016-01-26 20:41:25.000000000","message":"Add your Copyright section here.","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"66c80c1c53ffa970712391b1f669b0dda4aa0a3a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_3e892fcb","line":1,"in_reply_to":"9a68dd71_fb788e2d","updated":"2016-01-26 23:53:39.000000000","message":"Done","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"}],"octavia/tests/unit/controller/worker/tasks/test_amphora_driver_tasks.py":[{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"b3a4ee67d6fb348d46ddea44da83bb082ecd756b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_9b75d233","line":1,"updated":"2016-01-26 20:41:25.000000000","message":"Add your Copyright section here.","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"66c80c1c53ffa970712391b1f669b0dda4aa0a3a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_fe92b7f5","line":1,"in_reply_to":"9a68dd71_9b75d233","updated":"2016-01-26 23:53:39.000000000","message":"Done","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"}],"octavia/tests/unit/controller/worker/tasks/test_database_tasks.py":[{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"b3a4ee67d6fb348d46ddea44da83bb082ecd756b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_bb721648","line":1,"updated":"2016-01-26 20:41:25.000000000","message":"Add your Copyright section here.","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"66c80c1c53ffa970712391b1f669b0dda4aa0a3a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_bebbdf74","line":1,"in_reply_to":"9a68dd71_bb721648","updated":"2016-01-26 23:53:39.000000000","message":"Done","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"}],"octavia/tests/unit/controller/worker/test_controller_worker.py":[{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"b3a4ee67d6fb348d46ddea44da83bb082ecd756b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_5b8e7a28","line":1,"updated":"2016-01-26 20:41:25.000000000","message":"Add your Copyright section here.","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"66c80c1c53ffa970712391b1f669b0dda4aa0a3a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_3eb04f8b","line":1,"in_reply_to":"9a68dd71_5b8e7a28","updated":"2016-01-26 23:53:39.000000000","message":"Done","commit_id":"652625d20a6a3993c442eea40c013d44783a8f5f"}]}
