)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"75f40b5c7dba43a67136d0c9372b1a12977ee704","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2013-10-28 13:36:30 +0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"LBaaS: check for associations before deleting health monitor"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Closes-Bug: #1243129"},{"line_number":10,"context_line":"Change-Id: I27c20e7a5be8433f90569534ecf838e33027cb00"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAATn%2F%2FIek%3D","line":8,"updated":"2013-11-14 01:45:31.000000000","message":"Could you add more description?","commit_id":"02667458f2f643eadfbbd502640e0470d23884e8"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"0bfe4ccea905e10af788c538e7e3a718424baff8","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2013-10-28 13:36:30 +0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"LBaaS: check for associations before deleting health monitor"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Closes-Bug: #1243129"},{"line_number":10,"context_line":"Change-Id: I27c20e7a5be8433f90569534ecf838e33027cb00"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAATn%2F%2FGkg%3D","line":8,"in_reply_to":"AAAATn%2F%2FIek%3D","updated":"2013-11-14 11:51:52.000000000","message":"sure","commit_id":"02667458f2f643eadfbbd502640e0470d23884e8"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"994432e38d7ad1e6d59c4f605f1b5d4609eaae01","unresolved":false,"context_lines":[{"line_number":11,"context_line":"of monitor deletion becomes complex and unreliable since association"},{"line_number":12,"context_line":"deletion may fail on any single driver."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"DocImpact"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Closes-Bug: #1243129"},{"line_number":17,"context_line":"Change-Id: I27c20e7a5be8433f90569534ecf838e33027cb00"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"AAAATn%2F9Wp8%3D","line":14,"updated":"2013-12-12 10:39:36.000000000","message":"TIL - thanks!","commit_id":"8b31620f46929caa08dd07dba2372503be53ec26"}],"neutron/db/loadbalancer/loadbalancer_db.py":[{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"2acc55cfcac9e07e535d9cf67322bf444a525062","unresolved":false,"context_lines":[{"line_number":749,"context_line":"    def delete_health_monitor(self, context, id):"},{"line_number":750,"context_line":"        # check if the monitor has associations with pools"},{"line_number":751,"context_line":"        query \u003d self._model_query(context, PoolMonitorAssociation)"},{"line_number":752,"context_line":"        associations \u003d query.filter_by(monitor_id\u003did).all()"},{"line_number":753,"context_line":"        if associations:"},{"line_number":754,"context_line":"            raise loadbalancer.HealthMonitorInUse("},{"line_number":755,"context_line":"                monitor_id\u003did, pool_ids\u003d[a.pool_id for a in associations])"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2F6T8%3D","line":752,"updated":"2013-10-25 11:23:07.000000000","message":"i\u0027d use .first() here instead of .all() since it\u0027s cheaper operation.\nYou\u0027ll not be able to print the list of associated pools but that\u0027s ok since healthmonitor-show command shows this","commit_id":"a6c16844834c3c23e4075947b40e9908d27bea74"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"4646330cc560030721aa35922c7cf76e1ab6ad22","unresolved":false,"context_lines":[{"line_number":749,"context_line":"    def delete_health_monitor(self, context, id):"},{"line_number":750,"context_line":"        # check if the monitor has associations with pools"},{"line_number":751,"context_line":"        query \u003d self._model_query(context, PoolMonitorAssociation)"},{"line_number":752,"context_line":"        associations \u003d query.filter_by(monitor_id\u003did).all()"},{"line_number":753,"context_line":"        if associations:"},{"line_number":754,"context_line":"            raise loadbalancer.HealthMonitorInUse("},{"line_number":755,"context_line":"                monitor_id\u003did, pool_ids\u003d[a.pool_id for a in associations])"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2F6Pg%3D","line":752,"in_reply_to":"AAAATn%2F%2F6T8%3D","updated":"2013-10-25 11:51:37.000000000","message":"Done","commit_id":"a6c16844834c3c23e4075947b40e9908d27bea74"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"75f40b5c7dba43a67136d0c9372b1a12977ee704","unresolved":false,"context_lines":[{"line_number":758,"context_line":"    def delete_health_monitor(self, context, id):"},{"line_number":759,"context_line":"        # check if the monitor has associations with pools"},{"line_number":760,"context_line":"        query \u003d self._model_query(context, PoolMonitorAssociation)"},{"line_number":761,"context_line":"        associations \u003d query.filter_by(monitor_id\u003did).first()"},{"line_number":762,"context_line":"        if associations:"},{"line_number":763,"context_line":"            raise loadbalancer.HealthMonitorInUse(monitor_id\u003did)"},{"line_number":764,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2FIeY%3D","line":761,"updated":"2013-11-14 01:45:31.000000000","message":"association ?","commit_id":"02667458f2f643eadfbbd502640e0470d23884e8"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"0bfe4ccea905e10af788c538e7e3a718424baff8","unresolved":false,"context_lines":[{"line_number":758,"context_line":"    def delete_health_monitor(self, context, id):"},{"line_number":759,"context_line":"        # check if the monitor has associations with pools"},{"line_number":760,"context_line":"        query \u003d self._model_query(context, PoolMonitorAssociation)"},{"line_number":761,"context_line":"        associations \u003d query.filter_by(monitor_id\u003did).first()"},{"line_number":762,"context_line":"        if associations:"},{"line_number":763,"context_line":"            raise loadbalancer.HealthMonitorInUse(monitor_id\u003did)"},{"line_number":764,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2FGp0%3D","line":761,"in_reply_to":"AAAATn%2F%2FIeY%3D","updated":"2013-11-14 11:51:52.000000000","message":"will change this to bool and rename to has_associations","commit_id":"02667458f2f643eadfbbd502640e0470d23884e8"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"11d103a34b767565be64cdda5042f9772cb22915","unresolved":false,"context_lines":[{"line_number":758,"context_line":"    def delete_health_monitor(self, context, id):"},{"line_number":759,"context_line":"        # check if the monitor has associations with pools"},{"line_number":760,"context_line":"        query \u003d self._model_query(context, PoolMonitorAssociation)"},{"line_number":761,"context_line":"        has_associations \u003d query.filter_by(monitor_id\u003did).first() is not None"},{"line_number":762,"context_line":"        if has_associations:"},{"line_number":763,"context_line":"            raise loadbalancer.HealthMonitorInUse(monitor_id\u003did)"},{"line_number":764,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2FGFY%3D","line":761,"updated":"2013-11-14 13:33:30.000000000","message":"in fact \u0027is not None\u0027 it\u0027s not necessary, you can just rename association to has_associations","commit_id":"bc6225e3722f41052b27ef9779e4837431336ed7"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"b53faaf2d6ed4297bccf39177a0bdc27e35b134a","unresolved":false,"context_lines":[{"line_number":758,"context_line":"    def delete_health_monitor(self, context, id):"},{"line_number":759,"context_line":"        # check if the monitor has associations with pools"},{"line_number":760,"context_line":"        query \u003d self._model_query(context, PoolMonitorAssociation)"},{"line_number":761,"context_line":"        has_associations \u003d query.filter_by(monitor_id\u003did).first() is not None"},{"line_number":762,"context_line":"        if has_associations:"},{"line_number":763,"context_line":"            raise loadbalancer.HealthMonitorInUse(monitor_id\u003did)"},{"line_number":764,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2FFbo%3D","line":761,"in_reply_to":"AAAATn%2F%2FGFY%3D","updated":"2013-11-14 15:58:53.000000000","message":"Done","commit_id":"bc6225e3722f41052b27ef9779e4837431336ed7"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"994432e38d7ad1e6d59c4f605f1b5d4609eaae01","unresolved":false,"context_lines":[{"line_number":770,"context_line":"        return self._make_health_monitor_dict(monitor_db)"},{"line_number":771,"context_line":""},{"line_number":772,"context_line":"    def delete_health_monitor(self, context, id):"},{"line_number":773,"context_line":"        # check if the monitor has associations with pools"},{"line_number":774,"context_line":"        query \u003d self._model_query(context, PoolMonitorAssociation)"},{"line_number":775,"context_line":"        has_associations \u003d query.filter_by(monitor_id\u003did).first()"},{"line_number":776,"context_line":"        if has_associations:"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9W0s%3D","line":773,"updated":"2013-12-12 10:39:36.000000000","message":"perhaps make this a docstring to explain that it will first check for associations and fail accordingly - since we are changing current behaviour here (and there will be api doc impact too) - just suggestion","commit_id":"8b31620f46929caa08dd07dba2372503be53ec26"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"9d45802db7dadfb09951f9d9d9010208b761805f","unresolved":false,"context_lines":[{"line_number":770,"context_line":"        return self._make_health_monitor_dict(monitor_db)"},{"line_number":771,"context_line":""},{"line_number":772,"context_line":"    def delete_health_monitor(self, context, id):"},{"line_number":773,"context_line":"        # check if the monitor has associations with pools"},{"line_number":774,"context_line":"        query \u003d self._model_query(context, PoolMonitorAssociation)"},{"line_number":775,"context_line":"        has_associations \u003d query.filter_by(monitor_id\u003did).first()"},{"line_number":776,"context_line":"        if has_associations:"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9WoQ%3D","line":773,"in_reply_to":"AAAATn%2F9W0s%3D","updated":"2013-12-12 10:57:20.000000000","message":"Agree","commit_id":"8b31620f46929caa08dd07dba2372503be53ec26"}],"neutron/tests/unit/db/loadbalancer/test_db_loadbalancer.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"ab9435c96f17680fe7512a70c5706e78bacf516c","unresolved":false,"context_lines":[{"line_number":957,"context_line":"                    monitor[\u0027health_monitor\u0027][\u0027id\u0027]"},{"line_number":958,"context_line":"                )"},{"line_number":959,"context_line":"                res \u003d req.get_response(self.ext_api)"},{"line_number":960,"context_line":"                self.assertEqual(res.status_int, 409)"},{"line_number":961,"context_line":""},{"line_number":962,"context_line":"                qry \u003d ctx.session.query(ldb.HealthMonitor)"},{"line_number":963,"context_line":"                qry \u003d qry.filter_by(id\u003dmonitor[\u0027health_monitor\u0027][\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2F540%3D","line":960,"updated":"2013-10-25 13:22:54.000000000","message":"Use constant vs magic number","commit_id":"f5485df28f6112f967adf37869ef237a8df4565e"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"bd0c5cd5b9e5d85277ec155db6759875f2774ea1","unresolved":false,"context_lines":[{"line_number":957,"context_line":"                    monitor[\u0027health_monitor\u0027][\u0027id\u0027]"},{"line_number":958,"context_line":"                )"},{"line_number":959,"context_line":"                res \u003d req.get_response(self.ext_api)"},{"line_number":960,"context_line":"                self.assertEqual(res.status_int, 409)"},{"line_number":961,"context_line":""},{"line_number":962,"context_line":"                qry \u003d ctx.session.query(ldb.HealthMonitor)"},{"line_number":963,"context_line":"                qry \u003d qry.filter_by(id\u003dmonitor[\u0027health_monitor\u0027][\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2F1Z4%3D","line":960,"in_reply_to":"AAAATn%2F%2F3IA%3D","updated":"2013-10-28 10:56:26.000000000","message":"Reported a bug on this: https://bugs.launchpad.net/neutron/+bug/1245388","commit_id":"f5485df28f6112f967adf37869ef237a8df4565e"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"05d8cea41826f709522b1bbe8b67966b8616aa51","unresolved":false,"context_lines":[{"line_number":957,"context_line":"                    monitor[\u0027health_monitor\u0027][\u0027id\u0027]"},{"line_number":958,"context_line":"                )"},{"line_number":959,"context_line":"                res \u003d req.get_response(self.ext_api)"},{"line_number":960,"context_line":"                self.assertEqual(res.status_int, 409)"},{"line_number":961,"context_line":""},{"line_number":962,"context_line":"                qry \u003d ctx.session.query(ldb.HealthMonitor)"},{"line_number":963,"context_line":"                qry \u003d qry.filter_by(id\u003dmonitor[\u0027health_monitor\u0027][\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2F3IA%3D","line":960,"in_reply_to":"AAAATn%2F%2F540%3D","updated":"2013-10-26 14:27:59.000000000","message":"i think this is inline with other places in this file. That might worth cleaning in a separate patch, but not within this one","commit_id":"f5485df28f6112f967adf37869ef237a8df4565e"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"ab9435c96f17680fe7512a70c5706e78bacf516c","unresolved":false,"context_lines":[{"line_number":1275,"context_line":"                    subresource\u003d\"health_monitors\","},{"line_number":1276,"context_line":"                    sub_id\u003dhealth_monitor[\u0027health_monitor\u0027][\u0027id\u0027])"},{"line_number":1277,"context_line":"                res \u003d req.get_response(self.ext_api)"},{"line_number":1278,"context_line":"                self.assertEqual(res.status_int, 204)"},{"line_number":1279,"context_line":"                self._delete(\u0027health_monitors\u0027,"},{"line_number":1280,"context_line":"                             health_monitor[\u0027health_monitor\u0027][\u0027id\u0027])"},{"line_number":1281,"context_line":"                self._delete(\u0027members\u0027, member1[\u0027member\u0027][\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2F54c%3D","line":1278,"updated":"2013-10-25 13:22:54.000000000","message":"Ditto.","commit_id":"f5485df28f6112f967adf37869ef237a8df4565e"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"ab9435c96f17680fe7512a70c5706e78bacf516c","unresolved":false,"context_lines":[{"line_number":1309,"context_line":"                    health_mon2[\u0027health_monitor\u0027][\u0027id\u0027], pool[\u0027pool\u0027][\u0027id\u0027])"},{"line_number":1310,"context_line":"                self.assertEqual(res[\u0027tenant_id\u0027],"},{"line_number":1311,"context_line":"                                 health_mon1[\u0027health_monitor\u0027][\u0027tenant_id\u0027])"},{"line_number":1312,"context_line":"                self.plugin.delete_pool_health_monitor("},{"line_number":1313,"context_line":"                    context.get_admin_context(),"},{"line_number":1314,"context_line":"                    health_mon1[\u0027health_monitor\u0027][\u0027id\u0027],"},{"line_number":1315,"context_line":"                    pool[\u0027pool\u0027][\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2F52k%3D","line":1312,"updated":"2013-10-25 13:22:54.000000000","message":"Is the intent of these two deletes to clean up? If so, should be part of teardown. If asserts above fail, they won\u0027t be executed.","commit_id":"f5485df28f6112f967adf37869ef237a8df4565e"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"bd0c5cd5b9e5d85277ec155db6759875f2774ea1","unresolved":false,"context_lines":[{"line_number":1309,"context_line":"                    health_mon2[\u0027health_monitor\u0027][\u0027id\u0027], pool[\u0027pool\u0027][\u0027id\u0027])"},{"line_number":1310,"context_line":"                self.assertEqual(res[\u0027tenant_id\u0027],"},{"line_number":1311,"context_line":"                                 health_mon1[\u0027health_monitor\u0027][\u0027tenant_id\u0027])"},{"line_number":1312,"context_line":"                self.plugin.delete_pool_health_monitor("},{"line_number":1313,"context_line":"                    context.get_admin_context(),"},{"line_number":1314,"context_line":"                    health_mon1[\u0027health_monitor\u0027][\u0027id\u0027],"},{"line_number":1315,"context_line":"                    pool[\u0027pool\u0027][\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2F1WU%3D","line":1312,"in_reply_to":"AAAATn%2F%2F52k%3D","updated":"2013-10-28 10:56:26.000000000","message":"The problem is that the error will be raised before reaching tearDown(): after exiting with statement health_monitor is deleted which is impossible if thare are associations. I think the workaround is possible - create pool after creating health monitors so on pool deletion all associations will be auto deleted, I\u0027ll try that.","commit_id":"f5485df28f6112f967adf37869ef237a8df4565e"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"ab9435c96f17680fe7512a70c5706e78bacf516c","unresolved":false,"context_lines":[{"line_number":1340,"context_line":"                    mock.ANY, hm[\u0027health_monitor\u0027], pool[\u0027pool\u0027][\u0027id\u0027])"},{"line_number":1341,"context_line":"                self.plugin.delete_pool_health_monitor("},{"line_number":1342,"context_line":"                    context.get_admin_context(),"},{"line_number":1343,"context_line":"                    hm[\u0027health_monitor\u0027][\u0027id\u0027],"},{"line_number":1344,"context_line":"                    pool[\u0027pool\u0027][\u0027id\u0027])"},{"line_number":1345,"context_line":""},{"line_number":1346,"context_line":"    def test_pool_monitor_list_of_pools(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2F51k%3D","line":1343,"updated":"2013-10-25 13:22:54.000000000","message":"Ditto on these other occurrences of deletes.","commit_id":"f5485df28f6112f967adf37869ef237a8df4565e"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"f2dc42eeaf4134c78488fcd171ed4b429628851b","unresolved":false,"context_lines":[{"line_number":976,"context_line":"                    monitor[\u0027health_monitor\u0027][\u0027id\u0027]"},{"line_number":977,"context_line":"                )"},{"line_number":978,"context_line":"                res \u003d req.get_response(self.ext_api)"},{"line_number":979,"context_line":"                self.assertEqual(res.status_int, 409)"},{"line_number":980,"context_line":""},{"line_number":981,"context_line":"                qry \u003d ctx.session.query(ldb.HealthMonitor)"},{"line_number":982,"context_line":"                qry \u003d qry.filter_by(id\u003dmonitor[\u0027health_monitor\u0027][\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2FGGI%3D","line":979,"updated":"2013-11-14 13:31:05.000000000","message":"Should switch from magic number (409) to using literal webob.exc.HTTPConfict.","commit_id":"bc6225e3722f41052b27ef9779e4837431336ed7"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"b53faaf2d6ed4297bccf39177a0bdc27e35b134a","unresolved":false,"context_lines":[{"line_number":976,"context_line":"                    monitor[\u0027health_monitor\u0027][\u0027id\u0027]"},{"line_number":977,"context_line":"                )"},{"line_number":978,"context_line":"                res \u003d req.get_response(self.ext_api)"},{"line_number":979,"context_line":"                self.assertEqual(res.status_int, 409)"},{"line_number":980,"context_line":""},{"line_number":981,"context_line":"                qry \u003d ctx.session.query(ldb.HealthMonitor)"},{"line_number":982,"context_line":"                qry \u003d qry.filter_by(id\u003dmonitor[\u0027health_monitor\u0027][\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2FFbw%3D","line":979,"in_reply_to":"AAAATn%2F%2FGGI%3D","updated":"2013-11-14 15:58:53.000000000","message":"Done","commit_id":"bc6225e3722f41052b27ef9779e4837431336ed7"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"f2dc42eeaf4134c78488fcd171ed4b429628851b","unresolved":false,"context_lines":[{"line_number":1294,"context_line":"                    subresource\u003d\"health_monitors\","},{"line_number":1295,"context_line":"                    sub_id\u003dhealth_monitor[\u0027health_monitor\u0027][\u0027id\u0027])"},{"line_number":1296,"context_line":"                res \u003d req.get_response(self.ext_api)"},{"line_number":1297,"context_line":"                self.assertEqual(res.status_int, 204)"},{"line_number":1298,"context_line":"                self._delete(\u0027health_monitors\u0027,"},{"line_number":1299,"context_line":"                             health_monitor[\u0027health_monitor\u0027][\u0027id\u0027])"},{"line_number":1300,"context_line":"                self._delete(\u0027members\u0027, member1[\u0027member\u0027][\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2FGGA%3D","line":1297,"updated":"2013-11-14 13:31:05.000000000","message":"Ditto on status codes.","commit_id":"bc6225e3722f41052b27ef9779e4837431336ed7"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"b53faaf2d6ed4297bccf39177a0bdc27e35b134a","unresolved":false,"context_lines":[{"line_number":1294,"context_line":"                    subresource\u003d\"health_monitors\","},{"line_number":1295,"context_line":"                    sub_id\u003dhealth_monitor[\u0027health_monitor\u0027][\u0027id\u0027])"},{"line_number":1296,"context_line":"                res \u003d req.get_response(self.ext_api)"},{"line_number":1297,"context_line":"                self.assertEqual(res.status_int, 204)"},{"line_number":1298,"context_line":"                self._delete(\u0027health_monitors\u0027,"},{"line_number":1299,"context_line":"                             health_monitor[\u0027health_monitor\u0027][\u0027id\u0027])"},{"line_number":1300,"context_line":"                self._delete(\u0027members\u0027, member1[\u0027member\u0027][\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2FFb0%3D","line":1297,"in_reply_to":"AAAATn%2F%2FGGA%3D","updated":"2013-11-14 15:58:53.000000000","message":"Done","commit_id":"bc6225e3722f41052b27ef9779e4837431336ed7"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"a68c714197bcff1c1eb453e58ad5f044bb9736c1","unresolved":false,"context_lines":[{"line_number":1367,"context_line":"                                 pool_updated[\u0027pool\u0027][\u0027id\u0027])"},{"line_number":1368,"context_line":""},{"line_number":1369,"context_line":"                # clean up"},{"line_number":1370,"context_line":"                # disassociate the health_monitor from the pool first"},{"line_number":1371,"context_line":"                req \u003d self.new_delete_request("},{"line_number":1372,"context_line":"                    \"pools\","},{"line_number":1373,"context_line":"                    fmt\u003dself.fmt,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9c6s%3D","line":1370,"updated":"2013-12-11 11:46:02.000000000","message":"I\u0027m not sure if I missed it, but if this test case fails, before this point, will the health monitor and pools be cleaned up?","commit_id":"8b31620f46929caa08dd07dba2372503be53ec26"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"a51ad83f7eb2fb22b39c89649ad8cfb88bf81494","unresolved":false,"context_lines":[{"line_number":1367,"context_line":"                                 pool_updated[\u0027pool\u0027][\u0027id\u0027])"},{"line_number":1368,"context_line":""},{"line_number":1369,"context_line":"                # clean up"},{"line_number":1370,"context_line":"                # disassociate the health_monitor from the pool first"},{"line_number":1371,"context_line":"                req \u003d self.new_delete_request("},{"line_number":1372,"context_line":"                    \"pools\","},{"line_number":1373,"context_line":"                    fmt\u003dself.fmt,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9c38%3D","line":1370,"in_reply_to":"AAAATn%2F9c4g%3D","updated":"2013-12-11 11:51:54.000000000","message":"Cool! I did miss it. Thanks.","commit_id":"8b31620f46929caa08dd07dba2372503be53ec26"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"e34987b8eff9cf36a519289f88f9b7155fa41791","unresolved":false,"context_lines":[{"line_number":1367,"context_line":"                                 pool_updated[\u0027pool\u0027][\u0027id\u0027])"},{"line_number":1368,"context_line":""},{"line_number":1369,"context_line":"                # clean up"},{"line_number":1370,"context_line":"                # disassociate the health_monitor from the pool first"},{"line_number":1371,"context_line":"                req \u003d self.new_delete_request("},{"line_number":1372,"context_line":"                    \"pools\","},{"line_number":1373,"context_line":"                    fmt\u003dself.fmt,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9c4g%3D","line":1370,"in_reply_to":"AAAATn%2F9c6s%3D","updated":"2013-12-11 11:50:45.000000000","message":"the cleanup is ensured in NeutronDbPluginV2TestCase tearDown() by calling db.clear_db().","commit_id":"8b31620f46929caa08dd07dba2372503be53ec26"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"bc6161f935ba219d4d2b61488fba1a38d74af54f","unresolved":false,"context_lines":[{"line_number":1022,"context_line":"            qry \u003d qry.filter_by(id\u003dmonitor[\u0027health_monitor\u0027][\u0027id\u0027])"},{"line_number":1023,"context_line":"            self.assertIsNone(qry.first())"},{"line_number":1024,"context_line":""},{"line_number":1025,"context_line":"    def test_delete_healthmonitor_has_associations(self):"},{"line_number":1026,"context_line":"        with self.health_monitor(type\u003d\u0027HTTP\u0027) as monitor:"},{"line_number":1027,"context_line":"            with self.pool() as pool:"},{"line_number":1028,"context_line":"                data \u003d {"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FxW0%3D","line":1025,"updated":"2014-01-01 19:48:43.000000000","message":"I think it should be made clear taht this is a negative test\n\ntest_delete_healthmonitor_with_associations_raises\n\nor\n\ntest_delete_healthmonitor_with_associations_returns_409","commit_id":"9cf9348215eb7b9412c33ed34a1dd719140ec9b1"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"bf9b0c0b8579583e0e5198cc952fd7033240114f","unresolved":false,"context_lines":[{"line_number":1022,"context_line":"            qry \u003d qry.filter_by(id\u003dmonitor[\u0027health_monitor\u0027][\u0027id\u0027])"},{"line_number":1023,"context_line":"            self.assertIsNone(qry.first())"},{"line_number":1024,"context_line":""},{"line_number":1025,"context_line":"    def test_delete_healthmonitor_has_associations(self):"},{"line_number":1026,"context_line":"        with self.health_monitor(type\u003d\u0027HTTP\u0027) as monitor:"},{"line_number":1027,"context_line":"            with self.pool() as pool:"},{"line_number":1028,"context_line":"                data \u003d {"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2F3so%3D","line":1025,"in_reply_to":"AAAAT3%2F%2FxW0%3D","updated":"2014-01-07 12:33:33.000000000","message":"Done","commit_id":"9cf9348215eb7b9412c33ed34a1dd719140ec9b1"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"bc6161f935ba219d4d2b61488fba1a38d74af54f","unresolved":false,"context_lines":[{"line_number":1060,"context_line":"                # check if all corresponding Pool associations are not deleted"},{"line_number":1061,"context_line":"                qry \u003d ctx.session.query(ldb.PoolMonitorAssociation)"},{"line_number":1062,"context_line":"                qry \u003d qry.filter_by(monitor_id\u003dmonitor[\u0027health_monitor\u0027][\u0027id\u0027])"},{"line_number":1063,"context_line":"                self.assertTrue(qry.all())"},{"line_number":1064,"context_line":""},{"line_number":1065,"context_line":"    def test_show_healthmonitor(self):"},{"line_number":1066,"context_line":"        with self.health_monitor() as monitor:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FxW4%3D","line":1063,"updated":"2014-01-01 19:48:43.000000000","message":"the assertions at lines 1059 and 1063 are probably a bit unnecessary, but that\u0027s ok.","commit_id":"9cf9348215eb7b9412c33ed34a1dd719140ec9b1"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"bc6161f935ba219d4d2b61488fba1a38d74af54f","unresolved":false,"context_lines":[{"line_number":1375,"context_line":"                    subresource\u003d\"health_monitors\","},{"line_number":1376,"context_line":"                    sub_id\u003dhealth_monitor[\u0027health_monitor\u0027][\u0027id\u0027])"},{"line_number":1377,"context_line":"                res \u003d req.get_response(self.ext_api)"},{"line_number":1378,"context_line":"                self.assertEqual(res.status_int, webob.exc.HTTPNoContent.code)"},{"line_number":1379,"context_line":"                self._delete(\u0027health_monitors\u0027,"},{"line_number":1380,"context_line":"                             health_monitor[\u0027health_monitor\u0027][\u0027id\u0027])"},{"line_number":1381,"context_line":"                self._delete(\u0027members\u0027, member1[\u0027member\u0027][\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FxWw%3D","line":1378,"updated":"2014-01-01 19:48:43.000000000","message":"successful deletion of a health monitor should beits own unit test rather than a part of another unit test","commit_id":"9cf9348215eb7b9412c33ed34a1dd719140ec9b1"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"bf9b0c0b8579583e0e5198cc952fd7033240114f","unresolved":false,"context_lines":[{"line_number":1375,"context_line":"                    subresource\u003d\"health_monitors\","},{"line_number":1376,"context_line":"                    sub_id\u003dhealth_monitor[\u0027health_monitor\u0027][\u0027id\u0027])"},{"line_number":1377,"context_line":"                res \u003d req.get_response(self.ext_api)"},{"line_number":1378,"context_line":"                self.assertEqual(res.status_int, webob.exc.HTTPNoContent.code)"},{"line_number":1379,"context_line":"                self._delete(\u0027health_monitors\u0027,"},{"line_number":1380,"context_line":"                             health_monitor[\u0027health_monitor\u0027][\u0027id\u0027])"},{"line_number":1381,"context_line":"                self._delete(\u0027members\u0027, member1[\u0027member\u0027][\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2F3sk%3D","line":1378,"in_reply_to":"AAAAT3%2F%2FxWw%3D","updated":"2014-01-07 12:33:33.000000000","message":"Done","commit_id":"9cf9348215eb7b9412c33ed34a1dd719140ec9b1"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"97fa41e2581785fa80c3c6d070683655cdd98f1e","unresolved":false,"context_lines":[{"line_number":1384,"context_line":"        with contextlib.nested("},{"line_number":1385,"context_line":"            self.health_monitor(),"},{"line_number":1386,"context_line":"            self.health_monitor(),"},{"line_number":1387,"context_line":"            self.pool(name\u003d\"pool\")"},{"line_number":1388,"context_line":"        ) as (health_mon1, health_mon2, pool):"},{"line_number":1389,"context_line":"                res \u003d self.plugin.create_pool_health_monitor("},{"line_number":1390,"context_line":"                    context.get_admin_context(),"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FMq0%3D","line":1387,"updated":"2014-01-16 14:34:42.000000000","message":"Why was the above necessary? Just curious... is there some out-of-order behavior that is occurring if the pool() method is called before health_monitor()?","commit_id":"b4c8931d7eb3c878a5de8f190209f4949b1c3159"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a672ae75e8ae0b551ba1ede63942920d5fd7c7fd","unresolved":false,"context_lines":[{"line_number":1384,"context_line":"        with contextlib.nested("},{"line_number":1385,"context_line":"            self.health_monitor(),"},{"line_number":1386,"context_line":"            self.health_monitor(),"},{"line_number":1387,"context_line":"            self.pool(name\u003d\"pool\")"},{"line_number":1388,"context_line":"        ) as (health_mon1, health_mon2, pool):"},{"line_number":1389,"context_line":"                res \u003d self.plugin.create_pool_health_monitor("},{"line_number":1390,"context_line":"                    context.get_admin_context(),"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FMXY%3D","line":1387,"in_reply_to":"AAAAUH%2F%2FMpo%3D","updated":"2014-01-16 15:37:38.000000000","message":"Got it. Makes sense :)","commit_id":"b4c8931d7eb3c878a5de8f190209f4949b1c3159"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"6aaa0b7cb7d63118c5458828108488922c00adf4","unresolved":false,"context_lines":[{"line_number":1384,"context_line":"        with contextlib.nested("},{"line_number":1385,"context_line":"            self.health_monitor(),"},{"line_number":1386,"context_line":"            self.health_monitor(),"},{"line_number":1387,"context_line":"            self.pool(name\u003d\"pool\")"},{"line_number":1388,"context_line":"        ) as (health_mon1, health_mon2, pool):"},{"line_number":1389,"context_line":"                res \u003d self.plugin.create_pool_health_monitor("},{"line_number":1390,"context_line":"                    context.get_admin_context(),"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FMpo%3D","line":1387,"in_reply_to":"AAAAUH%2F%2FMq0%3D","updated":"2014-01-16 14:41:13.000000000","message":"Yeah, actually it is the deletion order that matters: we need to delete pool first so that an association with the healthmonior is deleted automatically. Otherwise we\u0027d have an error deleting a monitor which still has an associations with pool.","commit_id":"b4c8931d7eb3c878a5de8f190209f4949b1c3159"}],"neutron/tests/unit/services/loadbalancer/drivers/haproxy/test_plugin_driver.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"ab9435c96f17680fe7512a70c5706e78bacf516c","unresolved":false,"context_lines":[{"line_number":535,"context_line":"                                                                pool_id)"},{"line_number":536,"context_line":"                self.mock_api.modify_pool.assert_called_once_with("},{"line_number":537,"context_line":"                    mock.ANY, pool_id, \u0027host\u0027)"},{"line_number":538,"context_line":"                self.plugin_instance.delete_pool_health_monitor("},{"line_number":539,"context_line":"                    ctx, hm[\u0027health_monitor\u0027][\u0027id\u0027], pool_id)"},{"line_number":540,"context_line":""},{"line_number":541,"context_line":"    def test_delete_pool_health_monitor(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2F51Q%3D","line":538,"updated":"2013-10-25 13:22:54.000000000","message":"Ditto on cleanup.","commit_id":"f5485df28f6112f967adf37869ef237a8df4565e"}]}
