)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"d6a15c7fae8d4c753df1ec7b2ab37c12a5350550","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Leon Cui \u003clcui@vmware.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2012-11-26 11:57:56 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"The change implemented Lbaas CRUD Sqlalchemy operations."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"- Added loadbalancer plugin which only perform the Sqlalchemy"},{"line_number":10,"context_line":"  operations."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAMH%2F%2Fw7A%3D","line":7,"updated":"2012-11-26 20:13:21.000000000","message":"This message is not formatted correctly.  It needs the associated blueprint as well.","commit_id":"878f443f88c53fe8eb8c27d69e061320edc31c22"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"962d4933f3de33e883892be2f8999b318ef104d1","unresolved":false,"context_lines":[{"line_number":12,"context_line":"- Rebased with the latest changes committed by Oleg and Eugene"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I1bccec8c29e3e9486506a5b52ce69af0480b2300"},{"line_number":15,"context_line":"Implemets: bp/lbaas-plugin-api-crud"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAMH%2F%2FwDk%3D","line":15,"updated":"2012-11-27 12:34:46.000000000","message":"typo","commit_id":"c3ac466761033d088917e462a989336cd5e235fb"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":9,"context_line":"- Added loadbalancer plugin which only perform the Sqlalchemy"},{"line_number":10,"context_line":"  operations."},{"line_number":11,"context_line":"- Added unit test against the loadbalancer plugin."},{"line_number":12,"context_line":"- Rebased with the latest changes committed by Oleg and Eugene"},{"line_number":13,"context_line":"- According to the discussion with Eugene before, changed the object"},{"line_number":14,"context_line":"inheritance model by seperating loadBalancerPluginDB class as a"},{"line_number":15,"context_line":"instance of loadBalancerPlugin class."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAAMX%2F%2F%2BGQ%3D","line":12,"updated":"2012-12-04 15:18:33.000000000","message":"I do not think that this line is necessary\n\nIn general you do not need to update this in the commit messages","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":23,"context_line":"eventually inherit from PlugInterface class to allow subClass check."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Change-Id: I1bccec8c29e3e9486506a5b52ce69af0480b2300"},{"line_number":26,"context_line":"Implemets: bp/lbaas-plugin-api-crud"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAAMX%2F%2F6bk%3D","line":26,"updated":"2012-12-07 18:21:45.000000000","message":"It seems the link to the blueprint is not being picket up.\nCan you try to change this line to:\nImplements blueprint lbaas-plugin-api-crud\nand move before the Change-Id?","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":23,"context_line":"eventually inherit from PlugInterface class to allow subClass check."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Change-Id: I1bccec8c29e3e9486506a5b52ce69af0480b2300"},{"line_number":26,"context_line":"Implemets: bp/lbaas-plugin-api-crud"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAAMX%2F%2F%2BGI%3D","line":26,"updated":"2012-12-04 15:18:33.000000000","message":"typo","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Leon Cui \u003clcui@vmware.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2012-12-13 01:16:10 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"The change implemented Lbaas CRUD Sqlalchemy operations."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"New updates:"},{"line_number":10,"context_line":" - Updated to align with latest loadbalancer API extension change"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"AAAAM3%2F%2F%2Fec%3D","line":7,"updated":"2012-12-17 15:53:18.000000000","message":"implements?","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":13,"context_line":" - Remove the inheritance from QuantumDbPlugin class in"},{"line_number":14,"context_line":" loadbalancer_db class"},{"line_number":15,"context_line":" - Fixed the issues emerging after rebase from the master. Unit"},{"line_number":16,"context_line":" test passed now."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Implemets: blueprint lbaas-plugin-api-crud"},{"line_number":19,"context_line":"Change-Id: I1bccec8c29e3e9486506a5b52ce69af0480b2300"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"AAAAM3%2F%2F%2FeY%3D","line":16,"updated":"2012-12-17 15:53:18.000000000","message":"I appreciate that you\u0027re stating what you\u0027ve changed in the last rev of the patch set.\nHowever, it might be better to use gerrit comments to this aim, as this message is what will end up in the official quantum repository once the patch is merged.","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":15,"context_line":" - Fixed the issues emerging after rebase from the master. Unit"},{"line_number":16,"context_line":" test passed now."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Implemets: blueprint lbaas-plugin-api-crud"},{"line_number":19,"context_line":"Change-Id: I1bccec8c29e3e9486506a5b52ce69af0480b2300"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"AAAAM3%2F%2F%2FeU%3D","line":18,"updated":"2012-12-17 15:53:18.000000000","message":"Implemets \u003d\u003d\u003e implements (not required anyway)","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Leon Cui \u003clcui@vmware.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-01-03 23:23:20 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"The change implemented Lbaas CRUD Sqlalchemy operations."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"New updates:"},{"line_number":10,"context_line":"   - Rebased to the committed LBaaS API Extension change"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"AAAAM3%2F%2Fywk%3D","line":7,"updated":"2013-01-04 21:17:12.000000000","message":"Implement Lbaas CRUD Sqlalchemy operations.","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":12,"context_line":"   more orm.relationship between related objects. Quite a lot of"},{"line_number":13,"context_line":"   changes in db/lb/loadbalancer_db.py file"},{"line_number":14,"context_line":"   - Modified unit test according and passed"},{"line_number":15,"context_line":"   - Incorporated Oleg and Ilya\u0027s comments."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Implemets: blueprint lbaas-plugin-api-crud"},{"line_number":18,"context_line":"Change-Id: I1bccec8c29e3e9486506a5b52ce69af0480b2300"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"AAAAM3%2F%2Fyv0%3D","line":15,"updated":"2013-01-04 21:17:12.000000000","message":"commit messages should just describe the code changes themselves, not make reference to reviewer\u0027s comments.  If you need to say that you\u0027ve addressed a certain person\u0027s concern in change-set X, either do that by marking their comment as \"Done\", or you can write a review on the new revision commenting on who\u0027s comments it addressed.  \n\nCommit messages should be targeted at a reader who was familiar with past review comments on the patch.","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2013-01-07 04:03:23 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"The change implemented Lbaas CRUD Sqlalchemy operations."},{"line_number":8,"context_line":" - This change only contains the database access implementation"},{"line_number":9,"context_line":" of LBaaS API. There is no real configuration down to device"},{"line_number":10,"context_line":" side."},{"line_number":11,"context_line":" - This change implements a loadbalancer plugin which doesn\u0027t"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"AAAAM3%2F%2FwBU%3D","line":8,"updated":"2013-01-07 18:36:07.000000000","message":"for some reason gerrit does not display the title line correctly.\nI know I might be boring, but can you add a whiteline between line 8 and 9?","commit_id":"2ca74534c08e392bf855bafdd4f6524284cfc7e9"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2013-01-07 04:03:23 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"The change implemented Lbaas CRUD Sqlalchemy operations."},{"line_number":8,"context_line":" - This change only contains the database access implementation"},{"line_number":9,"context_line":" of LBaaS API. There is no real configuration down to device"},{"line_number":10,"context_line":" side."},{"line_number":11,"context_line":" - This change implements a loadbalancer plugin which doesn\u0027t"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"AAAAM3%2F%2Fvf0%3D","line":8,"in_reply_to":"AAAAM3%2F%2Fv%2F0%3D","updated":"2013-01-08 02:03:56.000000000","message":"OK.","commit_id":"2ca74534c08e392bf855bafdd4f6524284cfc7e9"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2013-01-07 04:03:23 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"The change implemented Lbaas CRUD Sqlalchemy operations."},{"line_number":8,"context_line":" - This change only contains the database access implementation"},{"line_number":9,"context_line":" of LBaaS API. There is no real configuration down to device"},{"line_number":10,"context_line":" side."},{"line_number":11,"context_line":" - This change implements a loadbalancer plugin which doesn\u0027t"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"AAAAM3%2F%2Fvf4%3D","line":8,"in_reply_to":"AAAAM3%2F%2FwBU%3D","updated":"2013-01-08 02:03:56.000000000","message":"No you are always welcome:)\n\nAdding a while line between 8 and 9 will solve this issue? Sounds strange to me. Anyway, I\u0027ll try and make it correct today.","commit_id":"2ca74534c08e392bf855bafdd4f6524284cfc7e9"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2013-01-07 04:03:23 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"The change implemented Lbaas CRUD Sqlalchemy operations."},{"line_number":8,"context_line":" - This change only contains the database access implementation"},{"line_number":9,"context_line":" of LBaaS API. There is no real configuration down to device"},{"line_number":10,"context_line":" side."},{"line_number":11,"context_line":" - This change implements a loadbalancer plugin which doesn\u0027t"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"AAAAM3%2F%2Fv%2F0%3D","line":8,"in_reply_to":"AAAAM3%2F%2FwBU%3D","updated":"2013-01-07 19:00:12.000000000","message":"yes, needs a blank line","commit_id":"2ca74534c08e392bf855bafdd4f6524284cfc7e9"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":14,"context_line":" - This change follows the new LBaaS API 1.0 model. Please see"},{"line_number":15,"context_line":" the spec on wiki."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Implemets: blueprint lbaas-plugin-api-crud"},{"line_number":18,"context_line":"Change-Id: I1bccec8c29e3e9486506a5b52ce69af0480b2300"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"AAAAM3%2F%2FwBM%3D","line":17,"updated":"2013-01-07 18:36:07.000000000","message":"forgive my pedantry, but there\u0027s a typo here: \u0027implemets\u0027 \u003d\u003d\u003e \u0027implements\u0027","commit_id":"2ca74534c08e392bf855bafdd4f6524284cfc7e9"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":14,"context_line":" - This change follows the new LBaaS API 1.0 model. Please see"},{"line_number":15,"context_line":" the spec on wiki."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Implemets: blueprint lbaas-plugin-api-crud"},{"line_number":18,"context_line":"Change-Id: I1bccec8c29e3e9486506a5b52ce69af0480b2300"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"AAAAM3%2F%2Fvfs%3D","line":17,"in_reply_to":"AAAAM3%2F%2FwBM%3D","updated":"2013-01-08 02:03:56.000000000","message":"Nice. Will fix it.\n\nAs a non-English speaker, I\u0027m really insensitive to the typo:-(","commit_id":"2ca74534c08e392bf855bafdd4f6524284cfc7e9"}],"quantum/api/extensions.py":[{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"962d4933f3de33e883892be2f8999b318ef104d1","unresolved":false,"context_lines":[{"line_number":275,"context_line":"                               (resource.parent[\"collection_name\"],"},{"line_number":276,"context_line":"                                resource.parent[\"member_name\"]))"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"            plugin_type \u003d constants.CORE"},{"line_number":279,"context_line":"            plugin_prefix \u003d \"\""},{"line_number":280,"context_line":"            if hasattr(resource.controller, \"get_plugin_type\"):"},{"line_number":281,"context_line":"                plugin_type \u003d resource.controller.get_plugin_type()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMH%2F%2FwCA%3D","line":278,"updated":"2012-11-27 12:34:46.000000000","message":"this chunk is outdated.\nrebasing result on latest master should not contain changes in this file","commit_id":"c3ac466761033d088917e462a989336cd5e235fb"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":275,"context_line":"                               (resource.parent[\"collection_name\"],"},{"line_number":276,"context_line":"                                resource.parent[\"member_name\"]))"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"            plugin_type \u003d constants.CORE"},{"line_number":279,"context_line":"            plugin_prefix \u003d \"\""},{"line_number":280,"context_line":"            if hasattr(resource.controller, \"get_plugin_type\"):"},{"line_number":281,"context_line":"                plugin_type \u003d resource.controller.get_plugin_type()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMH%2F%2FvLw%3D","line":278,"in_reply_to":"AAAAMH%2F%2FwCA%3D","updated":"2012-11-27 23:25:51.000000000","message":"It\u0027s weird. I believe I have done rebase to the master.  \n\nMaybe my local master is out of date?","commit_id":"c3ac466761033d088917e462a989336cd5e235fb"}],"quantum/api/v2/attributes.py":[{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":248,"context_line":"        return msg"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"def _validate_uuid_list(data, valid_values\u003dNone):"},{"line_number":252,"context_line":"    msg \u003d None"},{"line_number":253,"context_line":"    if not isinstance(data, list):"},{"line_number":254,"context_line":"        msg \u003d _(\"%s is not a list\") % data"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMH%2F%2Fu8c%3D","line":251,"updated":"2012-11-28 03:03:53.000000000","message":"Although I prefer this version, maybe this should be fixed for the coding style to be consistent with other functions.\n\n def _validate_uuid_list(data, valid_values\u003dNone):\n     if not isinstance(data, list):\n         msg \u003d _(\"\u0027%s\u0027 is not a list\") % data\n         LOG.debug(\"validate_uuid_list: %s\", msg)\n         return msg\n\n     for item in data:\n         msg \u003d _validate_uuid(item)\n         if msg:\n             LOG.debug(\"validate_uuid_list: %s\", msg)\n             return msg\n \n     if len(set(data)) !\u003d len(data):\n         msg \u003d _(\"Duplicate items in the list: %s\") % \u0027,\u0027.join(data)\n             LOG.debug(\"validate_uuid_list: %s\", msg)\n             return msg","commit_id":"c3ac466761033d088917e462a989336cd5e235fb"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":233,"context_line":"        return msg"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"def _validate_uuid_list(data, valid_values\u003dNone):"},{"line_number":237,"context_line":"    msg \u003d None"},{"line_number":238,"context_line":"    if not isinstance(data, list):"},{"line_number":239,"context_line":"        msg \u003d _(\"%s is not a list\") % data"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2FsSQ%3D","line":236,"updated":"2012-11-30 02:00:49.000000000","message":"Maybe it would be better if this patch had dependency to https://review.openstack.org/#/c/15954. That way reviewers wouldn\u0027t have to go through this part.","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":233,"context_line":"        return msg"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"def _validate_uuid_list(data, valid_values\u003dNone):"},{"line_number":237,"context_line":"    msg \u003d None"},{"line_number":238,"context_line":"    if not isinstance(data, list):"},{"line_number":239,"context_line":"        msg \u003d _(\"%s is not a list\") % data"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6bM%3D","line":236,"in_reply_to":"AAAAMH%2F%2Fru8%3D","updated":"2012-12-07 18:21:45.000000000","message":"You can also stack your change on top if. I think the two patches are going to be merged pretty much at the same time, but the API one should go first.","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":233,"context_line":"        return msg"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"def _validate_uuid_list(data, valid_values\u003dNone):"},{"line_number":237,"context_line":"    msg \u003d None"},{"line_number":238,"context_line":"    if not isinstance(data, list):"},{"line_number":239,"context_line":"        msg \u003d _(\"%s is not a list\") % data"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2Fru8%3D","line":236,"in_reply_to":"AAAAMH%2F%2FsSQ%3D","updated":"2012-11-30 17:04:36.000000000","message":"Right.I probably have to modify my code because of the dependency on that change. When that change is ready to go, I\u0027ll incorporate it.","commit_id":"9657567c9addd590844348152b9cf2e47e723593"}],"quantum/api/v2/base.py":[{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"962d4933f3de33e883892be2f8999b318ef104d1","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from quantum.openstack.common import cfg"},{"line_number":25,"context_line":"from quantum.openstack.common import log as logging"},{"line_number":26,"context_line":"from quantum.openstack.common.notifier import api as notifier_api"},{"line_number":27,"context_line":"from quantum.plugins.common import constants"},{"line_number":28,"context_line":"from quantum import policy"},{"line_number":29,"context_line":"from quantum import quota"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMH%2F%2FwBI%3D","line":27,"updated":"2012-11-27 12:34:46.000000000","message":"is not needed if code chunk below is removed","commit_id":"c3ac466761033d088917e462a989336cd5e235fb"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"962d4933f3de33e883892be2f8999b318ef104d1","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        self._publisher_id \u003d notifier_api.publisher_id(\u0027network\u0027)"},{"line_number":127,"context_line":"        self._member_actions \u003d member_actions"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def get_plugin_type(self):"},{"line_number":130,"context_line":"        if hasattr(self._plugin, \"get_plugin_type\"):"},{"line_number":131,"context_line":"            return self._plugin.get_plugin_type()"},{"line_number":132,"context_line":"        return constants.CORE"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMH%2F%2FwBM%3D","line":129,"updated":"2012-11-27 12:34:46.000000000","message":"Outdated chunk, please remove","commit_id":"c3ac466761033d088917e462a989336cd5e235fb"}],"quantum/common/constants.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":29,"context_line":"FLOATINGIP_KEY \u003d \u0027_floatingips\u0027"},{"line_number":30,"context_line":"INTERFACE_KEY \u003d \u0027_interfaces\u0027"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"# Service API operation status constants"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2Fz0Y%3D","line":32,"updated":"2013-01-06 22:32:19.000000000","message":"Is any constant supposed to be beyond this line?","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":29,"context_line":"FLOATINGIP_KEY \u003d \u0027_floatingips\u0027"},{"line_number":30,"context_line":"INTERFACE_KEY \u003d \u0027_interfaces\u0027"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"# Service API operation status constants"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2Fw0g%3D","line":32,"in_reply_to":"AAAAM3%2F%2Fz0Y%3D","updated":"2013-01-07 11:32:25.000000000","message":"Thanks for pointing it out. I have moved LB related constants to Plugin/common/constants.py. Will remove this line.","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"}],"quantum/db/lb/__init__.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2011 OpenStack LLC"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F194%3D","line":3,"updated":"2013-01-02 19:46:48.000000000","message":"2013","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2011 OpenStack LLC"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Fz%2B4%3D","line":3,"in_reply_to":"AAAAM3%2F%2F194%3D","updated":"2013-01-04 07:25:10.000000000","message":"fix it.","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"}],"quantum/db/lb/loadbalancer_db.py":[{"author":{"_account_id":6461,"name":"Kaiwei Fan","email":"fank@vmware.com","username":"kaiwei-fan"},"change_message_id":"d2952d2dbbc682185087b7a839471116d048f6d0","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    stats \u003d orm.relationship(PoolStatistics,"},{"line_number":97,"context_line":"                             uselist\u003dFalse,"},{"line_number":98,"context_line":"                             backref\u003d\"pools\")"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"class HealthMonitor(model_base.BASEV2, models_v2.HasId, models_v2.HasTenant):"},{"line_number":102,"context_line":"    \"\"\"Represents a v2 quantum loadbalancer healthmonitor.\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F09I%3D","line":99,"updated":"2012-12-13 19:53:44.000000000","message":"relationsihp to Member?","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":96,"context_line":"    stats \u003d orm.relationship(PoolStatistics,"},{"line_number":97,"context_line":"                             uselist\u003dFalse,"},{"line_number":98,"context_line":"                             backref\u003d\"pools\")"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"class HealthMonitor(model_base.BASEV2, models_v2.HasId, models_v2.HasTenant):"},{"line_number":102,"context_line":"    \"\"\"Represents a v2 quantum loadbalancer healthmonitor.\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F0mo%3D","line":99,"in_reply_to":"AAAAMX%2F%2F09I%3D","updated":"2012-12-14 00:23:52.000000000","message":"I\u0027m investigating if cascade relationship is ok for pool/member but hit some issues now. \nActually I\u0027m curious when should we add relationship to the objects. I can see that all my objects has kind of relationships, vip-\u003epool, pool-\u003emember, pool-\u003ehealth_monitor etc. Why can\u0027t we just treat them independently?","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":96,"context_line":"    stats \u003d orm.relationship(PoolStatistics,"},{"line_number":97,"context_line":"                             uselist\u003dFalse,"},{"line_number":98,"context_line":"                             backref\u003d\"pools\")"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"class HealthMonitor(model_base.BASEV2, models_v2.HasId, models_v2.HasTenant):"},{"line_number":102,"context_line":"    \"\"\"Represents a v2 quantum loadbalancer healthmonitor.\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F0ko%3D","line":99,"in_reply_to":"AAAAMX%2F%2F0lE%3D","updated":"2012-12-14 00:39:11.000000000","message":"Right. Make sense.","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":6461,"name":"Kaiwei Fan","email":"fank@vmware.com","username":"kaiwei-fan"},"change_message_id":"d2952d2dbbc682185087b7a839471116d048f6d0","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    stats \u003d orm.relationship(PoolStatistics,"},{"line_number":97,"context_line":"                             uselist\u003dFalse,"},{"line_number":98,"context_line":"                             backref\u003d\"pools\")"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"class HealthMonitor(model_base.BASEV2, models_v2.HasId, models_v2.HasTenant):"},{"line_number":102,"context_line":"    \"\"\"Represents a v2 quantum loadbalancer healthmonitor.\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F0lE%3D","line":99,"in_reply_to":"AAAAMX%2F%2F0mo%3D","updated":"2012-12-14 00:36:50.000000000","message":"If you don\u0027t set relationship, sometimes you need to flush the session before you can create another object that has dependency on another one. Like I encountered last time where I was not able to create a pool statistics immediately after a pool is created, within one transaction.","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":6461,"name":"Kaiwei Fan","email":"fank@vmware.com","username":"kaiwei-fan"},"change_message_id":"d2952d2dbbc682185087b7a839471116d048f6d0","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"class HealthMonitor(model_base.BASEV2, models_v2.HasId, models_v2.HasTenant):"},{"line_number":102,"context_line":"    \"\"\"Represents a v2 quantum loadbalancer healthmonitor.\"\"\""},{"line_number":103,"context_line":"    pool_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\"pools.id\"),"},{"line_number":104,"context_line":"                        nullable\u003dTrue)"},{"line_number":105,"context_line":"    type \u003d sa.Column(sa.String(32), nullable\u003dFalse)"},{"line_number":106,"context_line":"    delay \u003d sa.Column(sa.Integer, nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F04w%3D","line":103,"updated":"2012-12-13 19:53:44.000000000","message":"Is the model of many-to-many relationship between Pools and HealthMonitors changed? If a monitor is associated with a pool, it cannot be used by other pools.","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"class HealthMonitor(model_base.BASEV2, models_v2.HasId, models_v2.HasTenant):"},{"line_number":102,"context_line":"    \"\"\"Represents a v2 quantum loadbalancer healthmonitor.\"\"\""},{"line_number":103,"context_line":"    pool_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\"pools.id\"),"},{"line_number":104,"context_line":"                        nullable\u003dTrue)"},{"line_number":105,"context_line":"    type \u003d sa.Column(sa.String(32), nullable\u003dFalse)"},{"line_number":106,"context_line":"    delay \u003d sa.Column(sa.Integer, nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F0mE%3D","line":103,"in_reply_to":"AAAAMX%2F%2F04w%3D","updated":"2012-12-14 00:23:52.000000000","message":"It\u0027s many-to-many.  A health_monitor can be associated to multiple pool as per my understanding. A health_monitor defines how to check the health status (like a template) and have no special data related to a pool.","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"class HealthMonitor(model_base.BASEV2, models_v2.HasId, models_v2.HasTenant):"},{"line_number":102,"context_line":"    \"\"\"Represents a v2 quantum loadbalancer healthmonitor.\"\"\""},{"line_number":103,"context_line":"    pool_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\"pools.id\"),"},{"line_number":104,"context_line":"                        nullable\u003dTrue)"},{"line_number":105,"context_line":"    type \u003d sa.Column(sa.String(32), nullable\u003dFalse)"},{"line_number":106,"context_line":"    delay \u003d sa.Column(sa.Integer, nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F0kk%3D","line":103,"in_reply_to":"AAAAMX%2F%2F0lc%3D","updated":"2012-12-14 00:39:11.000000000","message":"Good point. I need to remove it.","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":6461,"name":"Kaiwei Fan","email":"fank@vmware.com","username":"kaiwei-fan"},"change_message_id":"d2952d2dbbc682185087b7a839471116d048f6d0","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"class HealthMonitor(model_base.BASEV2, models_v2.HasId, models_v2.HasTenant):"},{"line_number":102,"context_line":"    \"\"\"Represents a v2 quantum loadbalancer healthmonitor.\"\"\""},{"line_number":103,"context_line":"    pool_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\"pools.id\"),"},{"line_number":104,"context_line":"                        nullable\u003dTrue)"},{"line_number":105,"context_line":"    type \u003d sa.Column(sa.String(32), nullable\u003dFalse)"},{"line_number":106,"context_line":"    delay \u003d sa.Column(sa.Integer, nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F0lc%3D","line":103,"in_reply_to":"AAAAMX%2F%2F0mE%3D","updated":"2012-12-14 00:36:50.000000000","message":"If it\u0027s many-to-many relationship, pool_id shouldn\u0027t be a field in health_monitor, right? Otherwise how this health_monitor be used by two or more pools?","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":143,"context_line":"                    query \u003d query.filter(column.in_(value))"},{"line_number":144,"context_line":"        return query"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def _get_collection_query(self, context, model, filters\u003dNone):"},{"line_number":147,"context_line":"        collection \u003d self._model_query(context, model)"},{"line_number":148,"context_line":"        collection \u003d self._apply_filters_to_query(collection, model, filters)"},{"line_number":149,"context_line":"        return collection"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F%2FdY%3D","line":146,"updated":"2012-12-17 15:53:18.000000000","message":"This method is not covered by unit test. This seems strange.","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":143,"context_line":"                    query \u003d query.filter(column.in_(value))"},{"line_number":144,"context_line":"        return query"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def _get_collection_query(self, context, model, filters\u003dNone):"},{"line_number":147,"context_line":"        collection \u003d self._model_query(context, model)"},{"line_number":148,"context_line":"        collection \u003d self._apply_filters_to_query(collection, model, filters)"},{"line_number":149,"context_line":"        return collection"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F%2BY0%3D","line":146,"in_reply_to":"AAAAM3%2F%2F%2FdY%3D","updated":"2012-12-18 09:56:43.000000000","message":"I simply copy a bunch of methods from QuantumDbPluginV2 class. Original my class inherits from it to leverage those methods but as one of your comments is discourage it.","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":153,"context_line":"        query \u003d self._get_collection_query(context, model, filters)"},{"line_number":154,"context_line":"        return [dict_func(c, fields) for c in query.all()]"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def _get_collection_count(self, context, model, filters\u003dNone):"},{"line_number":157,"context_line":"        return self._get_collection_query(context, model, filters).count()"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def _model_query(self, context, model):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F%2FdM%3D","line":156,"updated":"2012-12-17 15:53:18.000000000","message":"Some of these methods are actually kind of duplicated from db_base_plugin_v2.QuantumDbPluginV2.\n\nI agree we do not want to derive from that class, but there is probably a good reason for extrapolating base db support methods such as _get_collection from that class.\n\nYou don\u0027t have to do this in this patch, but please just add a #TODO in the code","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":153,"context_line":"        query \u003d self._get_collection_query(context, model, filters)"},{"line_number":154,"context_line":"        return [dict_func(c, fields) for c in query.all()]"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def _get_collection_count(self, context, model, filters\u003dNone):"},{"line_number":157,"context_line":"        return self._get_collection_query(context, model, filters).count()"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def _model_query(self, context, model):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F%2BUw%3D","line":156,"in_reply_to":"AAAAM3%2F%2F%2FdM%3D","updated":"2012-12-18 09:56:43.000000000","message":"Yes. It\u0027s better to take out those support methods so that both classes can use it. I\u0027ll add a TODO.","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":174,"context_line":"        query \u003d self._model_query(context, model)"},{"line_number":175,"context_line":"        return query.filter(model.id \u003d\u003d id).one()"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    def update_status(self, context, model, id, status):"},{"line_number":178,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":179,"context_line":"            v_db \u003d self._get_resource(context, model, id)"},{"line_number":180,"context_line":"            v_db.update({\u0027status\u0027: status})"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F%2Fdg%3D","line":177,"updated":"2012-12-17 15:53:18.000000000","message":"This method is not covered by unit tests","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":174,"context_line":"        query \u003d self._model_query(context, model)"},{"line_number":175,"context_line":"        return query.filter(model.id \u003d\u003d id).one()"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    def update_status(self, context, model, id, status):"},{"line_number":178,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":179,"context_line":"            v_db \u003d self._get_resource(context, model, id)"},{"line_number":180,"context_line":"            v_db.update({\u0027status\u0027: status})"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F%2BUs%3D","line":177,"in_reply_to":"AAAAM3%2F%2F%2Fdg%3D","updated":"2012-12-18 09:56:43.000000000","message":"Will add it.","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":182,"context_line":"    def _get_resource(self, context, model, id):"},{"line_number":183,"context_line":"        try:"},{"line_number":184,"context_line":"            r \u003d self._get_by_id(context, model, id)"},{"line_number":185,"context_line":"        except exc.NoResultFound:"},{"line_number":186,"context_line":"            if model \u003d\u003d \"Vip\":"},{"line_number":187,"context_line":"                raise loadbalancer.VipNotFound(vip_id\u003did)"},{"line_number":188,"context_line":"            elif model \u003d\u003d \"Pool\":"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F%2Fdk%3D","line":185,"updated":"2012-12-17 15:53:18.000000000","message":"Your unit tests are not covering lines 185-195.\nMaybe you can add a negative unit test to validate the appropriate exception is raised","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":182,"context_line":"    def _get_resource(self, context, model, id):"},{"line_number":183,"context_line":"        try:"},{"line_number":184,"context_line":"            r \u003d self._get_by_id(context, model, id)"},{"line_number":185,"context_line":"        except exc.NoResultFound:"},{"line_number":186,"context_line":"            if model \u003d\u003d \"Vip\":"},{"line_number":187,"context_line":"                raise loadbalancer.VipNotFound(vip_id\u003did)"},{"line_number":188,"context_line":"            elif model \u003d\u003d \"Pool\":"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F%2BUo%3D","line":185,"in_reply_to":"AAAAM3%2F%2F%2Fdk%3D","updated":"2012-12-18 09:56:43.000000000","message":"Will do it.","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":221,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":222,"context_line":"            pool_db.update({\u0027vip_id\u0027: vip_id})"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    def _update_vip_session_pesistence_info(self, context, vip_id, info):"},{"line_number":225,"context_line":"        vip \u003d self._get_resource(context, Vip, vip_id)"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2Fz8Q%3D","line":224,"updated":"2012-12-14 15:57:48.000000000","message":"typo in word \u0027persistence\u0027 (\u0027r\u0027 is missing)","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":221,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":222,"context_line":"            pool_db.update({\u0027vip_id\u0027: vip_id})"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    def _update_vip_session_pesistence_info(self, context, vip_id, info):"},{"line_number":225,"context_line":"        vip \u003d self._get_resource(context, Vip, vip_id)"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F%2BUk%3D","line":224,"in_reply_to":"AAAAMX%2F%2Fz8Q%3D","updated":"2012-12-18 09:56:43.000000000","message":"will fix it.","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":235,"context_line":"                                       vip_id\u003dvip_id)"},{"line_number":236,"context_line":"                context.session.add(sesspersist_db)"},{"line_number":237,"context_line":"            # Update vip table"},{"line_number":238,"context_line":"            vip.session_persistence \u003d sesspersist_db"},{"line_number":239,"context_line":"            context.session.add(vip)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def _delete_sessionpersistence(self, context, id):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2Fz7k%3D","line":238,"updated":"2012-12-14 15:57:48.000000000","message":"Possible issue - if \u0027info\u0027 is None then \u0027sesspersist_db\u0027 is not set. However this will never happen since the function is always called with non-empty \u0027info\u0027 variable, may we make it a requirement and remove \u0027if info:\u0027 verification (and thus avoid case when \u0027sesspersist_db\u0027 is not set)?","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":235,"context_line":"                                       vip_id\u003dvip_id)"},{"line_number":236,"context_line":"                context.session.add(sesspersist_db)"},{"line_number":237,"context_line":"            # Update vip table"},{"line_number":238,"context_line":"            vip.session_persistence \u003d sesspersist_db"},{"line_number":239,"context_line":"            context.session.add(vip)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def _delete_sessionpersistence(self, context, id):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F%2BUg%3D","line":238,"in_reply_to":"AAAAMX%2F%2Fz7k%3D","updated":"2012-12-18 09:56:43.000000000","message":"will fix it.","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":259,"context_line":"                         name\u003dv[\u0027name\u0027],"},{"line_number":260,"context_line":"                         description\u003dv[\u0027description\u0027],"},{"line_number":261,"context_line":"                         subnet_id\u003dv[\u0027subnet_id\u0027],"},{"line_number":262,"context_line":"                         address\u003dv[\u0027address\u0027],"},{"line_number":263,"context_line":"                         port\u003dv[\u0027port\u0027],"},{"line_number":264,"context_line":"                         protocol\u003dv[\u0027protocol\u0027],"},{"line_number":265,"context_line":"                         pool_id\u003dv[\u0027pool_id\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2Fz%2Fg%3D","line":262,"updated":"2012-12-14 15:28:44.000000000","message":"\"address\" field is ATTR_NOT_SPECIFIED (which is actually object()) by default - so you probably should to convert it to string before adding to db.","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":259,"context_line":"                         name\u003dv[\u0027name\u0027],"},{"line_number":260,"context_line":"                         description\u003dv[\u0027description\u0027],"},{"line_number":261,"context_line":"                         subnet_id\u003dv[\u0027subnet_id\u0027],"},{"line_number":262,"context_line":"                         address\u003dv[\u0027address\u0027],"},{"line_number":263,"context_line":"                         port\u003dv[\u0027port\u0027],"},{"line_number":264,"context_line":"                         protocol\u003dv[\u0027protocol\u0027],"},{"line_number":265,"context_line":"                         pool_id\u003dv[\u0027pool_id\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F%2BSI%3D","line":262,"in_reply_to":"AAAAM3%2F%2F%2BUU%3D","updated":"2012-12-18 10:51:52.000000000","message":"Probably you should do an explicit check here (if address \u003d\u003d attributes.ATTR_NOT_SPECIFIED:...). As this patch is related to CRUD db operations I think it\u0027s ok to set address to empty string at this point (just to avoid errors in testing) but later I believe there should be VIP address generation here.","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":259,"context_line":"                         name\u003dv[\u0027name\u0027],"},{"line_number":260,"context_line":"                         description\u003dv[\u0027description\u0027],"},{"line_number":261,"context_line":"                         subnet_id\u003dv[\u0027subnet_id\u0027],"},{"line_number":262,"context_line":"                         address\u003dv[\u0027address\u0027],"},{"line_number":263,"context_line":"                         port\u003dv[\u0027port\u0027],"},{"line_number":264,"context_line":"                         protocol\u003dv[\u0027protocol\u0027],"},{"line_number":265,"context_line":"                         pool_id\u003dv[\u0027pool_id\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F%2BUU%3D","line":262,"in_reply_to":"AAAAMX%2F%2Fz%2Fg%3D","updated":"2012-12-18 09:56:43.000000000","message":"Does it has a build-in function to convert to string?","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":368,"context_line":"                    member \u003d member_qry.filter_by(id\u003dmember_id).first()"},{"line_number":369,"context_line":"                    member.update({\u0027pool_id\u0027: pool_id})"},{"line_number":370,"context_line":"                except exc.NoResultFound:"},{"line_number":371,"context_line":"                    raise q_exc.MemberNotFound(member_id\u003dmember_id)"},{"line_number":372,"context_line":"                except exc.MultipleResultsFound:"},{"line_number":373,"context_line":"                    LOG.error(_(\u0027Multiple member match for %s\u0027) % member_id)"},{"line_number":374,"context_line":"                    raise q_exc.MemberNotFound(member_id\u003dmember_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F%2FdA%3D","line":371,"updated":"2012-12-17 15:53:18.000000000","message":"This class cannot be found in quantum.common.exceptions","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":368,"context_line":"                    member \u003d member_qry.filter_by(id\u003dmember_id).first()"},{"line_number":369,"context_line":"                    member.update({\u0027pool_id\u0027: pool_id})"},{"line_number":370,"context_line":"                except exc.NoResultFound:"},{"line_number":371,"context_line":"                    raise q_exc.MemberNotFound(member_id\u003dmember_id)"},{"line_number":372,"context_line":"                except exc.MultipleResultsFound:"},{"line_number":373,"context_line":"                    LOG.error(_(\u0027Multiple member match for %s\u0027) % member_id)"},{"line_number":374,"context_line":"                    raise q_exc.MemberNotFound(member_id\u003dmember_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F%2BUM%3D","line":371,"in_reply_to":"AAAAM3%2F%2F%2FdA%3D","updated":"2012-12-18 09:56:43.000000000","message":"Right. These exception are defined in extensions/loadbalancer.py.  I should use it.","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":395,"context_line":"            try:"},{"line_number":396,"context_line":"                stats \u003d stats_qry.filter_by(pool_id\u003dpool_id).first()"},{"line_number":397,"context_line":"            except exc.NoResultFound:"},{"line_number":398,"context_line":"                raise q_exc.PoolStatsNotFound(pool_id\u003dpool_id)"},{"line_number":399,"context_line":"            except exc.MultipleResultsFound:"},{"line_number":400,"context_line":"                LOG.error(_(\"Multiple pool stats found for %s\") % pool_id)"},{"line_number":401,"context_line":"                raise q_exc.PoolStatsNotFound(pool_id\u003dpool_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F%2Fc8%3D","line":398,"updated":"2012-12-17 15:53:18.000000000","message":"This class could not be found in quantum.common.exceptions","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":395,"context_line":"            try:"},{"line_number":396,"context_line":"                stats \u003d stats_qry.filter_by(pool_id\u003dpool_id).first()"},{"line_number":397,"context_line":"            except exc.NoResultFound:"},{"line_number":398,"context_line":"                raise q_exc.PoolStatsNotFound(pool_id\u003dpool_id)"},{"line_number":399,"context_line":"            except exc.MultipleResultsFound:"},{"line_number":400,"context_line":"                LOG.error(_(\"Multiple pool stats found for %s\") % pool_id)"},{"line_number":401,"context_line":"                raise q_exc.PoolStatsNotFound(pool_id\u003dpool_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F%2BUI%3D","line":398,"in_reply_to":"AAAAM3%2F%2F%2Fc8%3D","updated":"2012-12-18 09:56:43.000000000","message":"will fix it.","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":396,"context_line":"                stats \u003d stats_qry.filter_by(pool_id\u003dpool_id).first()"},{"line_number":397,"context_line":"            except exc.NoResultFound:"},{"line_number":398,"context_line":"                raise q_exc.PoolStatsNotFound(pool_id\u003dpool_id)"},{"line_number":399,"context_line":"            except exc.MultipleResultsFound:"},{"line_number":400,"context_line":"                LOG.error(_(\"Multiple pool stats found for %s\") % pool_id)"},{"line_number":401,"context_line":"                raise q_exc.PoolStatsNotFound(pool_id\u003dpool_id)"},{"line_number":402,"context_line":"            context.session.delete(stats)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F%2FdU%3D","line":399,"updated":"2012-12-17 15:53:18.000000000","message":"if pool_id is primary key on Poolstatistics MultipleResultsFound could hardly occur","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":396,"context_line":"                stats \u003d stats_qry.filter_by(pool_id\u003dpool_id).first()"},{"line_number":397,"context_line":"            except exc.NoResultFound:"},{"line_number":398,"context_line":"                raise q_exc.PoolStatsNotFound(pool_id\u003dpool_id)"},{"line_number":399,"context_line":"            except exc.MultipleResultsFound:"},{"line_number":400,"context_line":"                LOG.error(_(\"Multiple pool stats found for %s\") % pool_id)"},{"line_number":401,"context_line":"                raise q_exc.PoolStatsNotFound(pool_id\u003dpool_id)"},{"line_number":402,"context_line":"            context.session.delete(stats)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F%2BUE%3D","line":399,"in_reply_to":"AAAAM3%2F%2F%2FdU%3D","updated":"2012-12-18 09:56:43.000000000","message":"Will fix it.","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":6461,"name":"Kaiwei Fan","email":"fank@vmware.com","username":"kaiwei-fan"},"change_message_id":"d2952d2dbbc682185087b7a839471116d048f6d0","unresolved":false,"context_lines":[{"line_number":478,"context_line":"               \u0027total_connections\u0027: stats[\u0027total_connections\u0027]}"},{"line_number":479,"context_line":"        return {\u0027stats\u0027: res}"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"    def create_pool_health_monitor_db(self, context, health_monitor, pool_id):"},{"line_number":482,"context_line":"        monitor_id \u003d health_monitor[\u0027health_monitor\u0027][\u0027id\u0027]"},{"line_number":483,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":484,"context_line":"            monitor_qry \u003d context.session.query(HealthMonitor)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F04k%3D","line":481,"updated":"2012-12-13 19:53:44.000000000","message":"I tried to associated a monitor with a pool and this function indeed is  invoked, but it returns an empty list, and query pool again does not return any monitor either.","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":483,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":484,"context_line":"            monitor_qry \u003d context.session.query(HealthMonitor)"},{"line_number":485,"context_line":"            try:"},{"line_number":486,"context_line":"                monitor \u003d monitor_qry.filter_by(id\u003dmonitor_id).first()"},{"line_number":487,"context_line":"                monitor.update({\u0027pool_id\u0027: pool_id})"},{"line_number":488,"context_line":"            except exc.NoResultFound:"},{"line_number":489,"context_line":"                raise q_exc.HealthMonitorNotFound(monitor_id\u003dmonitor_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F%2BQo%3D","line":486,"updated":"2012-12-18 12:32:36.000000000","message":"Query.first() returns the first result of this ``Query`` or None if the result doesn\u0027t contain any row. If it returns None the next line will fail with \u0027NoneType\u0027 object has no attribute \u0027update\u0027. Exception exc.NoResultFound will never be raised. Note, there\u0027s function Query.one(), that expects only one record and raises exceptions otherwise.","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":486,"context_line":"                monitor \u003d monitor_qry.filter_by(id\u003dmonitor_id).first()"},{"line_number":487,"context_line":"                monitor.update({\u0027pool_id\u0027: pool_id})"},{"line_number":488,"context_line":"            except exc.NoResultFound:"},{"line_number":489,"context_line":"                raise q_exc.HealthMonitorNotFound(monitor_id\u003dmonitor_id)"},{"line_number":490,"context_line":"            except exc.MultipleResultsFound:"},{"line_number":491,"context_line":"                LOG.error(\u0027Multiple health_monitors match for %s\u0027"},{"line_number":492,"context_line":"                          % monitor_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F%2Fc4%3D","line":489,"updated":"2012-12-17 15:53:18.000000000","message":"This class could not be found in quantum.common.exceptions","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":486,"context_line":"                monitor \u003d monitor_qry.filter_by(id\u003dmonitor_id).first()"},{"line_number":487,"context_line":"                monitor.update({\u0027pool_id\u0027: pool_id})"},{"line_number":488,"context_line":"            except exc.NoResultFound:"},{"line_number":489,"context_line":"                raise q_exc.HealthMonitorNotFound(monitor_id\u003dmonitor_id)"},{"line_number":490,"context_line":"            except exc.MultipleResultsFound:"},{"line_number":491,"context_line":"                LOG.error(\u0027Multiple health_monitors match for %s\u0027"},{"line_number":492,"context_line":"                          % monitor_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F%2BUA%3D","line":489,"in_reply_to":"AAAAM3%2F%2F%2Fc4%3D","updated":"2012-12-18 09:56:43.000000000","message":"will fix it.","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":513,"context_line":"                raise q_exc.HealthMonitorNotFound(monitor_id\u003did)"},{"line_number":514,"context_line":"            except exc.MultipleResultsFound:"},{"line_number":515,"context_line":"                LOG.error(\u0027Multiple health_monitors match for %s\u0027"},{"line_number":516,"context_line":"                          % monitor_id)"},{"line_number":517,"context_line":"                raise q_exc.HealthMonitorNotFound(monitor_id\u003did)"},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"    def get_pool_health_monitor_db(self, context, id, pool_id, fields\u003dNone):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2Fz8I%3D","line":516,"updated":"2012-12-14 15:57:48.000000000","message":"monitor_id is not set","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":513,"context_line":"                raise q_exc.HealthMonitorNotFound(monitor_id\u003did)"},{"line_number":514,"context_line":"            except exc.MultipleResultsFound:"},{"line_number":515,"context_line":"                LOG.error(\u0027Multiple health_monitors match for %s\u0027"},{"line_number":516,"context_line":"                          % monitor_id)"},{"line_number":517,"context_line":"                raise q_exc.HealthMonitorNotFound(monitor_id\u003did)"},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"    def get_pool_health_monitor_db(self, context, id, pool_id, fields\u003dNone):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F%2BT8%3D","line":516,"in_reply_to":"AAAAM3%2F%2F%2Fc0%3D","updated":"2012-12-18 09:56:43.000000000","message":"Will fix it.","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":513,"context_line":"                raise q_exc.HealthMonitorNotFound(monitor_id\u003did)"},{"line_number":514,"context_line":"            except exc.MultipleResultsFound:"},{"line_number":515,"context_line":"                LOG.error(\u0027Multiple health_monitors match for %s\u0027"},{"line_number":516,"context_line":"                          % monitor_id)"},{"line_number":517,"context_line":"                raise q_exc.HealthMonitorNotFound(monitor_id\u003did)"},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"    def get_pool_health_monitor_db(self, context, id, pool_id, fields\u003dNone):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F%2Fc0%3D","line":516,"in_reply_to":"AAAAMX%2F%2Fz8I%3D","updated":"2012-12-17 15:53:18.000000000","message":"...and HealthMonitorNotFound is not defined either!","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":517,"context_line":"                raise q_exc.HealthMonitorNotFound(monitor_id\u003did)"},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"    def get_pool_health_monitor_db(self, context, id, pool_id, fields\u003dNone):"},{"line_number":520,"context_line":"        # TODO: this method should be discarded"},{"line_number":521,"context_line":"        monitors \u003d []"},{"line_number":522,"context_line":"        try:"},{"line_number":523,"context_line":"            monitor_qry \u003d context.session.query(HealthMonitor)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F%2FdQ%3D","line":520,"updated":"2012-12-17 15:53:18.000000000","message":"Indeed :) Why don\u0027t we remove it?","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":517,"context_line":"                raise q_exc.HealthMonitorNotFound(monitor_id\u003did)"},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"    def get_pool_health_monitor_db(self, context, id, pool_id, fields\u003dNone):"},{"line_number":520,"context_line":"        # TODO: this method should be discarded"},{"line_number":521,"context_line":"        monitors \u003d []"},{"line_number":522,"context_line":"        try:"},{"line_number":523,"context_line":"            monitor_qry \u003d context.session.query(HealthMonitor)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F%2BT4%3D","line":520,"in_reply_to":"AAAAM3%2F%2F%2FdQ%3D","updated":"2012-12-18 09:56:43.000000000","message":"Have talked with Oleg. We may still keep it but hide it from REST API view. User can use get_pool to get the health_monitor info.","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":"#"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import netaddr"},{"line_number":19,"context_line":"import sqlalchemy as sa"},{"line_number":20,"context_line":"from sqlalchemy import orm"},{"line_number":21,"context_line":"from sqlalchemy.orm import exc"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F6RM%3D","line":18,"updated":"2012-12-21 11:34:58.000000000","message":"unused import","commit_id":"b9cd0af2ae9d1372fc589ea5536c492093ef8e84"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":"#"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import netaddr"},{"line_number":19,"context_line":"import sqlalchemy as sa"},{"line_number":20,"context_line":"from sqlalchemy import orm"},{"line_number":21,"context_line":"from sqlalchemy.orm import exc"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F3DY%3D","line":18,"in_reply_to":"AAAAM3%2F%2F6RM%3D","updated":"2012-12-31 01:19:25.000000000","message":"will remove it.","commit_id":"b9cd0af2ae9d1372fc589ea5536c492093ef8e84"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":34,"context_line":"from quantum.openstack.common import uuidutils"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class SessionPersistence(model_base.BASEV2):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F6ZI%3D","line":37,"updated":"2012-12-21 13:41:31.000000000","message":"Seems it\u0027s not used","commit_id":"b9cd0af2ae9d1372fc589ea5536c492093ef8e84"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":34,"context_line":"from quantum.openstack.common import uuidutils"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class SessionPersistence(model_base.BASEV2):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F3DU%3D","line":37,"in_reply_to":"AAAAM3%2F%2F6ZI%3D","updated":"2012-12-31 01:19:25.000000000","message":"Would like to leave it for future use.","commit_id":"b9cd0af2ae9d1372fc589ea5536c492093ef8e84"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":206,"context_line":"        try:"},{"line_number":207,"context_line":"            r \u003d self._get_by_id(context, model, id)"},{"line_number":208,"context_line":"        except exc.NoResultFound:"},{"line_number":209,"context_line":"            if model \u003d\u003d \"Vip\":"},{"line_number":210,"context_line":"                raise loadbalancer.VipNotFound(vip_id\u003did)"},{"line_number":211,"context_line":"            elif model \u003d\u003d \"Pool\":"},{"line_number":212,"context_line":"                raise loadbalancer.PoolNotFound(pool_id\u003did)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F4sI%3D","line":209,"updated":"2012-12-26 12:24:43.000000000","message":"None of the following checks will succeed. For example method is called with class Vip, not with string \"Vip\"","commit_id":"b9cd0af2ae9d1372fc589ea5536c492093ef8e84"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":206,"context_line":"        try:"},{"line_number":207,"context_line":"            r \u003d self._get_by_id(context, model, id)"},{"line_number":208,"context_line":"        except exc.NoResultFound:"},{"line_number":209,"context_line":"            if model \u003d\u003d \"Vip\":"},{"line_number":210,"context_line":"                raise loadbalancer.VipNotFound(vip_id\u003did)"},{"line_number":211,"context_line":"            elif model \u003d\u003d \"Pool\":"},{"line_number":212,"context_line":"                raise loadbalancer.PoolNotFound(pool_id\u003did)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F3DM%3D","line":209,"in_reply_to":"AAAAM3%2F%2F4sI%3D","updated":"2012-12-31 01:19:25.000000000","message":"will use issubclass.","commit_id":"b9cd0af2ae9d1372fc589ea5536c492093ef8e84"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":275,"context_line":"                         name\u003dv[\u0027name\u0027],"},{"line_number":276,"context_line":"                         description\u003dv[\u0027description\u0027],"},{"line_number":277,"context_line":"                         subnet_id\u003dv[\u0027subnet_id\u0027],"},{"line_number":278,"context_line":"                         address\u003dv[\u0027address\u0027],"},{"line_number":279,"context_line":"                         port\u003dv[\u0027port\u0027],"},{"line_number":280,"context_line":"                         protocol\u003dv[\u0027protocol\u0027],"},{"line_number":281,"context_line":"                         pool_id\u003dv[\u0027pool_id\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F6UU%3D","line":278,"updated":"2012-12-21 13:41:31.000000000","message":"Did you manage to handle ATTR_NOT_SPECIFIED in the address field?","commit_id":"b9cd0af2ae9d1372fc589ea5536c492093ef8e84"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":275,"context_line":"                         name\u003dv[\u0027name\u0027],"},{"line_number":276,"context_line":"                         description\u003dv[\u0027description\u0027],"},{"line_number":277,"context_line":"                         subnet_id\u003dv[\u0027subnet_id\u0027],"},{"line_number":278,"context_line":"                         address\u003dv[\u0027address\u0027],"},{"line_number":279,"context_line":"                         port\u003dv[\u0027port\u0027],"},{"line_number":280,"context_line":"                         protocol\u003dv[\u0027protocol\u0027],"},{"line_number":281,"context_line":"                         pool_id\u003dv[\u0027pool_id\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F3DI%3D","line":278,"in_reply_to":"AAAAM3%2F%2F6UU%3D","updated":"2012-12-31 01:19:25.000000000","message":"Will set it to empty string if it\u0027s attr_not_specified.","commit_id":"b9cd0af2ae9d1372fc589ea5536c492093ef8e84"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":503,"context_line":"            assoc \u003d PoolMonitorAssociation(pool_id\u003dpool_id,"},{"line_number":504,"context_line":"                                           monitor_id\u003dmonitor_id)"},{"line_number":505,"context_line":"            assoc.monitor \u003d monitor"},{"line_number":506,"context_line":"            pool.monitors.append(assoc)"},{"line_number":507,"context_line":""},{"line_number":508,"context_line":"        monitors \u003d []"},{"line_number":509,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F6TY%3D","line":506,"updated":"2012-12-21 11:34:58.000000000","message":"This operation raises uncaught exception (IntegrityError) if user tries to associate the same pair of health monitor and pool for the second time. The exception should be caught and meaningful message returned.","commit_id":"b9cd0af2ae9d1372fc589ea5536c492093ef8e84"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":656,"context_line":"                try:"},{"line_number":657,"context_line":"                    pool \u003d pool_qry.filter_by(id\u003dassoc[\u0027pool_id\u0027]).one()"},{"line_number":658,"context_line":"                except exc.NoResultFound:"},{"line_number":659,"context_line":"                    raise loadbalancer.PoolNotFound(pool_id\u003dpool_id)"},{"line_number":660,"context_line":"                pool.monitors.remove(assoc)"},{"line_number":661,"context_line":"            monitor_db \u003d self._get_resource(context, HealthMonitor, id)"},{"line_number":662,"context_line":"            monitor_db[\u0027status\u0027] \u003d \"PENDING_DELETE\""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F6TU%3D","line":659,"updated":"2012-12-21 11:34:58.000000000","message":"Variable \u0027pool_id\u0027 is not set","commit_id":"b9cd0af2ae9d1372fc589ea5536c492093ef8e84"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":656,"context_line":"                try:"},{"line_number":657,"context_line":"                    pool \u003d pool_qry.filter_by(id\u003dassoc[\u0027pool_id\u0027]).one()"},{"line_number":658,"context_line":"                except exc.NoResultFound:"},{"line_number":659,"context_line":"                    raise loadbalancer.PoolNotFound(pool_id\u003dpool_id)"},{"line_number":660,"context_line":"                pool.monitors.remove(assoc)"},{"line_number":661,"context_line":"            monitor_db \u003d self._get_resource(context, HealthMonitor, id)"},{"line_number":662,"context_line":"            monitor_db[\u0027status\u0027] \u003d \"PENDING_DELETE\""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F3DE%3D","line":659,"in_reply_to":"AAAAM3%2F%2F6TU%3D","updated":"2012-12-31 01:19:25.000000000","message":"nice catch. Fix it.","commit_id":"b9cd0af2ae9d1372fc589ea5536c492093ef8e84"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def _fields(self, resource, fields):"},{"line_number":155,"context_line":"        if fields:"},{"line_number":156,"context_line":"            return dict(((key, item) for key, item in resource.iteritems()"},{"line_number":157,"context_line":"                         if key in fields))"},{"line_number":158,"context_line":"        return resource"},{"line_number":159,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F10E%3D","line":156,"updated":"2013-01-02 19:46:48.000000000","message":"Consider removing extra parens.\n\nreturn dict((k,v) for k,v in resource.iteritems() if k in fields)","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def _fields(self, resource, fields):"},{"line_number":155,"context_line":"        if fields:"},{"line_number":156,"context_line":"            return dict(((key, item) for key, item in resource.iteritems()"},{"line_number":157,"context_line":"                         if key in fields))"},{"line_number":158,"context_line":"        return resource"},{"line_number":159,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Fz%2Bs%3D","line":156,"in_reply_to":"AAAAM3%2F%2F10E%3D","updated":"2013-01-04 07:25:10.000000000","message":"fixed it.","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"unresolved":false,"context_lines":[{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    ########################################################"},{"line_number":221,"context_line":"    # VIP DB access"},{"line_number":222,"context_line":"    def _make_vip_dict(self, vip, fields\u003dNone):"},{"line_number":223,"context_line":"        res \u003d {\u0027id\u0027: vip[\u0027id\u0027],"},{"line_number":224,"context_line":"               \u0027tenant_id\u0027: vip[\u0027tenant_id\u0027],"},{"line_number":225,"context_line":"               \u0027name\u0027: vip[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Fw1c%3D","line":222,"updated":"2013-01-07 07:51:11.000000000","message":"calling \"res \u003d dict(vip)\" would have the same effect here","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":233,"context_line":"               \u0027admin_state_up\u0027: vip[\u0027admin_state_up\u0027],"},{"line_number":234,"context_line":"               \u0027status\u0027: vip[\u0027status\u0027]}"},{"line_number":235,"context_line":"        if vip[\u0027session_persistence\u0027]:"},{"line_number":236,"context_line":"            res[\u0027session_persistence\u0027] \u003d \\"},{"line_number":237,"context_line":"                {\u0027type\u0027: vip[\u0027session_persistence\u0027][\u0027type\u0027],"},{"line_number":238,"context_line":"                 \u0027cookie_name\u0027: vip[\u0027session_persistence\u0027][\u0027cookie_name\u0027]}"},{"line_number":239,"context_line":"        return self._fields(res, fields)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F1zw%3D","line":236,"updated":"2013-01-02 19:46:48.000000000","message":"HACKING guidelines do not allow line continuations.  Consider:\n\nres[\u0027session_persistence\u0027] \u003d {\n    \u0027type\u0027: vip[\u0027session_persistence\u0027][\u0027type\u0027],\n    \u0027cookie_name\u0027: vip[\u0027session_persistence\u0027][\u0027cookie_name\u0027]\n}","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":233,"context_line":"               \u0027admin_state_up\u0027: vip[\u0027admin_state_up\u0027],"},{"line_number":234,"context_line":"               \u0027status\u0027: vip[\u0027status\u0027]}"},{"line_number":235,"context_line":"        if vip[\u0027session_persistence\u0027]:"},{"line_number":236,"context_line":"            res[\u0027session_persistence\u0027] \u003d \\"},{"line_number":237,"context_line":"                {\u0027type\u0027: vip[\u0027session_persistence\u0027][\u0027type\u0027],"},{"line_number":238,"context_line":"                 \u0027cookie_name\u0027: vip[\u0027session_persistence\u0027][\u0027cookie_name\u0027]}"},{"line_number":239,"context_line":"        return self._fields(res, fields)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Fz%2Bo%3D","line":236,"in_reply_to":"AAAAM3%2F%2F1zw%3D","updated":"2013-01-04 07:25:10.000000000","message":"fixed it.","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":250,"context_line":"            # Update sessionPersistence table"},{"line_number":251,"context_line":"            sess_qry \u003d context.session.query(SessionPersistence)"},{"line_number":252,"context_line":"            sess_qry.filter_by(vip_id\u003dvip_id).delete()"},{"line_number":253,"context_line":"            sesspersist_db \u003d \\"},{"line_number":254,"context_line":"                SessionPersistence(type\u003dinfo[\u0027type\u0027],"},{"line_number":255,"context_line":"                                   cookie_name\u003dinfo[\u0027cookie_name\u0027],"},{"line_number":256,"context_line":"                                   vip_id\u003dvip_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F1zg%3D","line":253,"updated":"2013-01-02 19:46:48.000000000","message":"sesspersist_db \u003d SessionPersistence(\n    type\u003dinfo[\u0027type\u0027],\n    cookie_name\u003dinfo[\u0027cookie_name\u0027],\n    vip_id\u003dvip_id)","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":250,"context_line":"            # Update sessionPersistence table"},{"line_number":251,"context_line":"            sess_qry \u003d context.session.query(SessionPersistence)"},{"line_number":252,"context_line":"            sess_qry.filter_by(vip_id\u003dvip_id).delete()"},{"line_number":253,"context_line":"            sesspersist_db \u003d \\"},{"line_number":254,"context_line":"                SessionPersistence(type\u003dinfo[\u0027type\u0027],"},{"line_number":255,"context_line":"                                   cookie_name\u003dinfo[\u0027cookie_name\u0027],"},{"line_number":256,"context_line":"                                   vip_id\u003dvip_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Fz%2Bg%3D","line":253,"in_reply_to":"AAAAM3%2F%2F1zg%3D","updated":"2013-01-04 07:25:10.000000000","message":"fixed it.","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":290,"context_line":"            sessionInfo \u003d v[\u0027session_persistence\u0027]"},{"line_number":291,"context_line":"            if sessionInfo:"},{"line_number":292,"context_line":"                has_session_persistence \u003d True"},{"line_number":293,"context_line":"                sesspersist_db \u003d \\"},{"line_number":294,"context_line":"                    SessionPersistence(type\u003dsessionInfo[\u0027type\u0027],"},{"line_number":295,"context_line":"                                       cookie_name\u003dsessionInfo[\u0027cookie_name\u0027],"},{"line_number":296,"context_line":"                                       vip_id\u003dvip_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F1zY%3D","line":293,"updated":"2013-01-02 19:46:48.000000000","message":"HACKING compliance needed","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":290,"context_line":"            sessionInfo \u003d v[\u0027session_persistence\u0027]"},{"line_number":291,"context_line":"            if sessionInfo:"},{"line_number":292,"context_line":"                has_session_persistence \u003d True"},{"line_number":293,"context_line":"                sesspersist_db \u003d \\"},{"line_number":294,"context_line":"                    SessionPersistence(type\u003dsessionInfo[\u0027type\u0027],"},{"line_number":295,"context_line":"                                       cookie_name\u003dsessionInfo[\u0027cookie_name\u0027],"},{"line_number":296,"context_line":"                                       vip_id\u003dvip_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Fz%2BY%3D","line":293,"in_reply_to":"AAAAM3%2F%2F1zY%3D","updated":"2013-01-04 07:25:10.000000000","message":"fixed it.","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":305,"context_line":"    def update_vip_db(self, context, id, vip):"},{"line_number":306,"context_line":"        v \u003d vip[\u0027vip\u0027]"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"        has_session_persistence \u003d False"},{"line_number":309,"context_line":"        if \u0027session_persistence\u0027 in v:"},{"line_number":310,"context_line":"            has_session_persistence \u003d True"},{"line_number":311,"context_line":"            sesspersist_info \u003d v[\u0027session_persistence\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F1zA%3D","line":308,"updated":"2013-01-02 19:46:48.000000000","message":"Replace lines 309-312\n\nsesspersist_info \u003d v.pop(\u0027session_persistence\u0027, None)","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":305,"context_line":"    def update_vip_db(self, context, id, vip):"},{"line_number":306,"context_line":"        v \u003d vip[\u0027vip\u0027]"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"        has_session_persistence \u003d False"},{"line_number":309,"context_line":"        if \u0027session_persistence\u0027 in v:"},{"line_number":310,"context_line":"            has_session_persistence \u003d True"},{"line_number":311,"context_line":"            sesspersist_info \u003d v[\u0027session_persistence\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Fz%2BA%3D","line":308,"in_reply_to":"AAAAM3%2F%2F1zA%3D","updated":"2013-01-04 07:25:10.000000000","message":"Nice suggestion. Fixed it.","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":312,"context_line":"            del v[\u0027session_persistence\u0027]"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":315,"context_line":"            if has_session_persistence:"},{"line_number":316,"context_line":"                self._update_vip_session_persistence_info(context,"},{"line_number":317,"context_line":"                                                          id,"},{"line_number":318,"context_line":"                                                          sesspersist_info)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F1y8%3D","line":315,"updated":"2013-01-02 19:46:48.000000000","message":"if sesspersist_info:","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":319,"context_line":""},{"line_number":320,"context_line":"            vip_db \u003d self._get_resource(context, Vip, id)"},{"line_number":321,"context_line":"            old_pool_id \u003d vip_db[\u0027pool_id\u0027]"},{"line_number":322,"context_line":"            if vip_db[\u0027status\u0027] in [\"PENDING_DELETE\", \"ERROR\"]:"},{"line_number":323,"context_line":"                raise loadbalancer.StateInvalid(id\u003dvip_db[\u0027id\u0027],"},{"line_number":324,"context_line":"                                                state\u003dvip_db[\u0027status\u0027])"},{"line_number":325,"context_line":"            if v.keys():"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F1%2FE%3D","line":322,"updated":"2013-01-02 19:46:48.000000000","message":"PENDING_DELETE, ERROR should be a constants","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":319,"context_line":""},{"line_number":320,"context_line":"            vip_db \u003d self._get_resource(context, Vip, id)"},{"line_number":321,"context_line":"            old_pool_id \u003d vip_db[\u0027pool_id\u0027]"},{"line_number":322,"context_line":"            if vip_db[\u0027status\u0027] in [\"PENDING_DELETE\", \"ERROR\"]:"},{"line_number":323,"context_line":"                raise loadbalancer.StateInvalid(id\u003dvip_db[\u0027id\u0027],"},{"line_number":324,"context_line":"                                                state\u003dvip_db[\u0027status\u0027])"},{"line_number":325,"context_line":"            if v.keys():"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Fz9c%3D","line":322,"in_reply_to":"AAAAM3%2F%2F1%2FE%3D","updated":"2013-01-04 07:25:10.000000000","message":"Will create constants in plugins.common.constants.py","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":322,"context_line":"            if vip_db[\u0027status\u0027] in [\"PENDING_DELETE\", \"ERROR\"]:"},{"line_number":323,"context_line":"                raise loadbalancer.StateInvalid(id\u003dvip_db[\u0027id\u0027],"},{"line_number":324,"context_line":"                                                state\u003dvip_db[\u0027status\u0027])"},{"line_number":325,"context_line":"            if v.keys():"},{"line_number":326,"context_line":"                v[\u0027status\u0027] \u003d \"PENDING_UPDATE\""},{"line_number":327,"context_line":"                vip_db.update(v)"},{"line_number":328,"context_line":"                # If the pool_id is changed, we need to update"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F2DE%3D","line":325,"updated":"2013-01-02 19:46:48.000000000","message":"if v:","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":322,"context_line":"            if vip_db[\u0027status\u0027] in [\"PENDING_DELETE\", \"ERROR\"]:"},{"line_number":323,"context_line":"                raise loadbalancer.StateInvalid(id\u003dvip_db[\u0027id\u0027],"},{"line_number":324,"context_line":"                                                state\u003dvip_db[\u0027status\u0027])"},{"line_number":325,"context_line":"            if v.keys():"},{"line_number":326,"context_line":"                v[\u0027status\u0027] \u003d \"PENDING_UPDATE\""},{"line_number":327,"context_line":"                vip_db.update(v)"},{"line_number":328,"context_line":"                # If the pool_id is changed, we need to update"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Fz9E%3D","line":325,"in_reply_to":"AAAAM3%2F%2F2DE%3D","updated":"2013-01-04 07:25:10.000000000","message":"fix it.","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":323,"context_line":"                raise loadbalancer.StateInvalid(id\u003dvip_db[\u0027id\u0027],"},{"line_number":324,"context_line":"                                                state\u003dvip_db[\u0027status\u0027])"},{"line_number":325,"context_line":"            if v.keys():"},{"line_number":326,"context_line":"                v[\u0027status\u0027] \u003d \"PENDING_UPDATE\""},{"line_number":327,"context_line":"                vip_db.update(v)"},{"line_number":328,"context_line":"                # If the pool_id is changed, we need to update"},{"line_number":329,"context_line":"                # the associated pools"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F1%2FA%3D","line":326,"updated":"2013-01-02 19:46:48.000000000","message":"PENDING_UPDATE should be a constant","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"unresolved":false,"context_lines":[{"line_number":354,"context_line":"    ########################################################"},{"line_number":355,"context_line":"    # Pool DB access"},{"line_number":356,"context_line":"    def _make_pool_dict(self, context, pool, fields\u003dNone):"},{"line_number":357,"context_line":"        res \u003d {\u0027id\u0027: pool[\u0027id\u0027],"},{"line_number":358,"context_line":"               \u0027tenant_id\u0027: pool[\u0027tenant_id\u0027],"},{"line_number":359,"context_line":"               \u0027name\u0027: pool[\u0027name\u0027],"},{"line_number":360,"context_line":"               \u0027description\u0027: pool[\u0027description\u0027],"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Fw1g%3D","line":357,"updated":"2013-01-07 07:51:11.000000000","message":"calling \"res \u003d dict(pool)\" would have the same effect here","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":392,"context_line":"    def _create_pool_stats(self, context, pool_id):"},{"line_number":393,"context_line":"        # This is internal method to add pool statistics. It won\u0027t"},{"line_number":394,"context_line":"        # be exposed to API"},{"line_number":395,"context_line":"        zerostats \u003d {\u0027bytes_in\u0027: 0,"},{"line_number":396,"context_line":"                     \u0027bytes_out\u0027: 0,"},{"line_number":397,"context_line":"                     \u0027active_connections\u0027: 0,"},{"line_number":398,"context_line":"                     \u0027total_connections\u0027: 0}"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F2DU%3D","line":395,"updated":"2013-01-02 19:46:48.000000000","message":"I don\u0027t see the purpose of creating this dictionary.  Why not just pass 0 in lines 402-405.","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":392,"context_line":"    def _create_pool_stats(self, context, pool_id):"},{"line_number":393,"context_line":"        # This is internal method to add pool statistics. It won\u0027t"},{"line_number":394,"context_line":"        # be exposed to API"},{"line_number":395,"context_line":"        zerostats \u003d {\u0027bytes_in\u0027: 0,"},{"line_number":396,"context_line":"                     \u0027bytes_out\u0027: 0,"},{"line_number":397,"context_line":"                     \u0027active_connections\u0027: 0,"},{"line_number":398,"context_line":"                     \u0027total_connections\u0027: 0}"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Fz9A%3D","line":395,"in_reply_to":"AAAAM3%2F%2F2DU%3D","updated":"2013-01-04 07:25:10.000000000","message":"good point. will fix it.","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":396,"context_line":"                     \u0027bytes_out\u0027: 0,"},{"line_number":397,"context_line":"                     \u0027active_connections\u0027: 0,"},{"line_number":398,"context_line":"                     \u0027total_connections\u0027: 0}"},{"line_number":399,"context_line":"        stats_db \u003d \\"},{"line_number":400,"context_line":"            PoolStatistics("},{"line_number":401,"context_line":"                pool_id\u003dpool_id,"},{"line_number":402,"context_line":"                bytes_in\u003dzerostats[\u0027bytes_in\u0027],"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F2Dg%3D","line":399,"updated":"2013-01-02 19:46:48.000000000","message":"The line continuation is unneeded:\n\nstats_db \u003d PoolStatistics(\n    pool_id\u003dpool_id,\n    ...\n)","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":396,"context_line":"                     \u0027bytes_out\u0027: 0,"},{"line_number":397,"context_line":"                     \u0027active_connections\u0027: 0,"},{"line_number":398,"context_line":"                     \u0027total_connections\u0027: 0}"},{"line_number":399,"context_line":"        stats_db \u003d \\"},{"line_number":400,"context_line":"            PoolStatistics("},{"line_number":401,"context_line":"                pool_id\u003dpool_id,"},{"line_number":402,"context_line":"                bytes_in\u003dzerostats[\u0027bytes_in\u0027],"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Fz84%3D","line":399,"in_reply_to":"AAAAM3%2F%2F2Dg%3D","updated":"2013-01-04 07:25:10.000000000","message":"fix it.","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":429,"context_line":"                           protocol\u003dv[\u0027protocol\u0027],"},{"line_number":430,"context_line":"                           lb_method\u003dv[\u0027lb_method\u0027],"},{"line_number":431,"context_line":"                           admin_state_up\u003dv[\u0027admin_state_up\u0027],"},{"line_number":432,"context_line":"                           status\u003d\"PENDING_CREATE\")"},{"line_number":433,"context_line":"            pool_db.stats \u003d  \\"},{"line_number":434,"context_line":"                self._create_pool_stats(context, pool_db[\u0027id\u0027])"},{"line_number":435,"context_line":"            context.session.add(pool_db)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F1%2Fo%3D","line":432,"updated":"2013-01-02 19:46:48.000000000","message":"PENDING_CREATE should be a constant","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":430,"context_line":"                           lb_method\u003dv[\u0027lb_method\u0027],"},{"line_number":431,"context_line":"                           admin_state_up\u003dv[\u0027admin_state_up\u0027],"},{"line_number":432,"context_line":"                           status\u003d\"PENDING_CREATE\")"},{"line_number":433,"context_line":"            pool_db.stats \u003d  \\"},{"line_number":434,"context_line":"                self._create_pool_stats(context, pool_db[\u0027id\u0027])"},{"line_number":435,"context_line":"            context.session.add(pool_db)"},{"line_number":436,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F2DQ%3D","line":433,"updated":"2013-01-02 19:46:48.000000000","message":"pool_db.stats \u003d self._create_pool_stats(\n    context,\n    pool_db[\u0027id\u0027]\n)","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":430,"context_line":"                           lb_method\u003dv[\u0027lb_method\u0027],"},{"line_number":431,"context_line":"                           admin_state_up\u003dv[\u0027admin_state_up\u0027],"},{"line_number":432,"context_line":"                           status\u003d\"PENDING_CREATE\")"},{"line_number":433,"context_line":"            pool_db.stats \u003d  \\"},{"line_number":434,"context_line":"                self._create_pool_stats(context, pool_db[\u0027id\u0027])"},{"line_number":435,"context_line":"            context.session.add(pool_db)"},{"line_number":436,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Fz80%3D","line":433,"in_reply_to":"AAAAM3%2F%2F2DQ%3D","updated":"2013-01-04 07:25:10.000000000","message":"fixed it.","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":445,"context_line":"            if pool_db[\u0027status\u0027] in [\"PENDING_DELETE\", \"ERROR\"]:"},{"line_number":446,"context_line":"                raise loadbalancer.StateInvalid(id\u003dpool_db[\u0027id\u0027],"},{"line_number":447,"context_line":"                                                state\u003dpool_db[\u0027status\u0027])"},{"line_number":448,"context_line":"            if v.keys():"},{"line_number":449,"context_line":"                v[\u0027status\u0027] \u003d \"PENDING_UPDATE\""},{"line_number":450,"context_line":"                pool_db.update(v)"},{"line_number":451,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F2DI%3D","line":448,"updated":"2013-01-02 19:46:48.000000000","message":"if v:","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":445,"context_line":"            if pool_db[\u0027status\u0027] in [\"PENDING_DELETE\", \"ERROR\"]:"},{"line_number":446,"context_line":"                raise loadbalancer.StateInvalid(id\u003dpool_db[\u0027id\u0027],"},{"line_number":447,"context_line":"                                                state\u003dpool_db[\u0027status\u0027])"},{"line_number":448,"context_line":"            if v.keys():"},{"line_number":449,"context_line":"                v[\u0027status\u0027] \u003d \"PENDING_UPDATE\""},{"line_number":450,"context_line":"                pool_db.update(v)"},{"line_number":451,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Fz8w%3D","line":448,"in_reply_to":"AAAAM3%2F%2F2DI%3D","updated":"2013-01-04 07:25:10.000000000","message":"fixed","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"unresolved":false,"context_lines":[{"line_number":541,"context_line":""},{"line_number":542,"context_line":"    ########################################################"},{"line_number":543,"context_line":"    # Member DB access"},{"line_number":544,"context_line":"    def _make_member_dict(self, member, fields\u003dNone):"},{"line_number":545,"context_line":"        res \u003d {\u0027id\u0027: member[\u0027id\u0027],"},{"line_number":546,"context_line":"               \u0027tenant_id\u0027: member[\u0027tenant_id\u0027],"},{"line_number":547,"context_line":"               \u0027pool_id\u0027: member[\u0027pool_id\u0027],"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Fw1s%3D","line":544,"updated":"2013-01-07 07:51:11.000000000","message":"calling \"res \u003d dict(member)\" would have the same effect here","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":584,"context_line":"                raise loadbalancer.StateInvalid(id\u003dmember_db[\u0027id\u0027],"},{"line_number":585,"context_line":"                                                state\u003dmember_db[\u0027status\u0027])"},{"line_number":586,"context_line":"            old_pool_id \u003d member_db[\u0027pool_id\u0027]"},{"line_number":587,"context_line":"            if v.keys():"},{"line_number":588,"context_line":"                v[\u0027status\u0027] \u003d \"PENDING_UPDATE\""},{"line_number":589,"context_line":"                member_db.update(v)"},{"line_number":590,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F2C4%3D","line":587,"updated":"2013-01-02 19:46:48.000000000","message":"if v:","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":584,"context_line":"                raise loadbalancer.StateInvalid(id\u003dmember_db[\u0027id\u0027],"},{"line_number":585,"context_line":"                                                state\u003dmember_db[\u0027status\u0027])"},{"line_number":586,"context_line":"            old_pool_id \u003d member_db[\u0027pool_id\u0027]"},{"line_number":587,"context_line":"            if v.keys():"},{"line_number":588,"context_line":"                v[\u0027status\u0027] \u003d \"PENDING_UPDATE\""},{"line_number":589,"context_line":"                member_db.update(v)"},{"line_number":590,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Fz8s%3D","line":587,"in_reply_to":"AAAAM3%2F%2F2C4%3D","updated":"2013-01-04 07:25:10.000000000","message":"fixed","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"unresolved":false,"context_lines":[{"line_number":608,"context_line":"    ########################################################"},{"line_number":609,"context_line":"    # HealthMonitor DB access"},{"line_number":610,"context_line":"    def _make_health_monitor_dict(self, health_monitor, fields\u003dNone):"},{"line_number":611,"context_line":"        res \u003d {\u0027id\u0027: health_monitor[\u0027id\u0027],"},{"line_number":612,"context_line":"               \u0027tenant_id\u0027: health_monitor[\u0027tenant_id\u0027],"},{"line_number":613,"context_line":"               \u0027type\u0027: health_monitor[\u0027type\u0027],"},{"line_number":614,"context_line":"               \u0027delay\u0027: health_monitor[\u0027delay\u0027],"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Fw1k%3D","line":611,"updated":"2013-01-07 07:51:11.000000000","message":"calling \"res \u003d dict(health_monitor)\" would have the same effect here","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":646,"context_line":"            if monitor_db[\u0027status\u0027] in [\"PENDING_DELETE\", \"ERROR\"]:"},{"line_number":647,"context_line":"                raise loadbalancer.StateInvalid(id\u003dmonitor_db[\u0027id\u0027],"},{"line_number":648,"context_line":"                                                state\u003dmonitor_db[\u0027status\u0027])"},{"line_number":649,"context_line":"            if v.keys():"},{"line_number":650,"context_line":"                v[\u0027status\u0027] \u003d \"PENDING_UPDATE\""},{"line_number":651,"context_line":"                monitor_db.update(v)"},{"line_number":652,"context_line":"        return self._make_health_monitor_dict(monitor_db)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F2Cw%3D","line":649,"updated":"2013-01-02 19:46:48.000000000","message":"if v:","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":646,"context_line":"            if monitor_db[\u0027status\u0027] in [\"PENDING_DELETE\", \"ERROR\"]:"},{"line_number":647,"context_line":"                raise loadbalancer.StateInvalid(id\u003dmonitor_db[\u0027id\u0027],"},{"line_number":648,"context_line":"                                                state\u003dmonitor_db[\u0027status\u0027])"},{"line_number":649,"context_line":"            if v.keys():"},{"line_number":650,"context_line":"                v[\u0027status\u0027] \u003d \"PENDING_UPDATE\""},{"line_number":651,"context_line":"                monitor_db.update(v)"},{"line_number":652,"context_line":"        return self._make_health_monitor_dict(monitor_db)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Fz8o%3D","line":649,"in_reply_to":"AAAAM3%2F%2F2Cw%3D","updated":"2013-01-04 07:25:10.000000000","message":"fixed","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":647,"context_line":"                raise loadbalancer.StateInvalid(id\u003dmonitor_db[\u0027id\u0027],"},{"line_number":648,"context_line":"                                                state\u003dmonitor_db[\u0027status\u0027])"},{"line_number":649,"context_line":"            if v.keys():"},{"line_number":650,"context_line":"                v[\u0027status\u0027] \u003d \"PENDING_UPDATE\""},{"line_number":651,"context_line":"                monitor_db.update(v)"},{"line_number":652,"context_line":"        return self._make_health_monitor_dict(monitor_db)"},{"line_number":653,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F1%2Fs%3D","line":650,"updated":"2013-01-02 19:46:48.000000000","message":"PENDING_UPDATE should be a constant","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":62,"context_line":"    subnet_id \u003d sa.Column(sa.String(36), nullable\u003dFalse)"},{"line_number":63,"context_line":"    address \u003d sa.Column(sa.String(64))"},{"line_number":64,"context_line":"    port \u003d sa.Column(sa.Integer, nullable\u003dFalse)"},{"line_number":65,"context_line":"    protocol \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":66,"context_line":"    pool_id \u003d sa.Column(sa.String(36), nullable\u003dFalse)"},{"line_number":67,"context_line":"    session_persistence \u003d orm.relationship(SessionPersistence,"},{"line_number":68,"context_line":"                                           uselist\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FxI4%3D","line":65,"updated":"2013-01-06 22:32:19.000000000","message":"It seems the API does not mandate a list of valid values for this attribute. Is that correct?\nI was kind of expecting HTTP \u0026 HTTPS only for this release, in which case an enum here would have been welcome.","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":62,"context_line":"    subnet_id \u003d sa.Column(sa.String(36), nullable\u003dFalse)"},{"line_number":63,"context_line":"    address \u003d sa.Column(sa.String(64))"},{"line_number":64,"context_line":"    port \u003d sa.Column(sa.Integer, nullable\u003dFalse)"},{"line_number":65,"context_line":"    protocol \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":66,"context_line":"    pool_id \u003d sa.Column(sa.String(36), nullable\u003dFalse)"},{"line_number":67,"context_line":"    session_persistence \u003d orm.relationship(SessionPersistence,"},{"line_number":68,"context_line":"                                           uselist\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FwFY%3D","line":65,"in_reply_to":"AAAAM3%2F%2Fwz4%3D","updated":"2013-01-07 18:32:06.000000000","message":"The validation should probably occur in the code which has already been merged. I\u0027ll push a quick patch for that.\n\nUsing the enum here is OK.","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":62,"context_line":"    subnet_id \u003d sa.Column(sa.String(36), nullable\u003dFalse)"},{"line_number":63,"context_line":"    address \u003d sa.Column(sa.String(64))"},{"line_number":64,"context_line":"    port \u003d sa.Column(sa.Integer, nullable\u003dFalse)"},{"line_number":65,"context_line":"    protocol \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":66,"context_line":"    pool_id \u003d sa.Column(sa.String(36), nullable\u003dFalse)"},{"line_number":67,"context_line":"    session_persistence \u003d orm.relationship(SessionPersistence,"},{"line_number":68,"context_line":"                                           uselist\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2Fwz4%3D","line":65,"in_reply_to":"AAAAM3%2F%2FxI4%3D","updated":"2013-01-07 11:32:25.000000000","message":"This is a question in my mind too. Where is the right place to validate the input value? Should my change to do enough validation for most object properties? I actually think that extension layer should be the good place to validate the values.\n\nI\u0027ll use enum as suggested.","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"class PoolMonitorAssociation(model_base.BASEV2):"},{"line_number":121,"context_line":"    \"\"\"Represents the many-to-many association between pool and \"\"\""},{"line_number":122,"context_line":"    \"\"\"healthMonitor classes\"\"\""},{"line_number":123,"context_line":"    pool_id \u003d sa.Column(sa.String(36),"},{"line_number":124,"context_line":"                        sa.ForeignKey(\"pools.id\"),"},{"line_number":125,"context_line":"                        primary_key\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FxIw%3D","line":122,"updated":"2013-01-06 22:32:19.000000000","message":"No need to repeat triple quotes at each line","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"class PoolMonitorAssociation(model_base.BASEV2):"},{"line_number":121,"context_line":"    \"\"\"Represents the many-to-many association between pool and \"\"\""},{"line_number":122,"context_line":"    \"\"\"healthMonitor classes\"\"\""},{"line_number":123,"context_line":"    pool_id \u003d sa.Column(sa.String(36),"},{"line_number":124,"context_line":"                        sa.ForeignKey(\"pools.id\"),"},{"line_number":125,"context_line":"                        primary_key\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2Fwz0%3D","line":122,"in_reply_to":"AAAAM3%2F%2FxIw%3D","updated":"2013-01-07 11:32:25.000000000","message":"fixed.","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":136,"context_line":"    loadbalancer plugin database access interface using SQLAlchemy models."},{"line_number":137,"context_line":"    \"\"\""},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    # TODO:"},{"line_number":140,"context_line":"    # A set of internal facility methods are borrowed from QuantumDbPluginV2"},{"line_number":141,"context_line":"    # class and hence this is duplicate. We need to pull out those methods"},{"line_number":142,"context_line":"    # into a seperate class which can be used by both QuantumDbPlluginV2 and"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FxIg%3D","line":139,"updated":"2013-01-06 22:32:19.000000000","message":"add you lp name to the TODO.\n\ne.g.: TODO(lcui)","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":136,"context_line":"    loadbalancer plugin database access interface using SQLAlchemy models."},{"line_number":137,"context_line":"    \"\"\""},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    # TODO:"},{"line_number":140,"context_line":"    # A set of internal facility methods are borrowed from QuantumDbPluginV2"},{"line_number":141,"context_line":"    # class and hence this is duplicate. We need to pull out those methods"},{"line_number":142,"context_line":"    # into a seperate class which can be used by both QuantumDbPlluginV2 and"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2Fwzs%3D","line":139,"in_reply_to":"AAAAM3%2F%2FxIg%3D","updated":"2013-01-07 11:32:25.000000000","message":"added","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":139,"context_line":"    # TODO:"},{"line_number":140,"context_line":"    # A set of internal facility methods are borrowed from QuantumDbPluginV2"},{"line_number":141,"context_line":"    # class and hence this is duplicate. We need to pull out those methods"},{"line_number":142,"context_line":"    # into a seperate class which can be used by both QuantumDbPlluginV2 and"},{"line_number":143,"context_line":"    # this class (and others)."},{"line_number":144,"context_line":"    def _get_tenant_id_for_create(self, context, resource):"},{"line_number":145,"context_line":"        if context.is_admin and \u0027tenant_id\u0027 in resource:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FxIk%3D","line":142,"updated":"2013-01-06 22:32:19.000000000","message":"QuantumDbPluginV2 is misspelled (one l too much)","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":139,"context_line":"    # TODO:"},{"line_number":140,"context_line":"    # A set of internal facility methods are borrowed from QuantumDbPluginV2"},{"line_number":141,"context_line":"    # class and hence this is duplicate. We need to pull out those methods"},{"line_number":142,"context_line":"    # into a seperate class which can be used by both QuantumDbPlluginV2 and"},{"line_number":143,"context_line":"    # this class (and others)."},{"line_number":144,"context_line":"    def _get_tenant_id_for_create(self, context, resource):"},{"line_number":145,"context_line":"        if context.is_admin and \u0027tenant_id\u0027 in resource:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2Fwzo%3D","line":142,"in_reply_to":"AAAAM3%2F%2FxIk%3D","updated":"2013-01-07 11:32:25.000000000","message":"fixed","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":256,"context_line":"                type\u003dinfo[\u0027type\u0027],"},{"line_number":257,"context_line":"                cookie_name\u003dinfo[\u0027cookie_name\u0027],"},{"line_number":258,"context_line":"                vip_id\u003dvip_id)"},{"line_number":259,"context_line":"            context.session.add(sesspersist_db)"},{"line_number":260,"context_line":"            # Update vip table"},{"line_number":261,"context_line":"            vip.session_persistence \u003d sesspersist_db"},{"line_number":262,"context_line":"            context.session.add(vip)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FxIc%3D","line":259,"updated":"2013-01-06 22:32:19.000000000","message":"Can you explain why you do a delete and then a create instead of updating the record?","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":256,"context_line":"                type\u003dinfo[\u0027type\u0027],"},{"line_number":257,"context_line":"                cookie_name\u003dinfo[\u0027cookie_name\u0027],"},{"line_number":258,"context_line":"                vip_id\u003dvip_id)"},{"line_number":259,"context_line":"            context.session.add(sesspersist_db)"},{"line_number":260,"context_line":"            # Update vip table"},{"line_number":261,"context_line":"            vip.session_persistence \u003d sesspersist_db"},{"line_number":262,"context_line":"            context.session.add(vip)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FwzM%3D","line":259,"in_reply_to":"AAAAM3%2F%2FxIc%3D","updated":"2013-01-07 11:32:25.000000000","message":"Fixed by updating existing one or add new one.","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":274,"context_line":"            if v[\u0027address\u0027] \u003d\u003d attributes.ATTR_NOT_SPECIFIED:"},{"line_number":275,"context_line":"                address \u003d \"\""},{"line_number":276,"context_line":"            else:"},{"line_number":277,"context_line":"                address \u003d v[\u0027address\u0027]"},{"line_number":278,"context_line":"            vip_db \u003d Vip(id\u003duuidutils.generate_uuid(),"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FxH4%3D","line":275,"updated":"2013-01-06 22:32:19.000000000","message":"Why not None?\nAn empty string will create a slight inconsistency in the API (you pass none in the request - you get an empty string in the responsE)","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":274,"context_line":"            if v[\u0027address\u0027] \u003d\u003d attributes.ATTR_NOT_SPECIFIED:"},{"line_number":275,"context_line":"                address \u003d \"\""},{"line_number":276,"context_line":"            else:"},{"line_number":277,"context_line":"                address \u003d v[\u0027address\u0027]"},{"line_number":278,"context_line":"            vip_db \u003d Vip(id\u003duuidutils.generate_uuid(),"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FwzQ%3D","line":275,"in_reply_to":"AAAAM3%2F%2FxH4%3D","updated":"2013-01-07 11:32:25.000000000","message":"changed.","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":316,"context_line":""},{"line_number":317,"context_line":"            vip_db \u003d self._get_resource(context, Vip, id)"},{"line_number":318,"context_line":"            old_pool_id \u003d vip_db[\u0027pool_id\u0027]"},{"line_number":319,"context_line":"            if vip_db[\u0027status\u0027] in [constants.PENDING_DELETE, constants.ERROR]:"},{"line_number":320,"context_line":"                raise loadbalancer.StateInvalid(id\u003dvip_db[\u0027id\u0027],"},{"line_number":321,"context_line":"                                                state\u003dvip_db[\u0027status\u0027])"},{"line_number":322,"context_line":"            if v:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FxHE%3D","line":319,"updated":"2013-01-06 22:32:19.000000000","message":"What\u0027s the consensus about moving the code for managing sequencing of operations into the plugin and away from the db support code?","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":316,"context_line":""},{"line_number":317,"context_line":"            vip_db \u003d self._get_resource(context, Vip, id)"},{"line_number":318,"context_line":"            old_pool_id \u003d vip_db[\u0027pool_id\u0027]"},{"line_number":319,"context_line":"            if vip_db[\u0027status\u0027] in [constants.PENDING_DELETE, constants.ERROR]:"},{"line_number":320,"context_line":"                raise loadbalancer.StateInvalid(id\u003dvip_db[\u0027id\u0027],"},{"line_number":321,"context_line":"                                                state\u003dvip_db[\u0027status\u0027])"},{"line_number":322,"context_line":"            if v:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FwzA%3D","line":319,"in_reply_to":"AAAAM3%2F%2FxHE%3D","updated":"2013-01-07 11:32:25.000000000","message":"OK. So I can safely remove this check. Plugin should validate it prior to the db call.","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":333,"context_line":"    def delete_vip_db(self, context, id):"},{"line_number":334,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":335,"context_line":"            vip \u003d self._get_resource(context, Vip, id)"},{"line_number":336,"context_line":"            vip[\u0027status\u0027] \u003d constants.PENDING_DELETE"},{"line_number":337,"context_line":"            qry \u003d context.session.query(Pool)"},{"line_number":338,"context_line":"            for pool in qry.filter_by(vip_id\u003did).all():"},{"line_number":339,"context_line":"                pool.update({\"vip_id\": None})"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FxHA%3D","line":336,"updated":"2013-01-06 22:32:19.000000000","message":"If you want to manage sequencing of operations here, you should probably raise state invalid if there are operations pending?","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":333,"context_line":"    def delete_vip_db(self, context, id):"},{"line_number":334,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":335,"context_line":"            vip \u003d self._get_resource(context, Vip, id)"},{"line_number":336,"context_line":"            vip[\u0027status\u0027] \u003d constants.PENDING_DELETE"},{"line_number":337,"context_line":"            qry \u003d context.session.query(Pool)"},{"line_number":338,"context_line":"            for pool in qry.filter_by(vip_id\u003did).all():"},{"line_number":339,"context_line":"                pool.update({\"vip_id\": None})"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FwCw%3D","line":336,"in_reply_to":"AAAAM3%2F%2Fwvs%3D","updated":"2013-01-07 18:32:06.000000000","message":"that\u0027s fine","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":333,"context_line":"    def delete_vip_db(self, context, id):"},{"line_number":334,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":335,"context_line":"            vip \u003d self._get_resource(context, Vip, id)"},{"line_number":336,"context_line":"            vip[\u0027status\u0027] \u003d constants.PENDING_DELETE"},{"line_number":337,"context_line":"            qry \u003d context.session.query(Pool)"},{"line_number":338,"context_line":"            for pool in qry.filter_by(vip_id\u003did).all():"},{"line_number":339,"context_line":"                pool.update({\"vip_id\": None})"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2Fwvs%3D","line":336,"in_reply_to":"AAAAM3%2F%2FxHA%3D","updated":"2013-01-07 11:32:25.000000000","message":"I think we should allow user to delete a object regardless of state. If we look at LbaaS API spec, there is no restriction for delete operation in term of object status.","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"unresolved":false,"context_lines":[{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    ########################################################"},{"line_number":352,"context_line":"    # Pool DB access"},{"line_number":353,"context_line":"    def _make_pool_dict(self, context, pool, fields\u003dNone):"},{"line_number":354,"context_line":"        res \u003d {\u0027id\u0027: pool[\u0027id\u0027],"},{"line_number":355,"context_line":"               \u0027tenant_id\u0027: pool[\u0027tenant_id\u0027],"},{"line_number":356,"context_line":"               \u0027name\u0027: pool[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2Fw08%3D","line":353,"updated":"2013-01-07 08:06:05.000000000","message":"calling \"res \u003d dict(pool)\" would have the same effect here","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    ########################################################"},{"line_number":352,"context_line":"    # Pool DB access"},{"line_number":353,"context_line":"    def _make_pool_dict(self, context, pool, fields\u003dNone):"},{"line_number":354,"context_line":"        res \u003d {\u0027id\u0027: pool[\u0027id\u0027],"},{"line_number":355,"context_line":"               \u0027tenant_id\u0027: pool[\u0027tenant_id\u0027],"},{"line_number":356,"context_line":"               \u0027name\u0027: pool[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2Fwuo%3D","line":353,"in_reply_to":"AAAAM3%2F%2Fw08%3D","updated":"2013-01-07 11:32:25.000000000","message":"But pool object has more attributes than what I want to expose by API. That\u0027s why I explicitly state those fields here.","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    ########################################################"},{"line_number":352,"context_line":"    # Pool DB access"},{"line_number":353,"context_line":"    def _make_pool_dict(self, context, pool, fields\u003dNone):"},{"line_number":354,"context_line":"        res \u003d {\u0027id\u0027: pool[\u0027id\u0027],"},{"line_number":355,"context_line":"               \u0027tenant_id\u0027: pool[\u0027tenant_id\u0027],"},{"line_number":356,"context_line":"               \u0027name\u0027: pool[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FwCs%3D","line":353,"in_reply_to":"AAAAM3%2F%2Fwuo%3D","updated":"2013-01-07 18:32:06.000000000","message":"I think you\u0027ll also bring in sqlalchemy properties that make no sense to the user","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":363,"context_line":"               \u0027status\u0027: pool[\u0027status\u0027]}"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"        # Get the associated members"},{"line_number":366,"context_line":"        members \u003d []"},{"line_number":367,"context_line":"        for member in pool[\u0027members\u0027]:"},{"line_number":368,"context_line":"            members.append(member[\"id\"])"},{"line_number":369,"context_line":"        res[\u0027members\u0027] \u003d members"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FxFQ%3D","line":366,"updated":"2013-01-06 22:32:19.000000000","message":"Just consider the following, I think it works as well:\n\nres[\u0027members\u0027] \u003d [ member[\u0027id\u0027] for member in pool[\u0027members\u0027]]","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":363,"context_line":"               \u0027status\u0027: pool[\u0027status\u0027]}"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"        # Get the associated members"},{"line_number":366,"context_line":"        members \u003d []"},{"line_number":367,"context_line":"        for member in pool[\u0027members\u0027]:"},{"line_number":368,"context_line":"            members.append(member[\"id\"])"},{"line_number":369,"context_line":"        res[\u0027members\u0027] \u003d members"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FwvM%3D","line":366,"in_reply_to":"AAAAM3%2F%2FxFQ%3D","updated":"2013-01-07 11:32:25.000000000","message":"Nice. Will do it.","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":372,"context_line":"        monitors \u003d []"},{"line_number":373,"context_line":"        for monitor in pool[\u0027monitors\u0027]:"},{"line_number":374,"context_line":"            monitors.append(monitor[\u0027monitor_id\u0027])"},{"line_number":375,"context_line":"        res[\u0027health_monitors\u0027] \u003d monitors"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"        return self._fields(res, fields)"},{"line_number":378,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FxFM%3D","line":375,"updated":"2013-01-06 22:32:19.000000000","message":"same as above, just with a different attribute","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"unresolved":false,"context_lines":[{"line_number":534,"context_line":""},{"line_number":535,"context_line":"    ########################################################"},{"line_number":536,"context_line":"    # Member DB access"},{"line_number":537,"context_line":"    def _make_member_dict(self, member, fields\u003dNone):"},{"line_number":538,"context_line":"        res \u003d {\u0027id\u0027: member[\u0027id\u0027],"},{"line_number":539,"context_line":"               \u0027tenant_id\u0027: member[\u0027tenant_id\u0027],"},{"line_number":540,"context_line":"               \u0027pool_id\u0027: member[\u0027pool_id\u0027],"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2Fw04%3D","line":537,"updated":"2013-01-07 08:06:05.000000000","message":"calling \"res \u003d dict(member)\" would have the same effect here","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":557,"context_line":"                               port\u003dv[\u0027port\u0027],"},{"line_number":558,"context_line":"                               weight\u003dv[\u0027weight\u0027],"},{"line_number":559,"context_line":"                               admin_state_up\u003dv[\u0027admin_state_up\u0027],"},{"line_number":560,"context_line":"                               status\u003dconstants.PENDING_CREATE)"},{"line_number":561,"context_line":"            context.session.add(member_db)"},{"line_number":562,"context_line":""},{"line_number":563,"context_line":"            pool \u003d None"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FxFU%3D","line":560,"updated":"2013-01-06 22:32:19.000000000","message":"Is the status supposed to stay in PENDING_CREATE state even after the method completes?","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":557,"context_line":"                               port\u003dv[\u0027port\u0027],"},{"line_number":558,"context_line":"                               weight\u003dv[\u0027weight\u0027],"},{"line_number":559,"context_line":"                               admin_state_up\u003dv[\u0027admin_state_up\u0027],"},{"line_number":560,"context_line":"                               status\u003dconstants.PENDING_CREATE)"},{"line_number":561,"context_line":"            context.session.add(member_db)"},{"line_number":562,"context_line":""},{"line_number":563,"context_line":"            pool \u003d None"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2Fwuk%3D","line":560,"in_reply_to":"AAAAM3%2F%2FxFU%3D","updated":"2013-01-07 11:32:25.000000000","message":"Plugin is supposed to change the state to ACTIVE.","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":565,"context_line":"                qry \u003d context.session.query(Pool)"},{"line_number":566,"context_line":"                pool \u003d qry.filter_by(id\u003dv[\u0027pool_id\u0027]).one()"},{"line_number":567,"context_line":"            except exc.NoResultFound:"},{"line_number":568,"context_line":"                raise loadbalancer.PoolNotFound(pool_id\u003dv[\u0027pool_id\u0027])"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":"        return self._make_member_dict(member_db)"},{"line_number":571,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FxFY%3D","line":568,"updated":"2013-01-06 22:32:19.000000000","message":"This check can probably be performed before adding the member to the database.","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":565,"context_line":"                qry \u003d context.session.query(Pool)"},{"line_number":566,"context_line":"                pool \u003d qry.filter_by(id\u003dv[\u0027pool_id\u0027]).one()"},{"line_number":567,"context_line":"            except exc.NoResultFound:"},{"line_number":568,"context_line":"                raise loadbalancer.PoolNotFound(pool_id\u003dv[\u0027pool_id\u0027])"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":"        return self._make_member_dict(member_db)"},{"line_number":571,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2Fwug%3D","line":568,"in_reply_to":"AAAAM3%2F%2FxFY%3D","updated":"2013-01-07 11:32:25.000000000","message":"good point. fixed.","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"unresolved":false,"context_lines":[{"line_number":602,"context_line":"    ########################################################"},{"line_number":603,"context_line":"    # HealthMonitor DB access"},{"line_number":604,"context_line":"    def _make_health_monitor_dict(self, health_monitor, fields\u003dNone):"},{"line_number":605,"context_line":"        res \u003d {\u0027id\u0027: health_monitor[\u0027id\u0027],"},{"line_number":606,"context_line":"               \u0027tenant_id\u0027: health_monitor[\u0027tenant_id\u0027],"},{"line_number":607,"context_line":"               \u0027type\u0027: health_monitor[\u0027type\u0027],"},{"line_number":608,"context_line":"               \u0027delay\u0027: health_monitor[\u0027delay\u0027],"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2Fw0w%3D","line":605,"updated":"2013-01-07 08:06:05.000000000","message":"calling \"res \u003d dict(health_monitor)\" would have the same effect here","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":652,"context_line":"            pool_qry \u003d context.session.query(Pool)"},{"line_number":653,"context_line":"            for assoc in assoc_qry.filter_by(monitor_id\u003did).all():"},{"line_number":654,"context_line":"                try:"},{"line_number":655,"context_line":"                    pool \u003d pool_qry.filter_by(id\u003dassoc[\u0027pool_id\u0027]).one()"},{"line_number":656,"context_line":"                except exc.NoResultFound:"},{"line_number":657,"context_line":"                    raise loadbalancer.PoolNotFound(pool_id\u003dpool[\u0027id\u0027])"},{"line_number":658,"context_line":"                pool.monitors.remove(assoc)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FxFg%3D","line":655,"updated":"2013-01-06 22:32:19.000000000","message":"Why is this necessary?\nFirst, Referential Integrity should ensure this kind of stale records are not present. But even if they\u0027re there, that would probably mean the record just need to be deleted. Or is there something else?","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":652,"context_line":"            pool_qry \u003d context.session.query(Pool)"},{"line_number":653,"context_line":"            for assoc in assoc_qry.filter_by(monitor_id\u003did).all():"},{"line_number":654,"context_line":"                try:"},{"line_number":655,"context_line":"                    pool \u003d pool_qry.filter_by(id\u003dassoc[\u0027pool_id\u0027]).one()"},{"line_number":656,"context_line":"                except exc.NoResultFound:"},{"line_number":657,"context_line":"                    raise loadbalancer.PoolNotFound(pool_id\u003dpool[\u0027id\u0027])"},{"line_number":658,"context_line":"                pool.monitors.remove(assoc)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FwB8%3D","line":655,"in_reply_to":"AAAAM3%2F%2FwuA%3D","updated":"2013-01-07 18:32:06.000000000","message":"No worries then.\nIf we find a more efficient way of dealing with this, which I believe there is, we\u0027ll do that in a separate patch.","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":652,"context_line":"            pool_qry \u003d context.session.query(Pool)"},{"line_number":653,"context_line":"            for assoc in assoc_qry.filter_by(monitor_id\u003did).all():"},{"line_number":654,"context_line":"                try:"},{"line_number":655,"context_line":"                    pool \u003d pool_qry.filter_by(id\u003dassoc[\u0027pool_id\u0027]).one()"},{"line_number":656,"context_line":"                except exc.NoResultFound:"},{"line_number":657,"context_line":"                    raise loadbalancer.PoolNotFound(pool_id\u003dpool[\u0027id\u0027])"},{"line_number":658,"context_line":"                pool.monitors.remove(assoc)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FwuA%3D","line":655,"in_reply_to":"AAAAM3%2F%2FxFg%3D","updated":"2013-01-07 11:32:25.000000000","message":"Well, I just follow a sample in sqlalchemy document regarding how to delete a association object.\nRemove it seems doesn\u0027t work in my unit test.","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":657,"context_line":"                    raise loadbalancer.PoolNotFound(pool_id\u003dpool[\u0027id\u0027])"},{"line_number":658,"context_line":"                pool.monitors.remove(assoc)"},{"line_number":659,"context_line":"            monitor_db \u003d self._get_resource(context, HealthMonitor, id)"},{"line_number":660,"context_line":"            monitor_db[\u0027status\u0027] \u003d constants.PENDING_DELETE"},{"line_number":661,"context_line":"            context.session.delete(monitor_db)"},{"line_number":662,"context_line":""},{"line_number":663,"context_line":"    def get_health_monitor_db(self, context, id, fields\u003dNone):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FxFc%3D","line":660,"updated":"2013-01-06 22:32:19.000000000","message":"Still on the subject on operational status management, operation like this are probably not meaningful unless they are executed in the context of the plugin which dispatches the operation to the driver.","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":657,"context_line":"                    raise loadbalancer.PoolNotFound(pool_id\u003dpool[\u0027id\u0027])"},{"line_number":658,"context_line":"                pool.monitors.remove(assoc)"},{"line_number":659,"context_line":"            monitor_db \u003d self._get_resource(context, HealthMonitor, id)"},{"line_number":660,"context_line":"            monitor_db[\u0027status\u0027] \u003d constants.PENDING_DELETE"},{"line_number":661,"context_line":"            context.session.delete(monitor_db)"},{"line_number":662,"context_line":""},{"line_number":663,"context_line":"    def get_health_monitor_db(self, context, id, fields\u003dNone):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FwB4%3D","line":660,"in_reply_to":"AAAAM3%2F%2FwsI%3D","updated":"2013-01-07 18:32:06.000000000","message":"great, thanks!","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":657,"context_line":"                    raise loadbalancer.PoolNotFound(pool_id\u003dpool[\u0027id\u0027])"},{"line_number":658,"context_line":"                pool.monitors.remove(assoc)"},{"line_number":659,"context_line":"            monitor_db \u003d self._get_resource(context, HealthMonitor, id)"},{"line_number":660,"context_line":"            monitor_db[\u0027status\u0027] \u003d constants.PENDING_DELETE"},{"line_number":661,"context_line":"            context.session.delete(monitor_db)"},{"line_number":662,"context_line":""},{"line_number":663,"context_line":"    def get_health_monitor_db(self, context, id, fields\u003dNone):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FwsI%3D","line":660,"in_reply_to":"AAAAM3%2F%2FxFc%3D","updated":"2013-01-07 11:32:25.000000000","message":"I moved all the status management code to plugin.","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"unresolved":false,"context_lines":[{"line_number":531,"context_line":"        healthmonitor \u003d self._get_resource(context, HealthMonitor, id)"},{"line_number":532,"context_line":"        return self._make_health_monitor_dict(healthmonitor, fields)"},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"    ########################################################"},{"line_number":535,"context_line":"    # Member DB access"},{"line_number":536,"context_line":"    def _make_member_dict(self, member, fields\u003dNone):"},{"line_number":537,"context_line":"        res \u003d {\u0027id\u0027: member[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAM3%2F%2FwfU%3D","line":534,"updated":"2013-01-07 14:09:24.000000000","message":"calling \"res \u003d dict(member)\" would have the same effect here","commit_id":"2ca74534c08e392bf855bafdd4f6524284cfc7e9"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":531,"context_line":"        healthmonitor \u003d self._get_resource(context, HealthMonitor, id)"},{"line_number":532,"context_line":"        return self._make_health_monitor_dict(healthmonitor, fields)"},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"    ########################################################"},{"line_number":535,"context_line":"    # Member DB access"},{"line_number":536,"context_line":"    def _make_member_dict(self, member, fields\u003dNone):"},{"line_number":537,"context_line":"        res \u003d {\u0027id\u0027: member[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAM3%2F%2Fvfg%3D","line":534,"in_reply_to":"AAAAM3%2F%2FwfU%3D","updated":"2013-01-08 02:03:56.000000000","message":"Thanks for commenting it.\nSo far I still tend to use this way to explicitly specifying the object fields and name that want to return as API output.","commit_id":"2ca74534c08e392bf855bafdd4f6524284cfc7e9"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"unresolved":false,"context_lines":[{"line_number":594,"context_line":""},{"line_number":595,"context_line":"    ########################################################"},{"line_number":596,"context_line":"    # HealthMonitor DB access"},{"line_number":597,"context_line":"    def _make_health_monitor_dict(self, health_monitor, fields\u003dNone):"},{"line_number":598,"context_line":"        res \u003d {\u0027id\u0027: health_monitor[\u0027id\u0027],"},{"line_number":599,"context_line":"               \u0027tenant_id\u0027: health_monitor[\u0027tenant_id\u0027],"},{"line_number":600,"context_line":"               \u0027type\u0027: health_monitor[\u0027type\u0027],"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAM3%2F%2FwfE%3D","line":597,"updated":"2013-01-07 14:09:24.000000000","message":"calling \"res \u003d dict(health_monitor)\" would have the same effect here","commit_id":"2ca74534c08e392bf855bafdd4f6524284cfc7e9"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":594,"context_line":""},{"line_number":595,"context_line":"    ########################################################"},{"line_number":596,"context_line":"    # HealthMonitor DB access"},{"line_number":597,"context_line":"    def _make_health_monitor_dict(self, health_monitor, fields\u003dNone):"},{"line_number":598,"context_line":"        res \u003d {\u0027id\u0027: health_monitor[\u0027id\u0027],"},{"line_number":599,"context_line":"               \u0027tenant_id\u0027: health_monitor[\u0027tenant_id\u0027],"},{"line_number":600,"context_line":"               \u0027type\u0027: health_monitor[\u0027type\u0027],"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAM3%2F%2Fvfc%3D","line":597,"in_reply_to":"AAAAM3%2F%2FwfE%3D","updated":"2013-01-08 02:03:56.000000000","message":"The same as above","commit_id":"2ca74534c08e392bf855bafdd4f6524284cfc7e9"}],"quantum/db/loadbalancer/loadbalancer_db.py":[{"author":{"_account_id":490,"name":"Sumit Naiksatam","email":"sumitnaiksatam@gmail.com","username":"snaiksat"},"unresolved":false,"context_lines":[{"line_number":35,"context_line":"from quantum.plugins.common import constants"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"class SessionPersistence(model_base.BASEV2):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FuXA%3D","line":38,"updated":"2013-01-08 17:10:27.000000000","message":"Is LOG being used?","commit_id":"bee2ca1cbab614a479d2d67c7bd2c081417d6e01"}],"quantum/extensions/loadbalancer.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"# Loadbalancer Exceptions"},{"line_number":30,"context_line":"class VipNotFound(qexception.NotFound):"},{"line_number":31,"context_line":"    message \u003d _(\"Vip %(vip_id) could not be found\")"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class PoolNotFound(qexception.NotFound):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F%2BF0%3D","line":31,"updated":"2012-12-04 15:18:33.000000000","message":"Should be %(vip_id)s","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class PoolNotFound(qexception.NotFound):"},{"line_number":35,"context_line":"    message \u003d _(\"Pool %(pool_id) could not be found\")"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class MemberNotFound(qexception.NotFound):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F%2BFw%3D","line":35,"updated":"2012-12-04 15:18:33.000000000","message":"Should be %(pool_id)s","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class MemberNotFound(qexception.NotFound):"},{"line_number":39,"context_line":"    message \u003d _(\"Member %(member_id) could not be found\")"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class HealthMonitorNotFound(qexception.NotFound):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F%2BFs%3D","line":39,"updated":"2012-12-04 15:18:33.000000000","message":"Should be %(member_id)s","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class HealthMonitorNotFound(qexception.NotFound):"},{"line_number":43,"context_line":"    message \u003d _(\"Health_monitor %(monitor__id) could not be found\")"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"class StateInvalid(qexception.QuantumException):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F%2BFo%3D","line":43,"updated":"2012-12-04 15:18:33.000000000","message":"Should be %(monitor__id)s","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"class StateInvalid(qexception.QuantumException):"},{"line_number":47,"context_line":"    message \u003d _(\"Invalid state %(state) of Loadbalancer resource %(id)\")"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"class PoolInUse(qexception.InUse):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F%2BFk%3D","line":47,"updated":"2012-12-04 15:18:33.000000000","message":"Should be %(state)s and %(id)s","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"class PoolInUse(qexception.InUse):"},{"line_number":51,"context_line":"    message \u003d _(\"Pool %(pool_id) is still in use\")"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"class PoolStatsNotFound(qexception.NotFound):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F%2BFc%3D","line":51,"updated":"2012-12-04 15:18:33.000000000","message":"Should be %(pool_id)s","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"class PoolStatsNotFound(qexception.NotFound):"},{"line_number":55,"context_line":"    message \u003d _(\"Statistics of Pool %(pool_id) could not be found\")"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"RESOURCE_ATTRIBUTE_MAP \u003d {"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F%2BFU%3D","line":55,"updated":"2012-12-04 15:18:33.000000000","message":"Should be %(pool_id)s","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":163,"context_line":"                 \u0027is_visible\u0027: True},"},{"line_number":164,"context_line":"        \u0027weight\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":165,"context_line":"                   \u0027default\u0027: 1,"},{"line_number":166,"context_line":"                   \u0027validate\u0027: {\u0027type:range\u0027: [0, 256]},"},{"line_number":167,"context_line":"                   \u0027convert_to\u0027: attr.convert_to_int,"},{"line_number":168,"context_line":"                   \u0027is_visible\u0027: True},"},{"line_number":169,"context_line":"        \u0027admin_state_up\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F%2BEo%3D","line":166,"updated":"2012-12-04 15:18:33.000000000","message":"Should this be 255?","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":182,"context_line":"                      \u0027required_by_policy\u0027: True,"},{"line_number":183,"context_line":"                      \u0027is_visible\u0027: True},"},{"line_number":184,"context_line":"        \u0027type\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":185,"context_line":"                 \u0027validate\u0027: {\u0027type:values\u0027: [\u0027PING\u0027, \u0027TCP\u0027, \u0027HTTP\u0027, \u0027HTTPS\u0027]},"},{"line_number":186,"context_line":"                 \u0027is_visible\u0027: True},"},{"line_number":187,"context_line":"        \u0027delay\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":188,"context_line":"                  \u0027convert_to\u0027: attr.convert_to_int,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F%2BEc%3D","line":185,"updated":"2012-12-04 15:18:33.000000000","message":"Is ARP or UDP valid here?","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":202,"context_line":"                     \u0027default\u0027: \u0027/\u0027,"},{"line_number":203,"context_line":"                     \u0027is_visible\u0027: True},"},{"line_number":204,"context_line":"        \u0027expected_codes\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":205,"context_line":"                           \u0027validate\u0027: {\u0027type:string\u0027: None},"},{"line_number":206,"context_line":"                           \u0027default\u0027: \u0027200\u0027,"},{"line_number":207,"context_line":"                           \u0027is_visible\u0027: True},"},{"line_number":208,"context_line":"        \u0027admin_state_up\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F%2BEU%3D","line":205,"updated":"2012-12-04 15:18:33.000000000","message":"Maybe we should check that the codes are legal. Say, for example 70000 is not relevant. I do not think that this is critical at this stage.","commit_id":"9657567c9addd590844348152b9cf2e47e723593"}],"quantum/manager.py":[{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"962d4933f3de33e883892be2f8999b318ef104d1","unresolved":false,"context_lines":[{"line_number":94,"context_line":"                        \"Description: %(desc)s\"),"},{"line_number":95,"context_line":"                      {\"type\": plugin_inst.get_plugin_type(),"},{"line_number":96,"context_line":"                       \"desc\": plugin_inst.get_plugin_description()})"},{"line_number":97,"context_line":"            LOG.debug(_(\"Successfully loaded %s plugin. Description: %s \" %"},{"line_number":98,"context_line":"                       (plugin_inst.get_plugin_type(),"},{"line_number":99,"context_line":"                        plugin_inst.get_plugin_description())))"},{"line_number":100,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMH%2F%2FwA4%3D","line":97,"updated":"2012-11-27 12:34:46.000000000","message":"that looks like merge error, please remove","commit_id":"c3ac466761033d088917e462a989336cd5e235fb"}],"quantum/plugins/services/loadbalancer/loadbalancerPlugin.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"d6a15c7fae8d4c753df1ec7b2ab37c12a5350550","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2012 OpenStack LLC."},{"line_number":4,"context_line":"# All Rights Reserved."}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAMH%2F%2Fw6s%3D","line":1,"updated":"2012-11-26 20:13:21.000000000","message":"This filename does not meet PEP8 naming conventions.","commit_id":"878f443f88c53fe8eb8c27d69e061320edc31c22"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"962d4933f3de33e883892be2f8999b318ef104d1","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from quantum.openstack.common import rpc"},{"line_number":26,"context_line":"from quantum.plugins.common import constants"},{"line_number":27,"context_line":"from quantum.plugins.services.service_base import ServicePluginBase"},{"line_number":28,"context_line":"from quantum.plugins.services.loadbalancer import loadbalancer_db"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMH%2F%2FwAc%3D","line":28,"updated":"2012-11-27 12:34:46.000000000","message":"fix order of import (should be alphabetical)","commit_id":"c3ac466761033d088917e462a989336cd5e235fb"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"962d4933f3de33e883892be2f8999b318ef104d1","unresolved":false,"context_lines":[{"line_number":30,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class LoadBalancerPlugin(loadbalancer_db.LoadBalancerPluginDb,"},{"line_number":34,"context_line":"                         db_base_plugin_v2.QuantumDbPluginV2):"},{"line_number":35,"context_line":"    \"\"\""},{"line_number":36,"context_line":"    Implementation of the Quantum Loadbalancer Service Plugin."}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMH%2F%2Fv%2Fg%3D","line":33,"updated":"2012-11-27 12:34:46.000000000","message":"As I noted in ML, I\u0027d prefer to see composition rather than inheritance.","commit_id":"c3ac466761033d088917e462a989336cd5e235fb"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":30,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class LoadBalancerPlugin(loadbalancer_db.LoadBalancerPluginDb,"},{"line_number":34,"context_line":"                         db_base_plugin_v2.QuantumDbPluginV2):"},{"line_number":35,"context_line":"    \"\"\""},{"line_number":36,"context_line":"    Implementation of the Quantum Loadbalancer Service Plugin."}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMH%2F%2FvJk%3D","line":33,"in_reply_to":"AAAAMH%2F%2Fv%2Fg%3D","updated":"2012-11-27 23:25:51.000000000","message":"Will change it in the updated review","commit_id":"c3ac466761033d088917e462a989336cd5e235fb"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"962d4933f3de33e883892be2f8999b318ef104d1","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class LoadBalancerPlugin(loadbalancer_db.LoadBalancerPluginDb,"},{"line_number":34,"context_line":"                         db_base_plugin_v2.QuantumDbPluginV2):"},{"line_number":35,"context_line":"    \"\"\""},{"line_number":36,"context_line":"    Implementation of the Quantum Loadbalancer Service Plugin."},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMH%2F%2Fv%2Fk%3D","line":34,"updated":"2012-11-27 12:34:46.000000000","message":"which methods do you need from QuantumDbPluginV2?\nIt doesn\u0027t look like you\u0027re using anything from it.","commit_id":"c3ac466761033d088917e462a989336cd5e235fb"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class LoadBalancerPlugin(loadbalancer_db.LoadBalancerPluginDb,"},{"line_number":34,"context_line":"                         db_base_plugin_v2.QuantumDbPluginV2):"},{"line_number":35,"context_line":"    \"\"\""},{"line_number":36,"context_line":"    Implementation of the Quantum Loadbalancer Service Plugin."},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMH%2F%2FvJY%3D","line":34,"in_reply_to":"AAAAMH%2F%2Fv%2Fk%3D","updated":"2012-11-27 23:25:51.000000000","message":"Actually loadBalancerPluginDb will use the methods from QuantumDbPluginV2.  In the updated model as we discussed, loadBalancerPluginDb will inherit from QuantumDbPluginV2.","commit_id":"c3ac466761033d088917e462a989336cd5e235fb"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":34,"context_line":"class LoadBalancerPlugin(LoadBalancerPluginBase):"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    \"\"\""},{"line_number":37,"context_line":"    Implementation of the Quantum Loadbalancer Service Plugin."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    This class manages the workflow of LBaaS request/response."},{"line_number":40,"context_line":"    Most DB related works are implemented in class"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6ZE%3D","line":37,"updated":"2012-12-07 18:21:45.000000000","message":"I will consider rephrasing slightly this description as this class does not implement a plugin - but the plugin interface.\n\nThis is a subtle but important difference.","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":46,"context_line":"        \"\"\""},{"line_number":47,"context_line":"        Do the initialization for the loadbalancer service plugin here."},{"line_number":48,"context_line":"        \"\"\""},{"line_number":49,"context_line":"        self.pluginDb \u003d loadbalancer_db.LoadBalancerPluginDb()"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        # TODO: we probably need to setup RPC channel (to talk to LbAgent) here"},{"line_number":52,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6Us%3D","line":49,"updated":"2012-12-07 18:21:45.000000000","message":"Question: why did you chose for encapsulation patter instead of implementing db logic in a class inheriting from LoadBalancerPluginBase?","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":48,"context_line":"        \"\"\""},{"line_number":49,"context_line":"        self.pluginDb \u003d loadbalancer_db.LoadBalancerPluginDb()"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        # TODO: we probably need to setup RPC channel (to talk to LbAgent) here"},{"line_number":52,"context_line":"        pass"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def get_plugin_type(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6ZI%3D","line":51,"updated":"2012-12-07 18:21:45.000000000","message":"This will be up to the particular plugin implementation","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":55,"context_line":"        return constants.LOAD_BALANCER"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def get_plugin_description(self):"},{"line_number":58,"context_line":"        return \"Quantum LoadBalancer Service Plugin\""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def create_vip(self, context, vip):"},{"line_number":61,"context_line":"        v \u003d self.pluginDb.create_vip(context, vip)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6ZA%3D","line":58,"updated":"2012-12-07 18:21:45.000000000","message":"This could be left to the particular implementation as well.","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def create_vip(self, context, vip):"},{"line_number":61,"context_line":"        v \u003d self.pluginDb.create_vip(context, vip)"},{"line_number":62,"context_line":"        # TODO# notify lbagent"},{"line_number":63,"context_line":"        LOG.debug(\"Create vip: %s\" % v[\u0027id\u0027])"},{"line_number":64,"context_line":"        return v"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6Y8%3D","line":62,"updated":"2012-12-07 18:21:45.000000000","message":"You do not need another # after the todo, but when you use a TODO you might want to add your lpname to it.\nFor instance: TODO(lcui)\n\nAlso, I think this class should a pure db management class. The notification will be sent by the Controller object which embeds this class or a class deriver from this one. You\u0027ll get them for free.","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":60,"context_line":"    def create_vip(self, context, vip):"},{"line_number":61,"context_line":"        v \u003d self.pluginDb.create_vip(context, vip)"},{"line_number":62,"context_line":"        # TODO# notify lbagent"},{"line_number":63,"context_line":"        LOG.debug(\"Create vip: %s\" % v[\u0027id\u0027])"},{"line_number":64,"context_line":"        return v"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def update_vip(self, context, id, vip):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F%2BEA%3D","line":63,"updated":"2012-12-04 15:18:33.000000000","message":"It would be ideal if you are adding new logs or messages to internationalize it. This will help translators in the future.","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":60,"context_line":"    def create_vip(self, context, vip):"},{"line_number":61,"context_line":"        v \u003d self.pluginDb.create_vip(context, vip)"},{"line_number":62,"context_line":"        # TODO# notify lbagent"},{"line_number":63,"context_line":"        LOG.debug(\"Create vip: %s\" % v[\u0027id\u0027])"},{"line_number":64,"context_line":"        return v"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def update_vip(self, context, id, vip):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6Ys%3D","line":63,"in_reply_to":"AAAAMX%2F%2F%2BEA%3D","updated":"2012-12-07 18:21:45.000000000","message":"I have not looked in detail, but it seems Openstack official policy that ALL string, no matter when and how they\u0027re used should be internationalizable\n\nTo this aim you\u0027ll need to emded the string, and not the format elements in gettext \u0027_\u0027 call.\nExample: LOG.debug(_(\"Create vip: %s\"), v[\u0027id])\n\nI am not sure whether it would ever make sense to translate log statements, especially the DEBUG ones, but I\u0027m not in a position to comment or object.","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":73,"context_line":"        self.pluginDb.delete_vip(context, id)"},{"line_number":74,"context_line":"        # TODO# notify lbagent"},{"line_number":75,"context_line":"        LOG.debug(\"Delete vip: %s\", id)"},{"line_number":76,"context_line":"        return"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def get_vip(self, context, id, fields\u003dNone):"},{"line_number":79,"context_line":"        res \u003d self.pluginDb.get_vip(context, id, fields)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F%2BD8%3D","line":76,"updated":"2012-12-04 15:18:33.000000000","message":"you do not need the return","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":81,"context_line":"        return res"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def get_vips(self, context, filters\u003dNone, fields\u003dNone):"},{"line_number":84,"context_line":"        res \u003d self.pluginDb.get_vips(contxt, filters, fields)"},{"line_number":85,"context_line":"        LOG.debug(\"Get vips\")"},{"line_number":86,"context_line":"        return res"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F4GM%3D","line":84,"updated":"2012-12-11 12:14:34.000000000","message":"parameter name \u0027contxt\u0027 is misspelled, should be \u0027context\u0027","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":101,"context_line":"        self.pluginDb.delete_pool(context, id)"},{"line_number":102,"context_line":"        # TODO# notify lbagent"},{"line_number":103,"context_line":"        LOG.debug(\"Delete pool: %s\", id)"},{"line_number":104,"context_line":"        return"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def get_pool(self, context, id, fields\u003dNone):"},{"line_number":107,"context_line":"        res \u003d self.pluginDb.get_pool(context, id, fields)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F%2BD4%3D","line":104,"updated":"2012-12-04 15:18:33.000000000","message":"you do not need the return","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":134,"context_line":"        self.pluginDb.delete_member(context, id)"},{"line_number":135,"context_line":"        # TODO# notify lbagent"},{"line_number":136,"context_line":"        LOG.debug(\"Delete member: %s\", id)"},{"line_number":137,"context_line":"        return"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def get_member(self, context, id, fields\u003dNone):"},{"line_number":140,"context_line":"        res \u003d self.pluginDb.get_member(context, id, fields)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F%2BD0%3D","line":137,"updated":"2012-12-04 15:18:33.000000000","message":"you do not need the return","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":162,"context_line":"        self.pluginDb.delete_health_monitor(context, id)"},{"line_number":163,"context_line":"        # TODO# notify lbagent"},{"line_number":164,"context_line":"        LOG.debug(\"Delete health_monitor: %s\", id)"},{"line_number":165,"context_line":"        return"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def add_health_monitors(self, context, pool_id, body):"},{"line_number":168,"context_line":"        res \u003d self.pluginDb.add_health_monitors(context, pool_id, body)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F%2BDw%3D","line":165,"updated":"2012-12-04 15:18:33.000000000","message":"you do not need the return","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":170,"context_line":"        return res"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def delete_health_monitors(self, context, pool_id, body):"},{"line_number":173,"context_line":"        # TODO"},{"line_number":174,"context_line":"        pass"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def get_health_monitor(self, context, id, fields\u003dNone):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6YY%3D","line":173,"updated":"2012-12-07 18:21:45.000000000","message":"# TODO(lcui)","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        # TODO: we probably need to setup RPC channel (to talk to LbAgent) here"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def get_plugin_type(self):"},{"line_number":57,"context_line":"        return constants.LOADBALANCER"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def get_plugin_description(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2Fz%2Bw%3D","line":56,"updated":"2012-12-14 15:28:44.000000000","message":"get_plugin_type() and get_plugin_description() are already implemented in the base class","commit_id":"2029ec6e616c498a681e2534053cff23803bb575"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from quantum.common import constants as q_const"},{"line_number":20,"context_line":"from quantum.common import exceptions as q_exc"},{"line_number":21,"context_line":"from quantum.db import db_base_plugin_v2"},{"line_number":22,"context_line":"from quantum.db import api as qdbapi"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F6SU%3D","line":19,"updated":"2012-12-21 11:34:58.000000000","message":"unused","commit_id":"b9cd0af2ae9d1372fc589ea5536c492093ef8e84"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from quantum.common import constants as q_const"},{"line_number":20,"context_line":"from quantum.common import exceptions as q_exc"},{"line_number":21,"context_line":"from quantum.db import db_base_plugin_v2"},{"line_number":22,"context_line":"from quantum.db import api as qdbapi"},{"line_number":23,"context_line":"from quantum.db import model_base"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F6SQ%3D","line":20,"updated":"2012-12-21 11:34:58.000000000","message":"unused","commit_id":"b9cd0af2ae9d1372fc589ea5536c492093ef8e84"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from quantum.common import constants as q_const"},{"line_number":20,"context_line":"from quantum.common import exceptions as q_exc"},{"line_number":21,"context_line":"from quantum.db import db_base_plugin_v2"},{"line_number":22,"context_line":"from quantum.db import api as qdbapi"},{"line_number":23,"context_line":"from quantum.db import model_base"},{"line_number":24,"context_line":"from quantum.db.lb import loadbalancer_db"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F6SM%3D","line":21,"updated":"2012-12-21 11:34:58.000000000","message":"unused","commit_id":"b9cd0af2ae9d1372fc589ea5536c492093ef8e84"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":23,"context_line":"from quantum.db import model_base"},{"line_number":24,"context_line":"from quantum.db.lb import loadbalancer_db"},{"line_number":25,"context_line":"from quantum.extensions.loadbalancer import LoadBalancerPluginBase"},{"line_number":26,"context_line":"from quantum.openstack.common import cfg"},{"line_number":27,"context_line":"from quantum.openstack.common import context"},{"line_number":28,"context_line":"from quantum.openstack.common import log as logging"},{"line_number":29,"context_line":"from quantum.openstack.common import rpc"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F6SI%3D","line":26,"updated":"2012-12-21 11:34:58.000000000","message":"unused","commit_id":"b9cd0af2ae9d1372fc589ea5536c492093ef8e84"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":24,"context_line":"from quantum.db.lb import loadbalancer_db"},{"line_number":25,"context_line":"from quantum.extensions.loadbalancer import LoadBalancerPluginBase"},{"line_number":26,"context_line":"from quantum.openstack.common import cfg"},{"line_number":27,"context_line":"from quantum.openstack.common import context"},{"line_number":28,"context_line":"from quantum.openstack.common import log as logging"},{"line_number":29,"context_line":"from quantum.openstack.common import rpc"},{"line_number":30,"context_line":"from quantum.plugins.common import constants"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F6SE%3D","line":27,"updated":"2012-12-21 11:34:58.000000000","message":"unused","commit_id":"b9cd0af2ae9d1372fc589ea5536c492093ef8e84"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":26,"context_line":"from quantum.openstack.common import cfg"},{"line_number":27,"context_line":"from quantum.openstack.common import context"},{"line_number":28,"context_line":"from quantum.openstack.common import log as logging"},{"line_number":29,"context_line":"from quantum.openstack.common import rpc"},{"line_number":30,"context_line":"from quantum.plugins.common import constants"},{"line_number":31,"context_line":"from quantum.plugins.services.service_base import ServicePluginBase"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F6R8%3D","line":29,"updated":"2012-12-21 11:34:58.000000000","message":"unused (however will be most probably added by agent\u0026rpc code)","commit_id":"b9cd0af2ae9d1372fc589ea5536c492093ef8e84"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":28,"context_line":"from quantum.openstack.common import log as logging"},{"line_number":29,"context_line":"from quantum.openstack.common import rpc"},{"line_number":30,"context_line":"from quantum.plugins.common import constants"},{"line_number":31,"context_line":"from quantum.plugins.services.service_base import ServicePluginBase"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F6R4%3D","line":31,"updated":"2012-12-21 11:34:58.000000000","message":"unused","commit_id":"b9cd0af2ae9d1372fc589ea5536c492093ef8e84"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":28,"context_line":"from quantum.openstack.common import log as logging"},{"line_number":29,"context_line":"from quantum.openstack.common import rpc"},{"line_number":30,"context_line":"from quantum.plugins.common import constants"},{"line_number":31,"context_line":"from quantum.plugins.services.service_base import ServicePluginBase"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F3DA%3D","line":31,"in_reply_to":"AAAAM3%2F%2F6R4%3D","updated":"2012-12-31 01:19:25.000000000","message":"Thank IIya. Remove all the unused references as you suggested.","commit_id":"b9cd0af2ae9d1372fc589ea5536c492093ef8e84"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def delete_pool_health_monitor(self, context, id, pool_id):"},{"line_number":142,"context_line":"        self.delete_pool_health_monitor_db(context, id, pool_id)"},{"line_number":143,"context_line":"        LOG.debug(_(\"Delete health_monitor %s of pool: %s\"), (id, pool_id))"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    def get_member(self, context, id, fields\u003dNone):"},{"line_number":146,"context_line":"        res \u003d self.get_member_db(context, id, fields)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F6Sg%3D","line":143,"updated":"2012-12-21 11:34:58.000000000","message":"If the format string has more than 1 argument it is required for them to be named (this simplifies translation since allows to re-order arguments). So this line should be re-written as following: \nLOG.debug(_(\"Delete health_monitor %(id)s of pool: %(pool_id)s\"), {\u0027id\u0027: id, \u0027pool_id\u0027: pool_id})","commit_id":"b9cd0af2ae9d1372fc589ea5536c492093ef8e84"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def delete_pool_health_monitor(self, context, id, pool_id):"},{"line_number":142,"context_line":"        self.delete_pool_health_monitor_db(context, id, pool_id)"},{"line_number":143,"context_line":"        LOG.debug(_(\"Delete health_monitor %s of pool: %s\"), (id, pool_id))"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    def get_member(self, context, id, fields\u003dNone):"},{"line_number":146,"context_line":"        res \u003d self.get_member_db(context, id, fields)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F3C8%3D","line":143,"in_reply_to":"AAAAM3%2F%2F6Sg%3D","updated":"2012-12-31 01:19:25.000000000","message":"Good suggestion.","commit_id":"b9cd0af2ae9d1372fc589ea5536c492093ef8e84"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":53,"context_line":"        return \"Quantum LoadBalancer Service Plugin\""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def create_vip(self, context, vip):"},{"line_number":56,"context_line":"        v \u003d self.create_vip_db(context, vip)"},{"line_number":57,"context_line":"        LOG.debug(_(\"Create vip: %s\") % v[\u0027id\u0027])"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        # If we adopt asynchronous mode, this method should return immediately"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FxF8%3D","line":56,"updated":"2013-01-06 22:32:19.000000000","message":"Instead of having all these xxx_yyy_db methods you can probably just define create_vip and similar methods in the base class and then override them here to add plugin specific behaviour","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":53,"context_line":"        return \"Quantum LoadBalancer Service Plugin\""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def create_vip(self, context, vip):"},{"line_number":56,"context_line":"        v \u003d self.create_vip_db(context, vip)"},{"line_number":57,"context_line":"        LOG.debug(_(\"Create vip: %s\") % v[\u0027id\u0027])"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        # If we adopt asynchronous mode, this method should return immediately"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2Fwr4%3D","line":56,"in_reply_to":"AAAAM3%2F%2FxF8%3D","updated":"2013-01-07 11:32:25.000000000","message":"Right. Some historical reason.  Originally I have discussed with Eugene to not inherit from loadbalancer_db module.  \nNow I\u0027d better to use override technical.","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def create_vip(self, context, vip):"},{"line_number":56,"context_line":"        v \u003d self.create_vip_db(context, vip)"},{"line_number":57,"context_line":"        LOG.debug(_(\"Create vip: %s\") % v[\u0027id\u0027])"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        # If we adopt asynchronous mode, this method should return immediately"},{"line_number":60,"context_line":"        # and let client to query the object status. The plugin will listen on"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FwtA%3D","line":57,"updated":"2013-01-07 11:03:13.000000000","message":"Since the methods in LoadBalancerPlugin have a constant pattern of calling the super class.\n Example:\n         def update_vip(self, context, id, vip):\n             v \u003d self.update_vip_db(context, id, vip)\n             LOG.debug(_(\"Update vip: %s\"), v[\u0027id\u0027])\n             return v\n I think that a decorator would be a clean solution here.\n Below is a decorator example that can be used in order to forward calls to the Parent (loadbalancer_db.LoadBalancerPluginDb)\n\n The example below works - you can try it.\n### code below ###\nclass JustDoItFunction(object):\n    def __init__(self, function):\n        self.function \u003d function\n        self.parent \u003d Parent()\n\n    def _just_do_it(self, *arguments, **namedArguments):\n        print \"LOG \u003e\u003e Calling %s with arguments %s and named arguments %s\" %\\\n                      (self.function.func_name, arguments, namedArguments)\n        method_name \u003d self.function.__name__[5:] # 5 is len(\"just_\")\n        return getattr(self.parent, method_name)(*arguments)\n\ndef just_do_it(function):\n    return JustDoItFunction(function)._just_do_it\n\n   \n\nclass Parent(): # this is loadbalancer_db.LoadBalancerPluginDb\n    def doit_a(self,a,b):\n        return a + b\n    def doit_b(self,a,b,c):\n        return a + b + c\n        \n        \nclass Child(Parent): # this is LoadBalancerPlugin\n    @just_do_it\n    def just_doit_a(self,a,b):\n        pass\n    @just_do_it        \n    def just_doit_b(self,a,b,c):\n        pass        \ndef main():\n    child \u003d Child()\n    result \u003d child.just_doit_a(12,45)\n    print \"The result:\" , result\n        \nif __name__ \u003d\u003d \"__main__\":\n    main()","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def create_vip(self, context, vip):"},{"line_number":56,"context_line":"        v \u003d self.create_vip_db(context, vip)"},{"line_number":57,"context_line":"        LOG.debug(_(\"Create vip: %s\") % v[\u0027id\u0027])"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        # If we adopt asynchronous mode, this method should return immediately"},{"line_number":60,"context_line":"        # and let client to query the object status. The plugin will listen on"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2Fwr0%3D","line":57,"in_reply_to":"AAAAM3%2F%2FwtA%3D","updated":"2013-01-07 11:32:25.000000000","message":"Thanks Avishay. This looks like a ideal solution. But I didn\u0027t see any places else in quantum use it yet. Let me first do as Salvatore said, to call parent method directly.","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def update_pool(self, context, id, pool):"},{"line_number":94,"context_line":"        p \u003d self.update_pool_db(context, id, pool)"},{"line_number":95,"context_line":"        # TODO# notify lbagent"},{"line_number":96,"context_line":"        LOG.debug(_(\"Update pool: %s\"), p[\u0027id\u0027])"},{"line_number":97,"context_line":"        return p"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FxFw%3D","line":95,"updated":"2013-01-06 22:32:19.000000000","message":"unnecessary \u0027#\u0027 after TODO","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def delete_pool(self, context, id):"},{"line_number":100,"context_line":"        self.delete_pool_db(context, id)"},{"line_number":101,"context_line":"        # TODO# notify lbagent"},{"line_number":102,"context_line":"        LOG.debug(_(\"Delete pool: %s\"), id)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def get_pool(self, context, id, fields\u003dNone):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FxFs%3D","line":101,"updated":"2013-01-06 22:32:19.000000000","message":"same as line 95","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"}],"quantum/plugins/services/loadbalancer/loadbalancer_db.py":[{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"\"\"\""},{"line_number":2,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Copyright 2012 OpenStack LLC.  All rights reserved"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2FsSg%3D","line":1,"updated":"2012-11-30 02:00:49.000000000","message":"delete this line","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"\"\"\""},{"line_number":2,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Copyright 2012 OpenStack LLC.  All rights reserved"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2Fruw%3D","line":1,"in_reply_to":"AAAAMH%2F%2FsSg%3D","updated":"2012-11-30 17:04:36.000000000","message":"will fix it.","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":17,"context_line":"#"},{"line_number":18,"context_line":"# @author: Leon Cui, VMware, Inc"},{"line_number":19,"context_line":"#"},{"line_number":20,"context_line":"\"\"\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import netaddr"},{"line_number":23,"context_line":"import sqlalchemy as sa"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2FsSc%3D","line":20,"updated":"2012-11-30 02:00:49.000000000","message":"delete this line","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":17,"context_line":"#"},{"line_number":18,"context_line":"# @author: Leon Cui, VMware, Inc"},{"line_number":19,"context_line":"#"},{"line_number":20,"context_line":"\"\"\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import netaddr"},{"line_number":23,"context_line":"import sqlalchemy as sa"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2Fru4%3D","line":20,"in_reply_to":"AAAAMH%2F%2FsSc%3D","updated":"2012-11-30 17:04:36.000000000","message":"will fix it.","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":46,"context_line":"                       sa.ForeignKey(\"vips.id\"),"},{"line_number":47,"context_line":"                       primary_key\u003dTrue)"},{"line_number":48,"context_line":"    type \u003d sa.Column(sa.String(16))"},{"line_number":49,"context_line":"    cookie_name \u003d sa.Column(sa.String(64))"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"class Vip(model_base.BASEV2, models_v2.HasId, models_v2.HasTenant):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F%2BDo%3D","line":49,"updated":"2012-12-04 15:18:33.000000000","message":"Are you sure you want to limit this to 64 characters?","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":46,"context_line":"                       sa.ForeignKey(\"vips.id\"),"},{"line_number":47,"context_line":"                       primary_key\u003dTrue)"},{"line_number":48,"context_line":"    type \u003d sa.Column(sa.String(16))"},{"line_number":49,"context_line":"    cookie_name \u003d sa.Column(sa.String(64))"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"class Vip(model_base.BASEV2, models_v2.HasId, models_v2.HasTenant):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F8dg%3D","line":49,"in_reply_to":"AAAAMX%2F%2F%2BDo%3D","updated":"2012-12-05 18:12:47.000000000","message":"Right, I need to enlarge it to a reasonable length, say 1024.  Though HTTP cookie spec says 4K is a max len this is the cookie that LB will insert. We don\u0027t need a such long limitation.","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":54,"context_line":"    name \u003d sa.Column(sa.String(255))"},{"line_number":55,"context_line":"    description \u003d sa.Column(sa.String(255))"},{"line_number":56,"context_line":"    network_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\"networks.id\"),"},{"line_number":57,"context_line":"                           nullable\u003dFalse)"},{"line_number":58,"context_line":"    address \u003d sa.Column(sa.String(64))"},{"line_number":59,"context_line":"    port \u003d sa.Column(sa.Integer, nullable\u003dFalse)"},{"line_number":60,"context_line":"    protocol \u003d sa.Column(sa.String(64), nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6X8%3D","line":57,"updated":"2012-12-07 18:21:45.000000000","message":"This foreign key constraint will require us to add a check on delete network for raising a 409 if there are VIPs on it.\nAs it is, this will raise a 500, which is never desired (and the user will have little info on what\u0027s going on in the error message).","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":58,"context_line":"    address \u003d sa.Column(sa.String(64))"},{"line_number":59,"context_line":"    port \u003d sa.Column(sa.Integer, nullable\u003dFalse)"},{"line_number":60,"context_line":"    protocol \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":61,"context_line":"    pool_id \u003d sa.Column(sa.String(36), nullable\u003dFalse)"},{"line_number":62,"context_line":"    session_persistence \u003d orm.relationship(SessionPersistence,"},{"line_number":63,"context_line":"                                           uselist\u003dFalse,"},{"line_number":64,"context_line":"                                           backref\u003d\"vips\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6WQ%3D","line":61,"updated":"2012-12-07 18:21:45.000000000","message":"Vip has a pool_id and pool has a vip_id. Can we just have one of the two?\n\nI think this is already being discussed somewhere else; so perhaps just let me know what\u0027s your opinion.\n\nAlso, consider adding orm.relationship from Vip to Pool in order to be able to load dependent resources just by accessing an attribute","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":73,"context_line":"    name \u003d sa.Column(sa.String(255))"},{"line_number":74,"context_line":"    description \u003d sa.Column(sa.String(255))"},{"line_number":75,"context_line":"    network_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\"networks.id\"),"},{"line_number":76,"context_line":"                           nullable\u003dFalse)"},{"line_number":77,"context_line":"    protocol \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":78,"context_line":"    lb_method \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":79,"context_line":"    status \u003d sa.Column(sa.String(16), nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6V4%3D","line":76,"updated":"2012-12-07 18:21:45.000000000","message":"Same comment on foreign key.\nI know you\u0027re just implementing the API here - but I don\u0027t see the point of binding a pool to a network","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":77,"context_line":"    protocol \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":78,"context_line":"    lb_method \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":79,"context_line":"    status \u003d sa.Column(sa.String(16), nullable\u003dFalse)"},{"line_number":80,"context_line":"    admin_state_up \u003d sa.Column(sa.Boolean(), nullable\u003dFalse)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"class Member(model_base.BASEV2, models_v2.HasId, models_v2.HasTenant):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6Vw%3D","line":80,"updated":"2012-12-07 18:21:45.000000000","message":"consider orm.relationship from Pool to Member\nalso from Pool to HealthMonitor","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":83,"context_line":"class Member(model_base.BASEV2, models_v2.HasId, models_v2.HasTenant):"},{"line_number":84,"context_line":"    \"\"\"Represents a v2 quantum loadbalancer member.\"\"\""},{"line_number":85,"context_line":"    pool_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\"pools.id\"),"},{"line_number":86,"context_line":"                        nullable\u003dFalse)"},{"line_number":87,"context_line":"    address \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":88,"context_line":"    port \u003d sa.Column(sa.Integer, nullable\u003dFalse)"},{"line_number":89,"context_line":"    weight \u003d sa.Column(sa.Integer, nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6Vs%3D","line":86,"updated":"2012-12-07 18:21:45.000000000","message":"The API spec does not state this clearly, but it seems that if a pool is removed, all the members should go as well. In that case this relationship should be a cascade.\n\nSee: http://wiki.openstack.org/Quantum/LBaaS/API_1.0#Remove_a_Pool","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":94,"context_line":"class HealthMonitor(model_base.BASEV2, models_v2.HasId, models_v2.HasTenant):"},{"line_number":95,"context_line":"    \"\"\"Represents a v2 quantum loadbalancer healthmonitor.\"\"\""},{"line_number":96,"context_line":"    pool_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\"pools.id\"),"},{"line_number":97,"context_line":"                        nullable\u003dTrue)"},{"line_number":98,"context_line":"    type \u003d sa.Column(sa.String(32), nullable\u003dFalse)"},{"line_number":99,"context_line":"    delay \u003d sa.Column(sa.Integer, nullable\u003dFalse)"},{"line_number":100,"context_line":"    timeout \u003d sa.Column(sa.Integer, nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6VU%3D","line":97,"updated":"2012-12-07 18:21:45.000000000","message":"This appear to clash with the very long discussion we had on the mailing list about health monitors being first class resources.\n\nI was expecting a N:M relationship with Pool. Seems 1:N instead here","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":99,"context_line":"    delay \u003d sa.Column(sa.Integer, nullable\u003dFalse)"},{"line_number":100,"context_line":"    timeout \u003d sa.Column(sa.Integer, nullable\u003dFalse)"},{"line_number":101,"context_line":"    max_retries \u003d sa.Column(sa.Integer, nullable\u003dFalse)"},{"line_number":102,"context_line":"    http_method \u003d sa.Column(sa.String(16))"},{"line_number":103,"context_line":"    url_path \u003d sa.Column(sa.String(255))"},{"line_number":104,"context_line":"    expected_codes \u003d sa.Column(sa.String(64))"},{"line_number":105,"context_line":"    status \u003d sa.Column(sa.String(16), nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6VE%3D","line":102,"updated":"2012-12-07 18:21:45.000000000","message":"Nit pick. I think the longest method name are OPTIONS and CONNECT, whose length is 7.\nAlso, we just use POST, PUT, DELETE, and GET.","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":109,"context_line":"class PoolStatistics(model_base.BASEV2):"},{"line_number":110,"context_line":"    \"\"\"Represents pool statistics \"\"\""},{"line_number":111,"context_line":"    pool_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\"pools.id\"),"},{"line_number":112,"context_line":"                        primary_key\u003dTrue)"},{"line_number":113,"context_line":"    bytes_in \u003d sa.Column(sa.Integer, nullable\u003dFalse)"},{"line_number":114,"context_line":"    bytes_out \u003d sa.Column(sa.Integer, nullable\u003dFalse)"},{"line_number":115,"context_line":"    active_connections \u003d sa.Column(sa.Integer, nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6U8%3D","line":112,"updated":"2012-12-07 18:21:45.000000000","message":"I think we might use cascading on delete here","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":116,"context_line":"    total_connections \u003d sa.Column(sa.Integer, nullable\u003dFalse)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"class LoadBalancerPluginDb(db_base_plugin_v2.QuantumDbPluginV2):"},{"line_number":120,"context_line":"    \"\"\""},{"line_number":121,"context_line":"    A class that wraps the implementation of the Quantum"},{"line_number":122,"context_line":"    loadbalancer plugin database access interface using SQLAlchemy models."}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6Uo%3D","line":119,"updated":"2012-12-07 18:21:45.000000000","message":"I understand why you\u0027re inheriting from here, but I reckon you\u0027re bringing in this class much more than you might want.\nFor instance, do we really need the methods for managing networks, ports, and subnets?","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"class LoadBalancerPluginDb(db_base_plugin_v2.QuantumDbPluginV2):"},{"line_number":120,"context_line":"    \"\"\""},{"line_number":121,"context_line":"    A class that wraps the implementation of the Quantum"},{"line_number":122,"context_line":"    loadbalancer plugin database access interface using SQLAlchemy models."},{"line_number":123,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F%2BDY%3D","line":120,"updated":"2012-12-04 15:18:33.000000000","message":"Question - it is not clear if the LBaaS will have its own database? Did I miss something here?\nIf the base plugin does not have a database then this will not be persistent.","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"class LoadBalancerPluginDb(db_base_plugin_v2.QuantumDbPluginV2):"},{"line_number":120,"context_line":"    \"\"\""},{"line_number":121,"context_line":"    A class that wraps the implementation of the Quantum"},{"line_number":122,"context_line":"    loadbalancer plugin database access interface using SQLAlchemy models."},{"line_number":123,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F8dU%3D","line":120,"in_reply_to":"AAAAMX%2F%2F%2BDY%3D","updated":"2012-12-05 18:12:47.000000000","message":"At this moment LBaaS will use the same DB of core. I suppose the db is created and passed into the plugin as \"context\".  correct me if I\u0027m wrong.","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"class LoadBalancerPluginDb(db_base_plugin_v2.QuantumDbPluginV2):"},{"line_number":120,"context_line":"    \"\"\""},{"line_number":121,"context_line":"    A class that wraps the implementation of the Quantum"},{"line_number":122,"context_line":"    loadbalancer plugin database access interface using SQLAlchemy models."},{"line_number":123,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6U0%3D","line":120,"in_reply_to":"AAAAMX%2F%2F8dU%3D","updated":"2012-12-07 18:21:45.000000000","message":"Agree with Leon here.\nSplitting databases in a way that you can have two different engines for core and LBaaS will require infrastructure work beyond the scope of this patch.","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":135,"context_line":"            elif model \u003d\u003d \"HealthMonitor\":"},{"line_number":136,"context_line":"                raise loadbalancer.HealthMonitorNotFound(monitor_id\u003did)"},{"line_number":137,"context_line":"            else:"},{"line_number":138,"context_line":"                raise"},{"line_number":139,"context_line":"        except exc.MultipleResultsFound:"},{"line_number":140,"context_line":"            LOG.error(\u0027Multiple match for %s\u0027 % id)"},{"line_number":141,"context_line":"            if model \u003d\u003d \"Vip\":"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6UY%3D","line":138,"updated":"2012-12-07 18:21:45.000000000","message":"Cascaded ifs are ugly and not easy to maintain. Consider creating a dict which will map model to NotFound exception and just raise the corresponding value from the dict for the model passed as a parameter.","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":136,"context_line":"                raise loadbalancer.HealthMonitorNotFound(monitor_id\u003did)"},{"line_number":137,"context_line":"            else:"},{"line_number":138,"context_line":"                raise"},{"line_number":139,"context_line":"        except exc.MultipleResultsFound:"},{"line_number":140,"context_line":"            LOG.error(\u0027Multiple match for %s\u0027 % id)"},{"line_number":141,"context_line":"            if model \u003d\u003d \"Vip\":"},{"line_number":142,"context_line":"                raise loadbalancer.VipNotFound(vip_id\u003did)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6Uk%3D","line":139,"updated":"2012-12-07 18:21:45.000000000","message":"You\u0027re querying by primary key... (I know you\u0027ve just probably done c\u0026p from the base class where this is wrong too)","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":137,"context_line":"            else:"},{"line_number":138,"context_line":"                raise"},{"line_number":139,"context_line":"        except exc.MultipleResultsFound:"},{"line_number":140,"context_line":"            LOG.error(\u0027Multiple match for %s\u0027 % id)"},{"line_number":141,"context_line":"            if model \u003d\u003d \"Vip\":"},{"line_number":142,"context_line":"                raise loadbalancer.VipNotFound(vip_id\u003did)"},{"line_number":143,"context_line":"            elif model \u003d\u003d \"Pool\":"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F%2BDg%3D","line":140,"updated":"2012-12-04 15:18:33.000000000","message":"Please have the text internationalized. Can you please do it for all new messages added","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":137,"context_line":"            else:"},{"line_number":138,"context_line":"                raise"},{"line_number":139,"context_line":"        except exc.MultipleResultsFound:"},{"line_number":140,"context_line":"            LOG.error(\u0027Multiple match for %s\u0027 % id)"},{"line_number":141,"context_line":"            if model \u003d\u003d \"Vip\":"},{"line_number":142,"context_line":"                raise loadbalancer.VipNotFound(vip_id\u003did)"},{"line_number":143,"context_line":"            elif model \u003d\u003d \"Pool\":"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F8dc%3D","line":140,"in_reply_to":"AAAAMX%2F%2F%2BDg%3D","updated":"2012-12-05 18:12:47.000000000","message":"Will fix it.","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":151,"context_line":"        return r"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    ########################################################"},{"line_number":154,"context_line":"    # VIP DB access"},{"line_number":155,"context_line":"    def _make_vip_dict(self, vip, fields\u003dNone):"},{"line_number":156,"context_line":"        res \u003d {\u0027id\u0027: vip[\u0027id\u0027],"},{"line_number":157,"context_line":"               \u0027tenant_id\u0027: vip[\u0027tenant_id\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6UU%3D","line":154,"updated":"2012-12-07 18:21:45.000000000","message":"I think this kind of comments are forbidden by style rules\n\nBut don\u0027t trust me for anything style-related","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":165,"context_line":"               \u0027connection_limit\u0027: vip[\u0027connection_limit\u0027],"},{"line_number":166,"context_line":"               \u0027admin_state_up\u0027: vip[\u0027admin_state_up\u0027],"},{"line_number":167,"context_line":"               \u0027status\u0027: vip[\u0027status\u0027]}"},{"line_number":168,"context_line":"        if vip[\u0027session_persistence\u0027]:"},{"line_number":169,"context_line":"            res[\u0027session_persistence\u0027] \u003d \\"},{"line_number":170,"context_line":"                {\u0027type\u0027: vip[\u0027session_persistence\u0027][\u0027type\u0027],"},{"line_number":171,"context_line":"                 \u0027cookie_name\u0027: vip[\u0027session_persistence\u0027][\u0027cookie_name\u0027]}"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6UQ%3D","line":168,"updated":"2012-12-07 18:21:45.000000000","message":"Can we use only one session persistence record per VIP? So why don\u0027t merge the two models?","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":184,"context_line":"            sess_qry \u003d context.session.query(SessionPersistence)"},{"line_number":185,"context_line":"            sess_qry.filter_by(vip_id\u003dvip_id).delete()"},{"line_number":186,"context_line":"            if info:"},{"line_number":187,"context_line":"                sesspersist_db \u003d \\"},{"line_number":188,"context_line":"                    SessionPersistence(type\u003dinfo[\u0027type\u0027],"},{"line_number":189,"context_line":"                                       cookie_name\u003dinfo[\u0027cookie_name\u0027],"},{"line_number":190,"context_line":"                                       vip_id\u003dvip_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F%2BDU%3D","line":187,"updated":"2012-12-04 15:18:33.000000000","message":"is it possible to refrain from \\?","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":184,"context_line":"            sess_qry \u003d context.session.query(SessionPersistence)"},{"line_number":185,"context_line":"            sess_qry.filter_by(vip_id\u003dvip_id).delete()"},{"line_number":186,"context_line":"            if info:"},{"line_number":187,"context_line":"                sesspersist_db \u003d \\"},{"line_number":188,"context_line":"                    SessionPersistence(type\u003dinfo[\u0027type\u0027],"},{"line_number":189,"context_line":"                                       cookie_name\u003dinfo[\u0027cookie_name\u0027],"},{"line_number":190,"context_line":"                                       vip_id\u003dvip_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F8dM%3D","line":187,"in_reply_to":"AAAAMX%2F%2F%2BDU%3D","updated":"2012-12-05 18:12:47.000000000","message":"Can you suggest how to make these lines compact within 80 charaters per line?  I tried many times but seems I have to use \\ to break to multiple lines.","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":203,"context_line":"        LOG.debug(\"Create the Vip: %s \" % v[\u0027name\u0027])"},{"line_number":204,"context_line":"        tenant_id \u003d self._get_tenant_id_for_create(context, v)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        # TODO: if address is unspecified, we need to allocate one from"},{"line_number":207,"context_line":"        # the VIP\u0027s network."},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"        has_session_persistence \u003d False"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6UM%3D","line":206,"updated":"2012-12-07 18:21:45.000000000","message":"TODO(lcui)","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":227,"context_line":"                         status\u003d\"PENDING_CREATE\")"},{"line_number":228,"context_line":"            context.session.add(vip_db)"},{"line_number":229,"context_line":"            vip_id \u003d vip_db[\u0027id\u0027]"},{"line_number":230,"context_line":"            self._update_pool_vip_info(context, v[\u0027pool_id\u0027], vip_id)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"            if has_session_persistence:"},{"line_number":233,"context_line":"                self._update_vip_session_pesistence_info(context,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6UE%3D","line":230,"updated":"2012-12-07 18:21:45.000000000","message":"I think the above line might go if we decide to create unbound vips and then bind the pool to them.\n\nBut if we do otherwise, can\u0027t we just leverage cascaded updates?","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":233,"context_line":"                self._update_vip_session_pesistence_info(context,"},{"line_number":234,"context_line":"                                                         vip_id,"},{"line_number":235,"context_line":"                                                         sesspersist_info)"},{"line_number":236,"context_line":"        vip_db \u003d self._get_resource(context, Vip, vip_id)"},{"line_number":237,"context_line":"        return self._make_vip_dict(vip_db)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    def update_vip(self, context, id, vip):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6T8%3D","line":236,"updated":"2012-12-07 18:21:45.000000000","message":"Are you sure you need to reload the resource?","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":256,"context_line":"            old_pool_id \u003d vip_db[\u0027pool_id\u0027]"},{"line_number":257,"context_line":"            if vip_db[\u0027status\u0027] in [\"PENDING_DELETE\", \"ERROR\"]:"},{"line_number":258,"context_line":"                raise loadbalancer.StateInvalid(id\u003dvip_db[\u0027id\u0027],"},{"line_number":259,"context_line":"                                                state\u003dvip_db[\u0027status\u0027])"},{"line_number":260,"context_line":"            if v.keys():"},{"line_number":261,"context_line":"                v[\u0027status\u0027] \u003d \"PENDING_UPDATE\""},{"line_number":262,"context_line":"                vip_db.update(v)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6Tg%3D","line":259,"updated":"2012-12-07 18:21:45.000000000","message":"I am not sure about the above behaviour. The logical model should be completely independent from what happens on the underlying fabric.\nFor instance, if I want to update the name or bring down a VIP in error, why should I be returned a StateInvalid Error?","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":258,"context_line":"                raise loadbalancer.StateInvalid(id\u003dvip_db[\u0027id\u0027],"},{"line_number":259,"context_line":"                                                state\u003dvip_db[\u0027status\u0027])"},{"line_number":260,"context_line":"            if v.keys():"},{"line_number":261,"context_line":"                v[\u0027status\u0027] \u003d \"PENDING_UPDATE\""},{"line_number":262,"context_line":"                vip_db.update(v)"},{"line_number":263,"context_line":"                # If the pool_id is changed, we need to update"},{"line_number":264,"context_line":"                # the associated pools"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6S4%3D","line":261,"updated":"2012-12-07 18:21:45.000000000","message":"When do we update the state to note completion?","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":261,"context_line":"                v[\u0027status\u0027] \u003d \"PENDING_UPDATE\""},{"line_number":262,"context_line":"                vip_db.update(v)"},{"line_number":263,"context_line":"                # If the pool_id is changed, we need to update"},{"line_number":264,"context_line":"                # the associated pools"},{"line_number":265,"context_line":"                if \u0027pool_id\u0027 in v:"},{"line_number":266,"context_line":"                    self._update_pool_vip_info(context, old_pool_id, None)"},{"line_number":267,"context_line":"                    self._update_pool_vip_info(context, v[\u0027pool_id\u0027], id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6TY%3D","line":264,"updated":"2012-12-07 18:21:45.000000000","message":"associate pools? can we use multiple?","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":264,"context_line":"                # the associated pools"},{"line_number":265,"context_line":"                if \u0027pool_id\u0027 in v:"},{"line_number":266,"context_line":"                    self._update_pool_vip_info(context, old_pool_id, None)"},{"line_number":267,"context_line":"                    self._update_pool_vip_info(context, v[\u0027pool_id\u0027], id)"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        return self._make_vip_dict(vip_db)"},{"line_number":270,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6Sw%3D","line":267,"updated":"2012-12-07 18:21:45.000000000","message":"This is probably another point in favour of pool-less vips.","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":269,"context_line":"        return self._make_vip_dict(vip_db)"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"    def delete_vip(self, context, id):"},{"line_number":272,"context_line":"        LOG.debug(\"Delete the Vip: %s \" % id)"},{"line_number":273,"context_line":"        # TODO: need to update associated pools"},{"line_number":274,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":275,"context_line":"            self._delete_sessionpersistence(context, id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6So%3D","line":272,"updated":"2012-12-07 18:21:45.000000000","message":"Probably you want to log at the end of the operation rather than at the beginning.","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":300,"context_line":"               \u0027status\u0027: pool[\u0027status\u0027]}"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        # Get the associated members"},{"line_number":303,"context_line":"        members \u003d []"},{"line_number":304,"context_line":"        try:"},{"line_number":305,"context_line":"            member_qry \u003d context.session.query(Member)"},{"line_number":306,"context_line":"            for member in member_qry.filter_by(pool_id\u003dpool[\u0027id\u0027]).all():"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6Sk%3D","line":303,"updated":"2012-12-07 18:21:45.000000000","message":"You can use a orm relationship and navigate in this way. The relationship will do the query for you.","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":305,"context_line":"            member_qry \u003d context.session.query(Member)"},{"line_number":306,"context_line":"            for member in member_qry.filter_by(pool_id\u003dpool[\u0027id\u0027]).all():"},{"line_number":307,"context_line":"                members.append(member[\"id\"])"},{"line_number":308,"context_line":"        except exc.NoResultFound:"},{"line_number":309,"context_line":"            pass"},{"line_number":310,"context_line":"        res[\u0027members\u0027] \u003d members"},{"line_number":311,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6Sg%3D","line":308,"updated":"2012-12-07 18:21:45.000000000","message":"all() does not raise NoResultFound (same below at line 318)","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":340,"context_line":"        if \u0027members\u0027 in v:"},{"line_number":341,"context_line":"            has_members \u003d True"},{"line_number":342,"context_line":"            membersInfo \u003d v[\u0027members\u0027]"},{"line_number":343,"context_line":"            del v[\u0027members\u0027]"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"        zerostats \u003d {\u0027stats\u0027: {\u0027bytes_in\u0027: 0,"},{"line_number":346,"context_line":"                               \u0027bytes_out\u0027: 0,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6Sc%3D","line":343,"updated":"2012-12-07 18:21:45.000000000","message":"I think it has been agree to make pools a member-less resource. Members will have a pool_id attribute which will be used to associate them to a pool","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":6461,"name":"Kaiwei Fan","email":"fank@vmware.com","username":"kaiwei-fan"},"change_message_id":"d2952d2dbbc682185087b7a839471116d048f6d0","unresolved":false,"context_lines":[{"line_number":366,"context_line":"                                              membersInfo)"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"        pool_db \u003d self._get_resource(context, Pool, pool_db[\u0027id\u0027])"},{"line_number":369,"context_line":"        return self._make_pool_dict(context, pool_db)"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"    def update_pool(self, context, id, pool):"},{"line_number":372,"context_line":"        v \u003d pool[\u0027pool\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F8gY%3D","line":369,"updated":"2012-12-05 17:48:45.000000000","message":"The spec says \"Optionally, you can also assign the pool to a vip during creation time, by specifying the vip_id attribute.\". I don\u0027t see vip_id being handled here.","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":366,"context_line":"                                              membersInfo)"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"        pool_db \u003d self._get_resource(context, Pool, pool_db[\u0027id\u0027])"},{"line_number":369,"context_line":"        return self._make_pool_dict(context, pool_db)"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"    def update_pool(self, context, id, pool):"},{"line_number":372,"context_line":"        v \u003d pool[\u0027pool\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6SM%3D","line":369,"in_reply_to":"AAAAMX%2F%2F8eA%3D","updated":"2012-12-07 18:21:45.000000000","message":"Yes, either the VIP specifies the pool_id or the pool the vip_id. I\u0027m slightly biased towards specifying the vip_id in the pool.","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":366,"context_line":"                                              membersInfo)"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"        pool_db \u003d self._get_resource(context, Pool, pool_db[\u0027id\u0027])"},{"line_number":369,"context_line":"        return self._make_pool_dict(context, pool_db)"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"    def update_pool(self, context, id, pool):"},{"line_number":372,"context_line":"        v \u003d pool[\u0027pool\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F8eA%3D","line":369,"in_reply_to":"AAAAMX%2F%2F8gY%3D","updated":"2012-12-05 18:12:47.000000000","message":"yeah, I just realize it.  Actually I don\u0027t think it\u0027s right to let pool to specify the VIP. Need to talk with Youcef about it.","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":6461,"name":"Kaiwei Fan","email":"fank@vmware.com","username":"kaiwei-fan"},"change_message_id":"d2952d2dbbc682185087b7a839471116d048f6d0","unresolved":false,"context_lines":[{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":382,"context_line":"            if has_members:"},{"line_number":383,"context_line":"                self._update_pool_member_info(context, id, membersInfo)"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"            pool_db \u003d self._get_resource(context, Pool, id)"},{"line_number":386,"context_line":"            if pool_db[\u0027status\u0027] in [\"PENDING_DELETE\", \"ERROR\"]:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F8fQ%3D","line":383,"updated":"2012-12-05 17:48:45.000000000","message":"Can we update members during pool update? The spec says only name, description, lb_method, admin_state_up are allowed during pool update.","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":382,"context_line":"            if has_members:"},{"line_number":383,"context_line":"                self._update_pool_member_info(context, id, membersInfo)"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"            pool_db \u003d self._get_resource(context, Pool, id)"},{"line_number":386,"context_line":"            if pool_db[\u0027status\u0027] in [\"PENDING_DELETE\", \"ERROR\"]:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F8dw%3D","line":383,"in_reply_to":"AAAAMX%2F%2F8fQ%3D","updated":"2012-12-05 18:12:47.000000000","message":"The spec actually means the members are optional. However, recent discussion is that we will remove \"members\" from pool creation call.","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":395,"context_line":"    def delete_pool(self, context, id):"},{"line_number":396,"context_line":"        LOG.debug(\"Delete the Pool: %s \" % id)"},{"line_number":397,"context_line":"        # Check if the pool is in use"},{"line_number":398,"context_line":"        vip \u003d context.session.query(Vip).filter_by(pool_id\u003did).first()"},{"line_number":399,"context_line":"        if vip:"},{"line_number":400,"context_line":"            raise loadbalancer.PoolInUse(pool_id\u003did)"},{"line_number":401,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6SE%3D","line":398,"updated":"2012-12-07 18:21:45.000000000","message":"a point in favour of having the vip_id in the pool :)","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":402,"context_line":"        # TODO: need to update the associated members"},{"line_number":403,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":404,"context_line":"            pool_db \u003d self._get_resource(context, Pool, id)"},{"line_number":405,"context_line":"            pool_db[\u0027status\u0027] \u003d \"PENDING_DELETE\""},{"line_number":406,"context_line":"            context.session.delete(pool_db)"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"    def get_pool(self, context, id, fields\u003dNone):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6R8%3D","line":405,"updated":"2012-12-07 18:21:45.000000000","message":"I have the impression that you\u0027re updating the status and immediately after deleting it; everything in the same transaction.\nWho will ever see the PENDING_DELETE status?","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":409,"context_line":"        pool \u003d self._get_resource(context, Pool, id)"},{"line_number":410,"context_line":"        return self._make_pool_dict(context, pool, fields)"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"    def get_pools(self, context, filters\u003dNone, fields\u003dNone):"},{"line_number":413,"context_line":"        collection \u003d self._model_query(context, Pool)"},{"line_number":414,"context_line":"        collection \u003d self._apply_filters_to_query(collection, Pool, filters)"},{"line_number":415,"context_line":"        return [self._make_pool_dict(context, c, fields)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6Os%3D","line":412,"updated":"2012-12-07 18:21:45.000000000","message":"I wonder if we could just use _get_collection here","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":433,"context_line":"        LOG.debug(\"Create the Member: %s \" % v[\u0027address\u0027])"},{"line_number":434,"context_line":"        tenant_id \u003d self._get_tenant_id_for_create(context, v)"},{"line_number":435,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":436,"context_line":"            member_db \u003d Member(id\u003duuidutils.generate_uuid(),"},{"line_number":437,"context_line":"                               tenant_id\u003dtenant_id,"},{"line_number":438,"context_line":"                               pool_id\u003dv[\u0027pool_id\u0027],"},{"line_number":439,"context_line":"                               address\u003dv[\u0027address\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6Ok%3D","line":436,"updated":"2012-12-07 18:21:45.000000000","message":"As Member inherits from HasId you won\u0027t need to assign the Id when allocating an instance. The default value for that column is already an auto-generated id","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":514,"context_line":"            if monitor_db[\u0027status\u0027] in [\"PENDING_DELETE\", \"ERROR\"]:"},{"line_number":515,"context_line":"                raise loadbalancer.StateInvalid(id\u003dmonitor_db[\u0027id\u0027],"},{"line_number":516,"context_line":"                                                state\u003dmonitor_db[\u0027status\u0027])"},{"line_number":517,"context_line":"            if v.keys():"},{"line_number":518,"context_line":"                v[\u0027status\u0027] \u003d \"PENDING_UPDATE\""},{"line_number":519,"context_line":"                monitor_db.update(v)"},{"line_number":520,"context_line":"        return self._make_health_monitor_dict(monitor_db)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6OM%3D","line":517,"updated":"2012-12-07 18:21:45.000000000","message":"Probably this check is not enough.\nYou might have keys, but their values might be still exactly the same as monitor_db, so no update should be performed.","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":523,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":524,"context_line":"            monitor_db \u003d self._get_resource(context, HealthMonitor, id)"},{"line_number":525,"context_line":"            monitor_db[\u0027status\u0027] \u003d \"PENDING_DELETE\""},{"line_number":526,"context_line":"            context.session.delete(monitor_db)"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"    def get_health_monitor(self, context, id, fields\u003dNone):"},{"line_number":529,"context_line":"        healthmonitor \u003d self._get_resource(context, HealthMonitor, id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6OI%3D","line":526,"updated":"2012-12-07 18:21:45.000000000","message":"We will need appropriate cascading of relationships for disassociating from pools.","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":534,"context_line":"                                    self._make_health_monitor_dict,"},{"line_number":535,"context_line":"                                    filters\u003dfilters, fields\u003dfields)"},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"    def get_pool_health_monitors(self, context, pool_id):"},{"line_number":538,"context_line":"        # Read the pool members"},{"line_number":539,"context_line":"        filters \u003d {\"pool_id\": pool_id}"},{"line_number":540,"context_line":"        return self._get_collection(context, HealthMonitor,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6OE%3D","line":537,"updated":"2012-12-07 18:21:45.000000000","message":"As commented earlier in this module, there should a n:m relationship between pool and health monitor","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":539,"context_line":"        filters \u003d {\"pool_id\": pool_id}"},{"line_number":540,"context_line":"        return self._get_collection(context, HealthMonitor,"},{"line_number":541,"context_line":"                                    self._make_health_monitor_dict,"},{"line_number":542,"context_line":"                                    filters\u003dfilters, fields\u003dfields)"},{"line_number":543,"context_line":""},{"line_number":544,"context_line":"    def add_health_monitors(self, context, pool_id, body):"},{"line_number":545,"context_line":"        monitor_ids \u003d body[\u0027health_monitors\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F4FI%3D","line":542,"updated":"2012-12-11 12:14:34.000000000","message":"reference to \u0027fields\u0027 is not defined (should it be a method parameter?)","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":551,"context_line":"                    monitor.update({\u0027pool_id\u0027: pool_id})"},{"line_number":552,"context_line":"                except exc.NoResultFound:"},{"line_number":553,"context_line":"                    raise q_exc.HealthMonitorNotFound(monitor_id\u003dmonitor_id)"},{"line_number":554,"context_line":"                except exc.MultipleResultsFound:"},{"line_number":555,"context_line":"                    LOG.error(\u0027Multiple health_monitors match for %s\u0027"},{"line_number":556,"context_line":"                              % monitor_id)"},{"line_number":557,"context_line":"                    raise q_exc.HealthMonitorNotFound(monitor_id\u003dmonitor_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6OA%3D","line":554,"updated":"2012-12-07 18:21:45.000000000","message":"This can hardly happen","commit_id":"9657567c9addd590844348152b9cf2e47e723593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":568,"context_line":"        return res"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":"    def delete_health_monitors(self, context, pool_id, body):"},{"line_number":571,"context_line":"        # TODO"},{"line_number":572,"context_line":"        pass"},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"    def get_pool_members(self, context, pool_id):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F6N8%3D","line":571,"updated":"2012-12-07 18:21:45.000000000","message":"I think you\u0027ll need to implement this method to consider the blueprint fully implemented. Are you think of doing this in this patch or a separate one?","commit_id":"9657567c9addd590844348152b9cf2e47e723593"}],"quantum/plugins/services/service_base.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import abc"},{"line_number":19,"context_line":"from quantum.api.extensions import PluginInterface"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from quantum.api import extensions"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F6UI%3D","line":19,"updated":"2012-12-21 13:41:31.000000000","message":"this is not needed","commit_id":"b9cd0af2ae9d1372fc589ea5536c492093ef8e84"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import abc"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from quantum.api import extensions"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FxG0%3D","side":"PARENT","line":19,"updated":"2013-01-06 22:32:19.000000000","message":"this line shouldn\u0027t have been removed, probably","commit_id":"5d3b861b7e2e62ff5abbf21d22fc87b773cea4b6"}],"quantum/tests/unit/db/__init__.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2011 OpenStack LLC"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F1%2BA%3D","line":3,"updated":"2013-01-02 19:46:48.000000000","message":"2013","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2011 OpenStack LLC"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Fz8c%3D","line":3,"in_reply_to":"AAAAM3%2F%2F1%2BA%3D","updated":"2013-01-04 07:25:10.000000000","message":"fixed","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"}],"quantum/tests/unit/db/etc/api-paste.ini.test":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"[pipeline:extensions_app_with_filter]"},{"line_number":2,"context_line":"pipeline \u003d extensions extensions_test_app"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"[filter:extensions]"}],"source_content_type":"application/octet-stream","patch_set":10,"id":"AAAAM3%2F%2FxGo%3D","line":1,"updated":"2013-01-06 22:32:19.000000000","message":"There is already another file like this in the unit test area. Why do we need another one?","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"}],"quantum/tests/unit/db/etc/quantum.conf.test":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"[DEFAULT]"},{"line_number":2,"context_line":"# Show more verbose log output (sets INFO log level output)"},{"line_number":3,"context_line":"verbose \u003d True"},{"line_number":4,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":10,"id":"AAAAM3%2F%2FxGw%3D","line":1,"updated":"2013-01-06 22:32:19.000000000","message":"You already have a quantum.cont.test file. Why another one?","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"}],"quantum/tests/unit/db/lb/__init__.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2011 OpenStack LLC"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F198%3D","line":3,"updated":"2013-01-02 19:46:48.000000000","message":"2013","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2011 OpenStack LLC"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Fz7A%3D","line":3,"in_reply_to":"AAAAM3%2F%2F198%3D","updated":"2013-01-04 07:25:10.000000000","message":"fixed","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"}],"quantum/tests/unit/db/lb/test_db_loadbalancer.py":[{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":203,"context_line":"        vip_req \u003d self.new_create_request(\u0027vips\u0027, data, fmt)"},{"line_number":204,"context_line":"        if (kwargs.get(\u0027set_context\u0027) and \u0027tenant_id\u0027 in kwargs):"},{"line_number":205,"context_line":"            # create a specific auth context for this request"},{"line_number":206,"context_line":"            network_req.environ[\u0027quantum.context\u0027] \u003d \\"},{"line_number":207,"context_line":"                context.Context(\u0027\u0027, kwargs[\u0027tenant_id\u0027])"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"        vip_res \u003d vip_req.get_response(self.ext_api)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F6Rs%3D","line":206,"updated":"2012-12-21 11:34:58.000000000","message":"Variable \u0027network_req\u0027 is not set (should it be \u0027vip_req\u0027 instead?). Actually this code is not executed during test run. Is it needed?","commit_id":"b9cd0af2ae9d1372fc589ea5536c492093ef8e84"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":203,"context_line":"        vip_req \u003d self.new_create_request(\u0027vips\u0027, data, fmt)"},{"line_number":204,"context_line":"        if (kwargs.get(\u0027set_context\u0027) and \u0027tenant_id\u0027 in kwargs):"},{"line_number":205,"context_line":"            # create a specific auth context for this request"},{"line_number":206,"context_line":"            network_req.environ[\u0027quantum.context\u0027] \u003d \\"},{"line_number":207,"context_line":"                context.Context(\u0027\u0027, kwargs[\u0027tenant_id\u0027])"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"        vip_res \u003d vip_req.get_response(self.ext_api)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F3C4%3D","line":206,"in_reply_to":"AAAAM3%2F%2F6Rs%3D","updated":"2012-12-31 01:19:25.000000000","message":"nice catch. \nRight, better to remove it as it\u0027s not executed at all. I copied from test_db_plugin.py.","commit_id":"b9cd0af2ae9d1372fc589ea5536c492093ef8e84"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":227,"context_line":"        pool_req \u003d self.new_create_request(\u0027pools\u0027, data, fmt)"},{"line_number":228,"context_line":"        if (kwargs.get(\u0027set_context\u0027) and \u0027tenant_id\u0027 in kwargs):"},{"line_number":229,"context_line":"            # create a specific auth context for this request"},{"line_number":230,"context_line":"            network_req.environ[\u0027quantum.context\u0027] \u003d \\"},{"line_number":231,"context_line":"                context.Context(\u0027\u0027, kwargs[\u0027tenant_id\u0027])"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        pool_res \u003d pool_req.get_response(self.ext_api)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F6Ro%3D","line":230,"updated":"2012-12-21 11:34:58.000000000","message":"variable \u0027network_req\u0027 is not set","commit_id":"b9cd0af2ae9d1372fc589ea5536c492093ef8e84"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":249,"context_line":"        member_req \u003d self.new_create_request(\u0027members\u0027, data, fmt)"},{"line_number":250,"context_line":"        if (kwargs.get(\u0027set_context\u0027) and \u0027tenant_id\u0027 in kwargs):"},{"line_number":251,"context_line":"            # create a specific auth context for this request"},{"line_number":252,"context_line":"            network_req.environ[\u0027quantum.context\u0027] \u003d \\"},{"line_number":253,"context_line":"                context.Context(\u0027\u0027, kwargs[\u0027tenant_id\u0027])"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        member_res \u003d member_req.get_response(self.ext_api)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F6Rk%3D","line":252,"updated":"2012-12-21 11:34:58.000000000","message":"variable \u0027network_req\u0027 is not set","commit_id":"b9cd0af2ae9d1372fc589ea5536c492093ef8e84"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":14,"context_line":"# limitations under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import contextlib"},{"line_number":17,"context_line":"import copy"},{"line_number":18,"context_line":"import datetime"},{"line_number":19,"context_line":"import logging"},{"line_number":20,"context_line":"import mock"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F11I%3D","line":17,"updated":"2013-01-02 19:46:48.000000000","message":"unused import","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import contextlib"},{"line_number":17,"context_line":"import copy"},{"line_number":18,"context_line":"import datetime"},{"line_number":19,"context_line":"import logging"},{"line_number":20,"context_line":"import mock"},{"line_number":21,"context_line":"import os"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F11A%3D","line":18,"updated":"2013-01-02 19:46:48.000000000","message":"unused import","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":17,"context_line":"import copy"},{"line_number":18,"context_line":"import datetime"},{"line_number":19,"context_line":"import logging"},{"line_number":20,"context_line":"import mock"},{"line_number":21,"context_line":"import os"},{"line_number":22,"context_line":"import random"},{"line_number":23,"context_line":"import unittest2"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F11c%3D","line":20,"updated":"2013-01-02 19:46:48.000000000","message":"this should be in the 3rd party import section per the HACKING guidelines.","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":19,"context_line":"import logging"},{"line_number":20,"context_line":"import mock"},{"line_number":21,"context_line":"import os"},{"line_number":22,"context_line":"import random"},{"line_number":23,"context_line":"import unittest2"},{"line_number":24,"context_line":"import webob.exc"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F11g%3D","line":22,"updated":"2013-01-02 19:46:48.000000000","message":"unused import","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":19,"context_line":"import logging"},{"line_number":20,"context_line":"import mock"},{"line_number":21,"context_line":"import os"},{"line_number":22,"context_line":"import random"},{"line_number":23,"context_line":"import unittest2"},{"line_number":24,"context_line":"import webob.exc"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Fz64%3D","line":22,"in_reply_to":"AAAAM3%2F%2F11g%3D","updated":"2013-01-04 07:25:10.000000000","message":"removed unused imports","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":50,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"DB_CORE_PLUGIN_KLASS \u003d \u0027quantum.db.db_base_plugin_v2.QuantumDbPluginV2\u0027"},{"line_number":53,"context_line":"DB_LB_PLUGIN_KLASS \u003d \\"},{"line_number":54,"context_line":"    \"quantum.plugins.services.loadbalancer.\\"},{"line_number":55,"context_line":"loadbalancerPlugin.LoadBalancerPlugin\""},{"line_number":56,"context_line":"ROOTDIR \u003d os.path.dirname(os.path.dirname(__file__))"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F12g%3D","line":53,"updated":"2013-01-02 19:46:48.000000000","message":"HACKING rules do not allow line continuations.  Consider:\n\nDB_LB_PLUGIN_KLASS \u003d (\n   \u0027quantum.plugins.services.loadbalancer.\u0027\n   \u0027loadbalancerPlugin.LoadBalancerPlugin\u0027\n)","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":50,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"DB_CORE_PLUGIN_KLASS \u003d \u0027quantum.db.db_base_plugin_v2.QuantumDbPluginV2\u0027"},{"line_number":53,"context_line":"DB_LB_PLUGIN_KLASS \u003d \\"},{"line_number":54,"context_line":"    \"quantum.plugins.services.loadbalancer.\\"},{"line_number":55,"context_line":"loadbalancerPlugin.LoadBalancerPlugin\""},{"line_number":56,"context_line":"ROOTDIR \u003d os.path.dirname(os.path.dirname(__file__))"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Fz6w%3D","line":53,"in_reply_to":"AAAAM3%2F%2F12g%3D","updated":"2013-01-04 07:25:10.000000000","message":"Thanks for the suggestion.  I have tries few ways but failed.  Glad to know this solution.","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":74,"context_line":"        QuantumManager._instance \u003d None"},{"line_number":75,"context_line":"        PluginAwareExtensionManager._instance \u003d None"},{"line_number":76,"context_line":"        self._attribute_map_bk \u003d {}"},{"line_number":77,"context_line":"        for item in loadbalancer.RESOURCE_ATTRIBUTE_MAP:"},{"line_number":78,"context_line":"            self._attribute_map_bk[item] \u003d (loadbalancer."},{"line_number":79,"context_line":"                                            RESOURCE_ATTRIBUTE_MAP[item]."},{"line_number":80,"context_line":"                                            copy())"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F11U%3D","line":77,"updated":"2013-01-02 19:46:48.000000000","message":"For loop is unnecessary. Consider:\n\nself._attribute_map_bk \u003d loadbalancer.RESOURSE_ATTRIBUTE_MAP.copy()","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":74,"context_line":"        QuantumManager._instance \u003d None"},{"line_number":75,"context_line":"        PluginAwareExtensionManager._instance \u003d None"},{"line_number":76,"context_line":"        self._attribute_map_bk \u003d {}"},{"line_number":77,"context_line":"        for item in loadbalancer.RESOURCE_ATTRIBUTE_MAP:"},{"line_number":78,"context_line":"            self._attribute_map_bk[item] \u003d (loadbalancer."},{"line_number":79,"context_line":"                                            RESOURCE_ATTRIBUTE_MAP[item]."},{"line_number":80,"context_line":"                                            copy())"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Fz6U%3D","line":77,"in_reply_to":"AAAAM3%2F%2F11U%3D","updated":"2013-01-04 07:25:10.000000000","message":"Nice suggestion. Fixed it.","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":105,"context_line":"        cfg.CONF.max_subnet_host_routes \u003d 2"},{"line_number":106,"context_line":"        self.api \u003d APIRouter()"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        LOG.debug(_(\"Create plugin extension manager...\"))"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        plugin \u003d loadbalancerPlugin.LoadBalancerPlugin()"},{"line_number":111,"context_line":"        ext_mgr \u003d \\"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F10o%3D","line":108,"updated":"2013-01-02 19:46:48.000000000","message":"Shouldn\u0027t need logging within unittest tests.","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":105,"context_line":"        cfg.CONF.max_subnet_host_routes \u003d 2"},{"line_number":106,"context_line":"        self.api \u003d APIRouter()"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        LOG.debug(_(\"Create plugin extension manager...\"))"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        plugin \u003d loadbalancerPlugin.LoadBalancerPlugin()"},{"line_number":111,"context_line":"        ext_mgr \u003d \\"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Fz6Q%3D","line":108,"in_reply_to":"AAAAM3%2F%2F10o%3D","updated":"2013-01-04 07:25:10.000000000","message":"remove it.","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":108,"context_line":"        LOG.debug(_(\"Create plugin extension manager...\"))"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        plugin \u003d loadbalancerPlugin.LoadBalancerPlugin()"},{"line_number":111,"context_line":"        ext_mgr \u003d \\"},{"line_number":112,"context_line":"            PluginAwareExtensionManager("},{"line_number":113,"context_line":"                extensions_path,"},{"line_number":114,"context_line":"                {constants.LOADBALANCER: plugin})"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F12U%3D","line":111,"updated":"2013-01-02 19:46:48.000000000","message":"HACKING compliance needed.  Consider:\n\next_mgr \u003d PluginAwareExtensionManager(\n    extension_path,\n    {constants.LOADBALANCER: plugin})","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":108,"context_line":"        LOG.debug(_(\"Create plugin extension manager...\"))"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        plugin \u003d loadbalancerPlugin.LoadBalancerPlugin()"},{"line_number":111,"context_line":"        ext_mgr \u003d \\"},{"line_number":112,"context_line":"            PluginAwareExtensionManager("},{"line_number":113,"context_line":"                extensions_path,"},{"line_number":114,"context_line":"                {constants.LOADBALANCER: plugin})"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Fz6M%3D","line":111,"in_reply_to":"AAAAM3%2F%2F12U%3D","updated":"2013-01-04 07:25:10.000000000","message":"fixed","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":134,"context_line":"        if id and action:"},{"line_number":135,"context_line":"            path \u003d \u0027/lb/%(resource)s/%(id)s/%(action)s.%(fmt)s\u0027 % locals()"},{"line_number":136,"context_line":"        elif id and subresource and sub_id:"},{"line_number":137,"context_line":"            path \u003d \\"},{"line_number":138,"context_line":"                \u0027/lb/%(resource)s/%(id)s/%(subresource)s/%(sub_id)s.%(fmt)s\u0027 \\"},{"line_number":139,"context_line":"                % locals()"},{"line_number":140,"context_line":"        elif id and subresource:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F19g%3D","line":137,"updated":"2013-01-02 19:46:48.000000000","message":"Quantum HACKING rules don\u0027t allow continuations.  Wrap the strings in ()s instead. ie:\n\npath \u003d (\n    \u0027part1\u0027,\n    \u0027part2\u0027)","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":134,"context_line":"        if id and action:"},{"line_number":135,"context_line":"            path \u003d \u0027/lb/%(resource)s/%(id)s/%(action)s.%(fmt)s\u0027 % locals()"},{"line_number":136,"context_line":"        elif id and subresource and sub_id:"},{"line_number":137,"context_line":"            path \u003d \\"},{"line_number":138,"context_line":"                \u0027/lb/%(resource)s/%(id)s/%(subresource)s/%(sub_id)s.%(fmt)s\u0027 \\"},{"line_number":139,"context_line":"                % locals()"},{"line_number":140,"context_line":"        elif id and subresource:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Fz54%3D","line":137,"in_reply_to":"AAAAM3%2F%2F19g%3D","updated":"2013-01-04 07:25:10.000000000","message":"fixed","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":138,"context_line":"                \u0027/lb/%(resource)s/%(id)s/%(subresource)s/%(sub_id)s.%(fmt)s\u0027 \\"},{"line_number":139,"context_line":"                % locals()"},{"line_number":140,"context_line":"        elif id and subresource:"},{"line_number":141,"context_line":"            path \u003d \\"},{"line_number":142,"context_line":"                \u0027/lb/%(resource)s/%(id)s/%(subresource)s.%(fmt)s\u0027 % locals()"},{"line_number":143,"context_line":"        elif id:"},{"line_number":144,"context_line":"            path \u003d \u0027/lb/%(resource)s/%(id)s.%(fmt)s\u0027 % locals()"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F12Q%3D","line":141,"updated":"2013-01-02 19:46:48.000000000","message":"HACKING compliance needed","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":138,"context_line":"                \u0027/lb/%(resource)s/%(id)s/%(subresource)s/%(sub_id)s.%(fmt)s\u0027 \\"},{"line_number":139,"context_line":"                % locals()"},{"line_number":140,"context_line":"        elif id and subresource:"},{"line_number":141,"context_line":"            path \u003d \\"},{"line_number":142,"context_line":"                \u0027/lb/%(resource)s/%(id)s/%(subresource)s.%(fmt)s\u0027 % locals()"},{"line_number":143,"context_line":"        elif id:"},{"line_number":144,"context_line":"            path \u003d \u0027/lb/%(resource)s/%(id)s.%(fmt)s\u0027 % locals()"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Fz50%3D","line":141,"in_reply_to":"AAAAM3%2F%2F12Q%3D","updated":"2013-01-04 07:25:10.000000000","message":"fixed","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":178,"context_line":"    def new_update_request(self, resource, data, id, fmt\u003d\u0027json\u0027):"},{"line_number":179,"context_line":"        return self._req(\u0027PUT\u0027, resource, data, fmt, id\u003did)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    def new_action_request(self, resource, data, id, action, fmt\u003d\u0027json\u0027):"},{"line_number":182,"context_line":"        return self._req(\u0027PUT\u0027, resource, data, fmt, id\u003did, action\u003daction)"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    def deserialize(self, content_type, response):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F19Q%3D","line":181,"updated":"2013-01-02 19:46:48.000000000","message":"I don\u0027t see where this is called.","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":178,"context_line":"    def new_update_request(self, resource, data, id, fmt\u003d\u0027json\u0027):"},{"line_number":179,"context_line":"        return self._req(\u0027PUT\u0027, resource, data, fmt, id\u003did)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    def new_action_request(self, resource, data, id, action, fmt\u003d\u0027json\u0027):"},{"line_number":182,"context_line":"        return self._req(\u0027PUT\u0027, resource, data, fmt, id\u003did, action\u003daction)"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    def deserialize(self, content_type, response):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Fz5w%3D","line":181,"in_reply_to":"AAAAM3%2F%2F19Q%3D","updated":"2013-01-04 07:25:10.000000000","message":"removed it.","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":399,"context_line":"                (\u0027admin_state_up\u0027, True),"},{"line_number":400,"context_line":"                (\u0027status\u0027, \u0027PENDING_CREATE\u0027)]"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"        with self.vip(name\u003dname) as vip:"},{"line_number":403,"context_line":"            for k, v in keys:"},{"line_number":404,"context_line":"                self.assertEquals(vip[\u0027vip\u0027][k], v)"},{"line_number":405,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F18M%3D","line":402,"updated":"2013-01-02 19:46:48.000000000","message":"self.assertEqual(expected, vip[\u0027vip\u0027]) is the proper way to compare the dicts.","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":399,"context_line":"                (\u0027admin_state_up\u0027, True),"},{"line_number":400,"context_line":"                (\u0027status\u0027, \u0027PENDING_CREATE\u0027)]"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"        with self.vip(name\u003dname) as vip:"},{"line_number":403,"context_line":"            for k, v in keys:"},{"line_number":404,"context_line":"                self.assertEquals(vip[\u0027vip\u0027][k], v)"},{"line_number":405,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Fz4k%3D","line":402,"in_reply_to":"AAAAM3%2F%2F18M%3D","updated":"2013-01-04 07:25:10.000000000","message":"I mainly refer to tests/unit/test_db_plugin.py where this is the standard way to do comparison.  If I directly compare two dicts, it seems the dict returned from rest call is in unicode and comparison is always failed as below:\n\n    self.assertEquals(keys, vip[\u0027vip\u0027])\nAssertionError: {\u0027status\u0027: \u0027PENDING_CREATE\u0027, \u0027protocol\u0027: \u0027http\u0027, \u0027name\u0027: \u0027vip1\u0027, \u0027address\u0027: \u0027172 [truncated]... !\u003d {u\u0027status\u0027: u\u0027PENDING_CREATE\u0027, u\u0027protocol\u0027: u\u0027http\u0027, u\u0027description\u0027: u\u0027\u0027, u\u0027admi [truncated]...\n- {\u0027address\u0027: \u0027172.16.1.123\u0027,\n+ {u\u0027address\u0027: u\u0027172.16.1.123\u0027,\n?  +           +","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":405,"context_line":""},{"line_number":406,"context_line":"    def test_create_vip_with_session_persistence(self):"},{"line_number":407,"context_line":"        name \u003d \u0027vip2\u0027"},{"line_number":408,"context_line":"        keys \u003d [(\u0027name\u0027, name),"},{"line_number":409,"context_line":"                (\u0027subnet_id\u0027, self._subnet_id),"},{"line_number":410,"context_line":"                (\u0027address\u0027, \"172.16.1.123\"),"},{"line_number":411,"context_line":"                (\u0027port\u0027, 80),"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F18I%3D","line":408,"updated":"2013-01-02 19:46:48.000000000","message":"same as above","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":419,"context_line":"        with self.vip(name\u003dname,"},{"line_number":420,"context_line":"                      session_persistence\u003d{\u0027type\u0027: \"cookie\","},{"line_number":421,"context_line":"                                           \u0027cookie_name\u0027: \"jessionId\"}) as vip:"},{"line_number":422,"context_line":"            for k, v in keys:"},{"line_number":423,"context_line":"                self.assertEquals(vip[\u0027vip\u0027][k], v)"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"    def test_update_vip(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F18o%3D","line":422,"updated":"2013-01-02 19:46:48.000000000","message":"self.assertEqual(vip[\u0027vip\u0027], expected)","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":424,"context_line":""},{"line_number":425,"context_line":"    def test_update_vip(self):"},{"line_number":426,"context_line":"        name \u003d \u0027new_vip\u0027"},{"line_number":427,"context_line":"        keys \u003d [(\u0027name\u0027, name),"},{"line_number":428,"context_line":"                (\u0027subnet_id\u0027, self._subnet_id),"},{"line_number":429,"context_line":"                (\u0027address\u0027, \"172.16.1.123\"),"},{"line_number":430,"context_line":"                (\u0027port\u0027, 80),"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F18E%3D","line":427,"updated":"2013-01-02 19:46:48.000000000","message":"same","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":441,"context_line":"                            \u0027admin_state_up\u0027: False}}"},{"line_number":442,"context_line":"            req \u003d self.new_update_request(\u0027vips\u0027, data, vip[\u0027vip\u0027][\u0027id\u0027])"},{"line_number":443,"context_line":"            res \u003d self.deserialize(\u0027json\u0027, req.get_response(self.ext_api))"},{"line_number":444,"context_line":"            for k, v in keys:"},{"line_number":445,"context_line":"                self.assertEquals(res[\u0027vip\u0027][k], v)"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"    def test_delete_vip(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F18A%3D","line":444,"updated":"2013-01-02 19:46:48.000000000","message":"self.assertEqual(vip[\u0027vip\u0027], expected)","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":450,"context_line":"                req \u003d self.new_delete_request(\u0027vips\u0027,"},{"line_number":451,"context_line":"                                              vip[\u0027vip\u0027][\u0027id\u0027])"},{"line_number":452,"context_line":"                res \u003d req.get_response(self.ext_api)"},{"line_number":453,"context_line":"                self.assertEquals(res.status_int, 204)"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"    def test_show_vip(self):"},{"line_number":456,"context_line":"        name \u003d \"vip_show\""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F12A%3D","line":453,"updated":"2013-01-02 19:46:48.000000000","message":"assertEquals() is deprecated in newer python releases.  New code should use assertEqual()","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":454,"context_line":""},{"line_number":455,"context_line":"    def test_show_vip(self):"},{"line_number":456,"context_line":"        name \u003d \"vip_show\""},{"line_number":457,"context_line":"        keys \u003d [(\u0027name\u0027, name),"},{"line_number":458,"context_line":"                (\u0027subnet_id\u0027, self._subnet_id),"},{"line_number":459,"context_line":"                (\u0027address\u0027, \"172.16.1.123\"),"},{"line_number":460,"context_line":"                (\u0027port\u0027, 80),"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F174%3D","line":457,"updated":"2013-01-02 19:46:48.000000000","message":"same as above","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":466,"context_line":"            req \u003d self.new_show_request(\u0027vips\u0027,"},{"line_number":467,"context_line":"                                        vip[\u0027vip\u0027][\u0027id\u0027])"},{"line_number":468,"context_line":"            res \u003d self.deserialize(\u0027json\u0027, req.get_response(self.ext_api))"},{"line_number":469,"context_line":"            for k, v in keys:"},{"line_number":470,"context_line":"                self.assertEquals(res[\u0027vip\u0027][k], v)"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"    def test_create_pool(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F178%3D","line":469,"updated":"2013-01-02 19:46:48.000000000","message":"self.assertEqual(vip[\u0027vip\u0027], expected)","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":471,"context_line":""},{"line_number":472,"context_line":"    def test_create_pool(self):"},{"line_number":473,"context_line":"        name \u003d \"pool1\""},{"line_number":474,"context_line":"        keys \u003d [(\u0027name\u0027, name),"},{"line_number":475,"context_line":"                (\u0027subnet_id\u0027, self._subnet_id),"},{"line_number":476,"context_line":"                (\u0027tenant_id\u0027, self._tenant_id),"},{"line_number":477,"context_line":"                (\u0027protocol\u0027, \u0027http\u0027),"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F170%3D","line":474,"updated":"2013-01-02 19:46:48.000000000","message":"same as above","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":478,"context_line":"                (\u0027lb_method\u0027, \u0027rr\u0027),"},{"line_number":479,"context_line":"                (\u0027admin_state_up\u0027, True),"},{"line_number":480,"context_line":"                (\u0027status\u0027, \u0027PENDING_CREATE\u0027)]"},{"line_number":481,"context_line":"        with self.pool(name\u003dname) as pool:"},{"line_number":482,"context_line":"            for k, v in keys:"},{"line_number":483,"context_line":"                self.assertEquals(pool[\u0027pool\u0027][k], v)"},{"line_number":484,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F17w%3D","line":481,"updated":"2013-01-02 19:46:48.000000000","message":"self.assertEqual(pool[\u0027pool\u0027], expected)","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":499,"context_line":"                                            req.get_response(self.ext_api))"},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"            member1 \u003d self.deserialize(\u0027json\u0027, res1)"},{"line_number":502,"context_line":"            self.assertEquals(member1[\u0027member\u0027][\u0027id\u0027],"},{"line_number":503,"context_line":"                              pool_updated[\u0027pool\u0027][\u0027members\u0027][0])"},{"line_number":504,"context_line":"            self.assertEquals(len(pool_updated[\u0027pool\u0027][\u0027members\u0027]), 1)"},{"line_number":505,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F11w%3D","line":502,"updated":"2013-01-02 19:46:48.000000000","message":"assertEqual()","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":501,"context_line":"            member1 \u003d self.deserialize(\u0027json\u0027, res1)"},{"line_number":502,"context_line":"            self.assertEquals(member1[\u0027member\u0027][\u0027id\u0027],"},{"line_number":503,"context_line":"                              pool_updated[\u0027pool\u0027][\u0027members\u0027][0])"},{"line_number":504,"context_line":"            self.assertEquals(len(pool_updated[\u0027pool\u0027][\u0027members\u0027]), 1)"},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"            keys \u003d [(\u0027address\u0027, \u0027192.168.1.100\u0027),"},{"line_number":507,"context_line":"                    (\u0027port\u0027, 80),"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F11s%3D","line":504,"updated":"2013-01-02 19:46:48.000000000","message":"assertEqual()","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":503,"context_line":"                              pool_updated[\u0027pool\u0027][\u0027members\u0027][0])"},{"line_number":504,"context_line":"            self.assertEquals(len(pool_updated[\u0027pool\u0027][\u0027members\u0027]), 1)"},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"            keys \u003d [(\u0027address\u0027, \u0027192.168.1.100\u0027),"},{"line_number":507,"context_line":"                    (\u0027port\u0027, 80),"},{"line_number":508,"context_line":"                    (\u0027weight\u0027, 1),"},{"line_number":509,"context_line":"                    (\u0027pool_id\u0027, pool_id),"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F17o%3D","line":506,"updated":"2013-01-02 19:46:48.000000000","message":"same as above","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":509,"context_line":"                    (\u0027pool_id\u0027, pool_id),"},{"line_number":510,"context_line":"                    (\u0027admin_state_up\u0027, True),"},{"line_number":511,"context_line":"                    (\u0027status\u0027, \u0027PENDING_CREATE\u0027)]"},{"line_number":512,"context_line":"            for k, v in keys:"},{"line_number":513,"context_line":"                self.assertEquals(member1[\u0027member\u0027][k], v)"},{"line_number":514,"context_line":"            self._delete(\u0027members\u0027, member1[\u0027member\u0027][\u0027id\u0027])"},{"line_number":515,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F17U%3D","line":512,"updated":"2013-01-02 19:46:48.000000000","message":"self.assertEqual(member1[\u0027member\u0027], expected)","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":524,"context_line":""},{"line_number":525,"context_line":"    def test_show_pool(self):"},{"line_number":526,"context_line":"        name \u003d \"pool1\""},{"line_number":527,"context_line":"        keys \u003d [(\u0027name\u0027, name),"},{"line_number":528,"context_line":"                (\u0027subnet_id\u0027, self._subnet_id),"},{"line_number":529,"context_line":"                (\u0027tenant_id\u0027, self._tenant_id),"},{"line_number":530,"context_line":"                (\u0027protocol\u0027, \u0027http\u0027),"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F17k%3D","line":527,"updated":"2013-01-02 19:46:48.000000000","message":"same as above","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":536,"context_line":"                                        pool[\u0027pool\u0027][\u0027id\u0027],"},{"line_number":537,"context_line":"                                        fmt\u003d\u0027json\u0027)"},{"line_number":538,"context_line":"            res \u003d self.deserialize(\u0027json\u0027, req.get_response(self.ext_api))"},{"line_number":539,"context_line":"            for k, v in keys:"},{"line_number":540,"context_line":"                self.assertEquals(res[\u0027pool\u0027][k], v)"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"    def test_create_member(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F17Y%3D","line":539,"updated":"2013-01-02 19:46:48.000000000","message":"self.assertEqual(res[\u0027pool\u0027], expected)","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":551,"context_line":"                    req \u003d self.new_show_request(\u0027pools\u0027,"},{"line_number":552,"context_line":"                                                pool_id,"},{"line_number":553,"context_line":"                                                fmt\u003d\u0027json\u0027)"},{"line_number":554,"context_line":"                    pool_update \u003d \\"},{"line_number":555,"context_line":"                        self.deserialize(\u0027json\u0027,"},{"line_number":556,"context_line":"                                         req.get_response(self.ext_api))"},{"line_number":557,"context_line":"                    self.assertTrue(member1[\u0027member\u0027][\u0027id\u0027] in"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F12I%3D","line":554,"updated":"2013-01-02 19:46:48.000000000","message":"HACKING compliance needed","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":554,"context_line":"                    pool_update \u003d \\"},{"line_number":555,"context_line":"                        self.deserialize(\u0027json\u0027,"},{"line_number":556,"context_line":"                                         req.get_response(self.ext_api))"},{"line_number":557,"context_line":"                    self.assertTrue(member1[\u0027member\u0027][\u0027id\u0027] in"},{"line_number":558,"context_line":"                                    pool_update[\u0027pool\u0027][\u0027members\u0027])"},{"line_number":559,"context_line":"                    self.assertTrue(member2[\u0027member\u0027][\u0027id\u0027] in"},{"line_number":560,"context_line":"                                    pool_update[\u0027pool\u0027][\u0027members\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F17Q%3D","line":557,"updated":"2013-01-02 19:46:48.000000000","message":"self.assertIn()","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":556,"context_line":"                                         req.get_response(self.ext_api))"},{"line_number":557,"context_line":"                    self.assertTrue(member1[\u0027member\u0027][\u0027id\u0027] in"},{"line_number":558,"context_line":"                                    pool_update[\u0027pool\u0027][\u0027members\u0027])"},{"line_number":559,"context_line":"                    self.assertTrue(member2[\u0027member\u0027][\u0027id\u0027] in"},{"line_number":560,"context_line":"                                    pool_update[\u0027pool\u0027][\u0027members\u0027])"},{"line_number":561,"context_line":""},{"line_number":562,"context_line":"    def test_update_member(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F17M%3D","line":559,"updated":"2013-01-02 19:46:48.000000000","message":"self.assertIn()","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":562,"context_line":"    def test_update_member(self):"},{"line_number":563,"context_line":"        with self.pool(name\u003d\"pool1\") as pool1:"},{"line_number":564,"context_line":"            with self.pool(name\u003d\"pool2\") as pool2:"},{"line_number":565,"context_line":"                keys \u003d [(\u0027address\u0027, \"192.168.1.100\"),"},{"line_number":566,"context_line":"                        (\u0027tenant_id\u0027, self._tenant_id),"},{"line_number":567,"context_line":"                        (\u0027port\u0027, 80),"},{"line_number":568,"context_line":"                        (\u0027weight\u0027, 10),"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F17I%3D","line":565,"updated":"2013-01-02 19:46:48.000000000","message":"same as above","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":573,"context_line":"                    req \u003d self.new_show_request(\u0027pools\u0027,"},{"line_number":574,"context_line":"                                                pool1[\u0027pool\u0027][\u0027id\u0027],"},{"line_number":575,"context_line":"                                                fmt\u003d\u0027json\u0027)"},{"line_number":576,"context_line":"                    pool1_update \u003d \\"},{"line_number":577,"context_line":"                        self.deserialize(\u0027json\u0027,"},{"line_number":578,"context_line":"                                         req.get_response(self.ext_api))"},{"line_number":579,"context_line":"                    self.assertEquals(len(pool1_update[\u0027pool\u0027][\u0027members\u0027]), 1)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F13M%3D","line":576,"updated":"2013-01-02 19:46:48.000000000","message":"HACKING compliance needed","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":576,"context_line":"                    pool1_update \u003d \\"},{"line_number":577,"context_line":"                        self.deserialize(\u0027json\u0027,"},{"line_number":578,"context_line":"                                         req.get_response(self.ext_api))"},{"line_number":579,"context_line":"                    self.assertEquals(len(pool1_update[\u0027pool\u0027][\u0027members\u0027]), 1)"},{"line_number":580,"context_line":""},{"line_number":581,"context_line":"                    req \u003d self.new_show_request(\u0027pools\u0027,"},{"line_number":582,"context_line":"                                                pool2[\u0027pool\u0027][\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F13Q%3D","line":579,"updated":"2013-01-02 19:46:48.000000000","message":"assertEqual()","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":581,"context_line":"                    req \u003d self.new_show_request(\u0027pools\u0027,"},{"line_number":582,"context_line":"                                                pool2[\u0027pool\u0027][\u0027id\u0027],"},{"line_number":583,"context_line":"                                                fmt\u003d\u0027json\u0027)"},{"line_number":584,"context_line":"                    pool2_update \u003d \\"},{"line_number":585,"context_line":"                        self.deserialize(\u0027json\u0027,"},{"line_number":586,"context_line":"                                         req.get_response(self.ext_api))"},{"line_number":587,"context_line":"                    self.assertEquals(len(pool1_update[\u0027pool\u0027][\u0027members\u0027]), 1)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F13I%3D","line":584,"updated":"2013-01-02 19:46:48.000000000","message":"HACKING compliance needed","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":584,"context_line":"                    pool2_update \u003d \\"},{"line_number":585,"context_line":"                        self.deserialize(\u0027json\u0027,"},{"line_number":586,"context_line":"                                         req.get_response(self.ext_api))"},{"line_number":587,"context_line":"                    self.assertEquals(len(pool1_update[\u0027pool\u0027][\u0027members\u0027]), 1)"},{"line_number":588,"context_line":"                    self.assertEquals(len(pool2_update[\u0027pool\u0027][\u0027members\u0027]), 0)"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"                    data \u003d {\u0027member\u0027: {\u0027pool_id\u0027: pool2[\u0027pool\u0027][\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F17A%3D","line":587,"updated":"2013-01-02 19:46:48.000000000","message":"assertEqual()","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":585,"context_line":"                        self.deserialize(\u0027json\u0027,"},{"line_number":586,"context_line":"                                         req.get_response(self.ext_api))"},{"line_number":587,"context_line":"                    self.assertEquals(len(pool1_update[\u0027pool\u0027][\u0027members\u0027]), 1)"},{"line_number":588,"context_line":"                    self.assertEquals(len(pool2_update[\u0027pool\u0027][\u0027members\u0027]), 0)"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"                    data \u003d {\u0027member\u0027: {\u0027pool_id\u0027: pool2[\u0027pool\u0027][\u0027id\u0027],"},{"line_number":591,"context_line":"                                       \u0027weight\u0027: 10,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F168%3D","line":588,"updated":"2013-01-02 19:46:48.000000000","message":"self.assertEqual()","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":595,"context_line":"                                                  member[\u0027member\u0027][\u0027id\u0027])"},{"line_number":596,"context_line":"                    res \u003d self.deserialize(\u0027json\u0027,"},{"line_number":597,"context_line":"                                           req.get_response(self.ext_api))"},{"line_number":598,"context_line":"                    for k, v in keys:"},{"line_number":599,"context_line":"                        self.assertEquals(res[\u0027member\u0027][k], v)"},{"line_number":600,"context_line":""},{"line_number":601,"context_line":"                    req \u003d self.new_show_request(\u0027pools\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F17E%3D","line":598,"updated":"2013-01-02 19:46:48.000000000","message":"self.assertEqual(res[\u0027member], expected)","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":596,"context_line":"                    res \u003d self.deserialize(\u0027json\u0027,"},{"line_number":597,"context_line":"                                           req.get_response(self.ext_api))"},{"line_number":598,"context_line":"                    for k, v in keys:"},{"line_number":599,"context_line":"                        self.assertEquals(res[\u0027member\u0027][k], v)"},{"line_number":600,"context_line":""},{"line_number":601,"context_line":"                    req \u003d self.new_show_request(\u0027pools\u0027,"},{"line_number":602,"context_line":"                                                pool1[\u0027pool\u0027][\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F16w%3D","line":599,"updated":"2013-01-02 19:46:48.000000000","message":"assertEqual()","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":601,"context_line":"                    req \u003d self.new_show_request(\u0027pools\u0027,"},{"line_number":602,"context_line":"                                                pool1[\u0027pool\u0027][\u0027id\u0027],"},{"line_number":603,"context_line":"                                                fmt\u003d\u0027json\u0027)"},{"line_number":604,"context_line":"                    pool1_update \u003d \\"},{"line_number":605,"context_line":"                        self.deserialize(\u0027json\u0027,"},{"line_number":606,"context_line":"                                         req.get_response(self.ext_api))"},{"line_number":607,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F13A%3D","line":604,"updated":"2013-01-02 19:46:48.000000000","message":"HACKING compliance needed","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":608,"context_line":"                    req \u003d self.new_show_request(\u0027pools\u0027,"},{"line_number":609,"context_line":"                                                pool2[\u0027pool\u0027][\u0027id\u0027],"},{"line_number":610,"context_line":"                                                fmt\u003d\u0027json\u0027)"},{"line_number":611,"context_line":"                    pool2_update \u003d \\"},{"line_number":612,"context_line":"                        self.deserialize(\u0027json\u0027,"},{"line_number":613,"context_line":"                                         req.get_response(self.ext_api))"},{"line_number":614,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F128%3D","line":611,"updated":"2013-01-02 19:46:48.000000000","message":"HACKING compliance needed","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":612,"context_line":"                        self.deserialize(\u0027json\u0027,"},{"line_number":613,"context_line":"                                         req.get_response(self.ext_api))"},{"line_number":614,"context_line":""},{"line_number":615,"context_line":"                    self.assertEquals(len(pool2_update[\u0027pool\u0027][\u0027members\u0027]), 1)"},{"line_number":616,"context_line":"                    self.assertEquals(len(pool1_update[\u0027pool\u0027][\u0027members\u0027]), 0)"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"    def test_delete_member(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F164%3D","line":615,"updated":"2013-01-02 19:46:48.000000000","message":"assertEqual()","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":613,"context_line":"                                         req.get_response(self.ext_api))"},{"line_number":614,"context_line":""},{"line_number":615,"context_line":"                    self.assertEquals(len(pool2_update[\u0027pool\u0027][\u0027members\u0027]), 1)"},{"line_number":616,"context_line":"                    self.assertEquals(len(pool1_update[\u0027pool\u0027][\u0027members\u0027]), 0)"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"    def test_delete_member(self):"},{"line_number":619,"context_line":"        with self.pool() as pool:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F160%3D","line":616,"updated":"2013-01-02 19:46:48.000000000","message":"assertEqual()","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":623,"context_line":"                req \u003d self.new_delete_request(\u0027members\u0027,"},{"line_number":624,"context_line":"                                              member[\u0027member\u0027][\u0027id\u0027])"},{"line_number":625,"context_line":"                res \u003d req.get_response(self.ext_api)"},{"line_number":626,"context_line":"                self.assertEquals(res.status_int, 204)"},{"line_number":627,"context_line":""},{"line_number":628,"context_line":"                req \u003d self.new_show_request(\u0027pools\u0027,"},{"line_number":629,"context_line":"                                            pool_id,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F16s%3D","line":626,"updated":"2013-01-02 19:46:48.000000000","message":"assertEqual()","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":628,"context_line":"                req \u003d self.new_show_request(\u0027pools\u0027,"},{"line_number":629,"context_line":"                                            pool_id,"},{"line_number":630,"context_line":"                                            fmt\u003d\u0027json\u0027)"},{"line_number":631,"context_line":"                pool_update \u003d \\"},{"line_number":632,"context_line":"                    self.deserialize(\u0027json\u0027,"},{"line_number":633,"context_line":"                                     req.get_response(self.ext_api))"},{"line_number":634,"context_line":"                self.assertEqual(len(pool_update[\u0027pool\u0027][\u0027members\u0027]), 0)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F120%3D","line":631,"updated":"2013-01-02 19:46:48.000000000","message":"HACKING compliance needed","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":647,"context_line":"                                            member[\u0027member\u0027][\u0027id\u0027],"},{"line_number":648,"context_line":"                                            fmt\u003d\u0027json\u0027)"},{"line_number":649,"context_line":"                res \u003d self.deserialize(\u0027json\u0027, req.get_response(self.ext_api))"},{"line_number":650,"context_line":"                for k, v in keys:"},{"line_number":651,"context_line":"                    self.assertEquals(res[\u0027member\u0027][k], v)"},{"line_number":652,"context_line":""},{"line_number":653,"context_line":"    def test_create_healthmonitor(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F16g%3D","line":650,"updated":"2013-01-02 19:46:48.000000000","message":"self.assertEqual(res[\u0027member], expected)","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":651,"context_line":"                    self.assertEquals(res[\u0027member\u0027][k], v)"},{"line_number":652,"context_line":""},{"line_number":653,"context_line":"    def test_create_healthmonitor(self):"},{"line_number":654,"context_line":"        keys \u003d [(\u0027type\u0027, \"TCP\"),"},{"line_number":655,"context_line":"                (\u0027tenant_id\u0027, self._tenant_id),"},{"line_number":656,"context_line":"                (\u0027delay\u0027, 30),"},{"line_number":657,"context_line":"                (\u0027timeout\u0027, 10),"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F16Y%3D","line":654,"updated":"2013-01-02 19:46:48.000000000","message":"expected\u003d{}","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":658,"context_line":"                (\u0027max_retries\u0027, 3),"},{"line_number":659,"context_line":"                (\u0027admin_state_up\u0027, True),"},{"line_number":660,"context_line":"                (\u0027status\u0027, \u0027PENDING_CREATE\u0027)]"},{"line_number":661,"context_line":"        with self.health_monitor() as monitor:"},{"line_number":662,"context_line":"            for k, v in keys:"},{"line_number":663,"context_line":"                self.assertEquals(monitor[\u0027health_monitor\u0027][k], v)"},{"line_number":664,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F15Y%3D","line":661,"updated":"2013-01-02 19:46:48.000000000","message":"self.assertEqual(monitor[\u0027health_monitor\u0027], expected)","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":663,"context_line":"                self.assertEquals(monitor[\u0027health_monitor\u0027][k], v)"},{"line_number":664,"context_line":""},{"line_number":665,"context_line":"    def test_update_healthmonitor(self):"},{"line_number":666,"context_line":"        keys \u003d [(\u0027type\u0027, \"TCP\"),"},{"line_number":667,"context_line":"                (\u0027tenant_id\u0027, self._tenant_id),"},{"line_number":668,"context_line":"                (\u0027delay\u0027, 20),"},{"line_number":669,"context_line":"                (\u0027timeout\u0027, 20),"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F16Q%3D","line":666,"updated":"2013-01-02 19:46:48.000000000","message":"same as above","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":679,"context_line":"                                          data,"},{"line_number":680,"context_line":"                                          monitor[\u0027health_monitor\u0027][\u0027id\u0027])"},{"line_number":681,"context_line":"            res \u003d self.deserialize(\u0027json\u0027, req.get_response(self.ext_api))"},{"line_number":682,"context_line":"            for k, v in keys:"},{"line_number":683,"context_line":"                self.assertEquals(res[\u0027health_monitor\u0027][k], v)"},{"line_number":684,"context_line":""},{"line_number":685,"context_line":"    def test_delete_healthmonitor(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F16U%3D","line":682,"updated":"2013-01-02 19:46:48.000000000","message":"self.assertEqual(res[\u0027health_monitor\u0027], expected)","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":687,"context_line":"            req \u003d self.new_delete_request(\u0027health_monitors\u0027,"},{"line_number":688,"context_line":"                                          monitor[\u0027health_monitor\u0027][\u0027id\u0027])"},{"line_number":689,"context_line":"            res \u003d req.get_response(self.ext_api)"},{"line_number":690,"context_line":"            self.assertEquals(res.status_int, 204)"},{"line_number":691,"context_line":""},{"line_number":692,"context_line":"    def test_show_healthmonitor(self):"},{"line_number":693,"context_line":"        with self.health_monitor() as monitor:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F16E%3D","line":690,"updated":"2013-01-02 19:46:48.000000000","message":"assertEqual()","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":691,"context_line":""},{"line_number":692,"context_line":"    def test_show_healthmonitor(self):"},{"line_number":693,"context_line":"        with self.health_monitor() as monitor:"},{"line_number":694,"context_line":"            keys \u003d [(\u0027type\u0027, \"TCP\"),"},{"line_number":695,"context_line":"                    (\u0027tenant_id\u0027, self._tenant_id),"},{"line_number":696,"context_line":"                    (\u0027delay\u0027, 30),"},{"line_number":697,"context_line":"                    (\u0027timeout\u0027, 10),"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F154%3D","line":694,"updated":"2013-01-02 19:46:48.000000000","message":"expected \u003d {}","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":702,"context_line":"                                        monitor[\u0027health_monitor\u0027][\u0027id\u0027],"},{"line_number":703,"context_line":"                                        fmt\u003d\u0027json\u0027)"},{"line_number":704,"context_line":"            res \u003d self.deserialize(\u0027json\u0027, req.get_response(self.ext_api))"},{"line_number":705,"context_line":"            for k, v in keys:"},{"line_number":706,"context_line":"                self.assertEquals(res[\u0027health_monitor\u0027][k], v)"},{"line_number":707,"context_line":""},{"line_number":708,"context_line":"    def test_get_pool_stats(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F15o%3D","line":705,"updated":"2013-01-02 19:46:48.000000000","message":"self.assertEqual(res[\u0027health_monitor\u0027], expected)","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":706,"context_line":"                self.assertEquals(res[\u0027health_monitor\u0027][k], v)"},{"line_number":707,"context_line":""},{"line_number":708,"context_line":"    def test_get_pool_stats(self):"},{"line_number":709,"context_line":"        keys \u003d [(\"bytes_in\", 0),"},{"line_number":710,"context_line":"                (\"bytes_out\", 0),"},{"line_number":711,"context_line":"                (\"active_connections\", 0),"},{"line_number":712,"context_line":"                (\"total_connections\", 0)]"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F15M%3D","line":709,"updated":"2013-01-02 19:46:48.000000000","message":"expected \u003d {}","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":716,"context_line":"                                        subresource\u003d\"stats\","},{"line_number":717,"context_line":"                                        fmt\u003d\u0027json\u0027)"},{"line_number":718,"context_line":"            res \u003d self.deserialize(\u0027json\u0027, req.get_response(self.ext_api))"},{"line_number":719,"context_line":"            for k, v in keys:"},{"line_number":720,"context_line":"                self.assertEqual(res[\u0027stats\u0027][k], v)"},{"line_number":721,"context_line":""},{"line_number":722,"context_line":"    def test_create_healthmonitor_of_pool(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F15U%3D","line":719,"updated":"2013-01-02 19:46:48.000000000","message":"self.assertEqual(res[\u0027stats\u0027], expected)","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":726,"context_line":"                    data \u003d {\"health_monitor\": {"},{"line_number":727,"context_line":"                            \"id\": monitor1[\u0027health_monitor\u0027][\u0027id\u0027],"},{"line_number":728,"context_line":"                            \u0027tenant_id\u0027: self._tenant_id}}"},{"line_number":729,"context_line":"                    req \u003d \\"},{"line_number":730,"context_line":"                        self.new_create_request(\"pools\","},{"line_number":731,"context_line":"                                                data,"},{"line_number":732,"context_line":"                                                fmt\u003d\u0027json\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F15A%3D","line":729,"updated":"2013-01-02 19:46:48.000000000","message":"HACKING does not allow line continuations.  Consider:\n\nreq \u003d self.new_create_request(\n    \"pools\",\n    data,\n    ...\n)","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":738,"context_line":"                    data \u003d {\"health_monitor\": {"},{"line_number":739,"context_line":"                            \"id\": monitor2[\u0027health_monitor\u0027][\u0027id\u0027],"},{"line_number":740,"context_line":"                            \u0027tenant_id\u0027: self._tenant_id}}"},{"line_number":741,"context_line":"                    req \u003d \\"},{"line_number":742,"context_line":"                        self.new_create_request(\"pools\","},{"line_number":743,"context_line":"                                                data,"},{"line_number":744,"context_line":"                                                fmt\u003d\u0027json\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F148%3D","line":741,"updated":"2013-01-02 19:46:48.000000000","message":"HACKING compliance needed","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":747,"context_line":"                    res \u003d req.get_response(self.ext_api)"},{"line_number":748,"context_line":"                    self.assertEqual(res.status_int, 201)"},{"line_number":749,"context_line":""},{"line_number":750,"context_line":"                    req \u003d  \\"},{"line_number":751,"context_line":"                        self.new_show_request(\u0027pools\u0027,"},{"line_number":752,"context_line":"                                              pool[\u0027pool\u0027][\u0027id\u0027],"},{"line_number":753,"context_line":"                                              fmt\u003d\u0027json\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F144%3D","line":750,"updated":"2013-01-02 19:46:48.000000000","message":"HACKING compliance needed","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":753,"context_line":"                                              fmt\u003d\u0027json\u0027)"},{"line_number":754,"context_line":"                    res \u003d self.deserialize(\u0027json\u0027,"},{"line_number":755,"context_line":"                                           req.get_response(self.ext_api))"},{"line_number":756,"context_line":"                    self.assertTrue(monitor1[\u0027health_monitor\u0027][\u0027id\u0027]"},{"line_number":757,"context_line":"                                    in res[\u0027pool\u0027][\u0027health_monitors\u0027])"},{"line_number":758,"context_line":"                    self.assertTrue(monitor2[\u0027health_monitor\u0027][\u0027id\u0027]"},{"line_number":759,"context_line":"                                    in res[\u0027pool\u0027][\u0027health_monitors\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F13Y%3D","line":756,"updated":"2013-01-02 19:46:48.000000000","message":"assertIn()","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":755,"context_line":"                                           req.get_response(self.ext_api))"},{"line_number":756,"context_line":"                    self.assertTrue(monitor1[\u0027health_monitor\u0027][\u0027id\u0027]"},{"line_number":757,"context_line":"                                    in res[\u0027pool\u0027][\u0027health_monitors\u0027])"},{"line_number":758,"context_line":"                    self.assertTrue(monitor2[\u0027health_monitor\u0027][\u0027id\u0027]"},{"line_number":759,"context_line":"                                    in res[\u0027pool\u0027][\u0027health_monitors\u0027])"},{"line_number":760,"context_line":""},{"line_number":761,"context_line":"    def test_delete_healthmonitor_of_pool(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F13U%3D","line":758,"updated":"2013-01-02 19:46:48.000000000","message":"assertIn()","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":766,"context_line":"                    data \u003d {\"health_monitor\": {"},{"line_number":767,"context_line":"                            \"id\": monitor1[\u0027health_monitor\u0027][\u0027id\u0027],"},{"line_number":768,"context_line":"                            \u0027tenant_id\u0027: self._tenant_id}}"},{"line_number":769,"context_line":"                    req \u003d \\"},{"line_number":770,"context_line":"                        self.new_create_request(\"pools\","},{"line_number":771,"context_line":"                                                data,"},{"line_number":772,"context_line":"                                                fmt\u003d\u0027json\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F140%3D","line":769,"updated":"2013-01-02 19:46:48.000000000","message":"HACKING compliance needed","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":778,"context_line":"                    data \u003d {\"health_monitor\": {"},{"line_number":779,"context_line":"                            \"id\": monitor2[\u0027health_monitor\u0027][\u0027id\u0027],"},{"line_number":780,"context_line":"                            \u0027tenant_id\u0027: self._tenant_id}}"},{"line_number":781,"context_line":"                    req \u003d \\"},{"line_number":782,"context_line":"                        self.new_create_request(\"pools\","},{"line_number":783,"context_line":"                                                data,"},{"line_number":784,"context_line":"                                                fmt\u003d\u0027json\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F14w%3D","line":781,"updated":"2013-01-02 19:46:48.000000000","message":"HACKING compliance needed","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":788,"context_line":"                    self.assertEqual(res.status_int, 201)"},{"line_number":789,"context_line":""},{"line_number":790,"context_line":"                    # remove one of healthmonitor from the pool"},{"line_number":791,"context_line":"                    req \u003d \\"},{"line_number":792,"context_line":"                        self.new_delete_request("},{"line_number":793,"context_line":"                            \"pools\","},{"line_number":794,"context_line":"                            fmt\u003d\u0027json\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F14s%3D","line":791,"updated":"2013-01-02 19:46:48.000000000","message":"HACKING compliance needed","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":798,"context_line":"                    res \u003d req.get_response(self.ext_api)"},{"line_number":799,"context_line":"                    self.assertEqual(res.status_int, 204)"},{"line_number":800,"context_line":""},{"line_number":801,"context_line":"                    req \u003d  \\"},{"line_number":802,"context_line":"                        self.new_show_request(\u0027pools\u0027,"},{"line_number":803,"context_line":"                                              pool[\u0027pool\u0027][\u0027id\u0027],"},{"line_number":804,"context_line":"                                              fmt\u003d\u0027json\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F14k%3D","line":801,"updated":"2013-01-02 19:46:48.000000000","message":"HACKING compliance needed","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":804,"context_line":"                                              fmt\u003d\u0027json\u0027)"},{"line_number":805,"context_line":"                    res \u003d self.deserialize(\u0027json\u0027,"},{"line_number":806,"context_line":"                                           req.get_response(self.ext_api))"},{"line_number":807,"context_line":"                    self.assertTrue(not (monitor1[\u0027health_monitor\u0027][\u0027id\u0027]"},{"line_number":808,"context_line":"                                    in res[\u0027pool\u0027][\u0027health_monitors\u0027]))"},{"line_number":809,"context_line":"                    self.assertTrue(monitor2[\u0027health_monitor\u0027][\u0027id\u0027]"},{"line_number":810,"context_line":"                                    in res[\u0027pool\u0027][\u0027health_monitors\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F14M%3D","line":807,"updated":"2013-01-02 19:46:48.000000000","message":"self.assertNotIn()","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":806,"context_line":"                                           req.get_response(self.ext_api))"},{"line_number":807,"context_line":"                    self.assertTrue(not (monitor1[\u0027health_monitor\u0027][\u0027id\u0027]"},{"line_number":808,"context_line":"                                    in res[\u0027pool\u0027][\u0027health_monitors\u0027]))"},{"line_number":809,"context_line":"                    self.assertTrue(monitor2[\u0027health_monitor\u0027][\u0027id\u0027]"},{"line_number":810,"context_line":"                                    in res[\u0027pool\u0027][\u0027health_monitors\u0027])"},{"line_number":811,"context_line":""},{"line_number":812,"context_line":"    def test_create_loadbalancer(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F14A%3D","line":809,"updated":"2013-01-02 19:46:48.000000000","message":"self.assertIn()","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":838,"context_line":"                                                  \u00273\u0027,"},{"line_number":839,"context_line":"                                                  True)"},{"line_number":840,"context_line":"                health_monitor \u003d self.deserialize(\u0027json\u0027, req)"},{"line_number":841,"context_line":"                self.assertTrue(req.status_int \u003c 400)"},{"line_number":842,"context_line":""},{"line_number":843,"context_line":"                # Associate the health_monitor to the pool"},{"line_number":844,"context_line":"                data \u003d {\"health_monitor\": {"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F13c%3D","line":841,"updated":"2013-01-02 19:46:48.000000000","message":"This is check is to generic.\n\nself.assertEqual(req.status_int, 200)\n\nor \nself.assertIn(req.status_int, [200, ...])","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":860,"context_line":"                                                req.get_response(self.ext_api))"},{"line_number":861,"context_line":"                member1 \u003d self.deserialize(\u0027json\u0027, res1)"},{"line_number":862,"context_line":"                member2 \u003d self.deserialize(\u0027json\u0027, res2)"},{"line_number":863,"context_line":"                self.assertTrue(member1[\u0027member\u0027][\u0027id\u0027] in"},{"line_number":864,"context_line":"                                pool_updated[\u0027pool\u0027][\u0027members\u0027])"},{"line_number":865,"context_line":"                self.assertTrue(member2[\u0027member\u0027][\u0027id\u0027] in"},{"line_number":866,"context_line":"                                pool_updated[\u0027pool\u0027][\u0027members\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F13o%3D","line":863,"updated":"2013-01-02 19:46:48.000000000","message":"assertIn()","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":862,"context_line":"                member2 \u003d self.deserialize(\u0027json\u0027, res2)"},{"line_number":863,"context_line":"                self.assertTrue(member1[\u0027member\u0027][\u0027id\u0027] in"},{"line_number":864,"context_line":"                                pool_updated[\u0027pool\u0027][\u0027members\u0027])"},{"line_number":865,"context_line":"                self.assertTrue(member2[\u0027member\u0027][\u0027id\u0027] in"},{"line_number":866,"context_line":"                                pool_updated[\u0027pool\u0027][\u0027members\u0027])"},{"line_number":867,"context_line":"                self.assertTrue(health_monitor[\u0027health_monitor\u0027][\u0027id\u0027] in"},{"line_number":868,"context_line":"                                pool_updated[\u0027pool\u0027][\u0027health_monitors\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F13w%3D","line":865,"updated":"2013-01-02 19:46:48.000000000","message":"assertIn()","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":864,"context_line":"                                pool_updated[\u0027pool\u0027][\u0027members\u0027])"},{"line_number":865,"context_line":"                self.assertTrue(member2[\u0027member\u0027][\u0027id\u0027] in"},{"line_number":866,"context_line":"                                pool_updated[\u0027pool\u0027][\u0027members\u0027])"},{"line_number":867,"context_line":"                self.assertTrue(health_monitor[\u0027health_monitor\u0027][\u0027id\u0027] in"},{"line_number":868,"context_line":"                                pool_updated[\u0027pool\u0027][\u0027health_monitors\u0027])"},{"line_number":869,"context_line":""},{"line_number":870,"context_line":"                req \u003d self.new_show_request(\u0027vips\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2F13s%3D","line":867,"updated":"2013-01-02 19:46:48.000000000","message":"assertIn()","commit_id":"68a5675661822833a49c34816ad9c5c8ee2ccfb7"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":51,"context_line":"    \"loadbalancerPlugin.LoadBalancerPlugin\""},{"line_number":52,"context_line":")"},{"line_number":53,"context_line":"ROOTDIR \u003d os.path.dirname(os.path.dirname(__file__))"},{"line_number":54,"context_line":"ETCDIR \u003d os.path.join(ROOTDIR, \u0027etc\u0027)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"extensions_path \u003d \u0027:\u0027.join(quantum.extensions.__path__)"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FxGU%3D","line":54,"updated":"2013-01-06 22:32:19.000000000","message":"probably you did need to copy the conf files because these variables were not pointing to the correct directory.\nIf that is case, I\u0027d rather fix these constants to point to the correct directories, rather than copying over the files.","commit_id":"10c5707d9c62f0df60a97455b2ded4fd901aa933"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":51,"context_line":"    \"loadbalancerPlugin.LoadBalancerPlugin\""},{"line_number":52,"context_line":")"},{"line_number":53,"context_line":"ROOTDIR \u003d os.path.dirname(os.path.dirname(__file__))"},{"line_number":54,"context_line":"ETCDIR \u003d os.path.join(ROOTDIR, \u0027etc\u0027)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"extensions_path \u003d \u0027:\u0027.join(quantum.extensions.__path__)"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAM3%2F%2FwBg%3D","line":54,"updated":"2013-01-07 18:36:07.000000000","message":"This is probably the reason for which you had to create a copy of the \u0027test\u0027 configuration files.\nIs there a chance you can just fix the way in which the path is calculated and then avoiding copying over those file (I think it\u0027s possible, but wanted to check with you)","commit_id":"2ca74534c08e392bf855bafdd4f6524284cfc7e9"},{"author":{"_account_id":5983,"name":"Leon Cui","email":"lcui@vmware.com","username":"lcui"},"unresolved":false,"context_lines":[{"line_number":51,"context_line":"    \"loadbalancerPlugin.LoadBalancerPlugin\""},{"line_number":52,"context_line":")"},{"line_number":53,"context_line":"ROOTDIR \u003d os.path.dirname(os.path.dirname(__file__))"},{"line_number":54,"context_line":"ETCDIR \u003d os.path.join(ROOTDIR, \u0027etc\u0027)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"extensions_path \u003d \u0027:\u0027.join(quantum.extensions.__path__)"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAM3%2F%2FvgQ%3D","line":54,"in_reply_to":"AAAAM3%2F%2FwBg%3D","updated":"2013-01-08 02:03:56.000000000","message":"Salvatore,\nsorry I missed your comment in patch set 10.\nI\u0027ll use ../.. to locate the original test configuration file.","commit_id":"2ca74534c08e392bf855bafdd4f6524284cfc7e9"}],"quantum/tests/unit/db/loadbalancer/test_db_loadbalancer.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import contextlib"},{"line_number":17,"context_line":"import logging"},{"line_number":18,"context_line":"import os"},{"line_number":19,"context_line":"import unittest2"},{"line_number":20,"context_line":"import webob.exc"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fu1c%3D","line":18,"updated":"2013-01-08 12:25:05.000000000","message":"there should be a new line here before the unittest2","commit_id":"bee2ca1cbab614a479d2d67c7bd2c081417d6e01"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":19,"context_line":"import unittest2"},{"line_number":20,"context_line":"import webob.exc"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import quantum"},{"line_number":23,"context_line":"from quantum import context"},{"line_number":24,"context_line":"from quantum.api.extensions import PluginAwareExtensionManager"},{"line_number":25,"context_line":"from quantum.api.extensions import ExtensionMiddleware"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fu1Y%3D","line":22,"updated":"2013-01-08 12:25:05.000000000","message":"why do we need import quantum?","commit_id":"bee2ca1cbab614a479d2d67c7bd2c081417d6e01"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":22,"context_line":"import quantum"},{"line_number":23,"context_line":"from quantum import context"},{"line_number":24,"context_line":"from quantum.api.extensions import PluginAwareExtensionManager"},{"line_number":25,"context_line":"from quantum.api.extensions import ExtensionMiddleware"},{"line_number":26,"context_line":"from quantum.api.v2 import attributes"},{"line_number":27,"context_line":"from quantum.api.v2.attributes import ATTR_NOT_SPECIFIED"},{"line_number":28,"context_line":"from quantum.api.v2.router import APIRouter"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fuvo%3D","line":25,"updated":"2013-01-08 13:55:22.000000000","message":"L.24 and L.25 needs to be swapped.","commit_id":"bee2ca1cbab614a479d2d67c7bd2c081417d6e01"}],"quantum/tests/unit/test_api_v2.py":[{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"962d4933f3de33e883892be2f8999b318ef104d1","unresolved":false,"context_lines":[{"line_number":862,"context_line":"        self.assertFalse(\u0027v2attrs:something_else\u0027 in net)"},{"line_number":863,"context_line":""},{"line_number":864,"context_line":""},{"line_number":865,"context_line":"class ControllerTestCase(unittest.TestCase):"},{"line_number":866,"context_line":""},{"line_number":867,"context_line":"    def test_get_plugin_core_plugin(self):"},{"line_number":868,"context_line":"        class DummyCorePlugin(object):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMH%2F%2FwAk%3D","line":865,"updated":"2012-11-27 12:34:46.000000000","message":"outdated chunk, please remove","commit_id":"c3ac466761033d088917e462a989336cd5e235fb"}],"quantum/tests/unit/test_attributes.py":[{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":371,"context_line":"        msg \u003d attributes._validate_uuid(\u002700000000-ffff-ffff-ffff-000000000000\u0027)"},{"line_number":372,"context_line":"        self.assertIsNone(msg)"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"    def test_uuid_list(self):"},{"line_number":375,"context_line":"        # check not a list"},{"line_number":376,"context_line":"        uuids \u003d [None,"},{"line_number":377,"context_line":"                 123,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2Fu70%3D","line":374,"updated":"2012-11-28 03:18:44.000000000","message":"Please change name to \"test_validate_uuid_list\"","commit_id":"995070ecaf83afd0467b2ee3ee6802bd602adca9"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":414,"context_line":"            msg \u003d attributes._validate_uuid_list(uuid_list)"},{"line_number":415,"context_line":"            self.assertEquals(msg, None)"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    def test_dict(self):"},{"line_number":418,"context_line":"        msg \u003d attributes._validate_dict(None)"},{"line_number":419,"context_line":"        self.assertEquals(msg, \"\u0027None\u0027 is not a dictionary\")"},{"line_number":420,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2Fu7w%3D","line":417,"updated":"2012-11-28 03:18:44.000000000","message":"Please change name to \"test_validate_dict\"","commit_id":"995070ecaf83afd0467b2ee3ee6802bd602adca9"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"962d4933f3de33e883892be2f8999b318ef104d1","unresolved":false,"context_lines":[{"line_number":414,"context_line":"            msg \u003d attributes._validate_uuid_list(uuid_list)"},{"line_number":415,"context_line":"            self.assertEquals(msg, None)"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    def test_dict(self):"},{"line_number":418,"context_line":"        msg \u003d attributes._validate_dict(None)"},{"line_number":419,"context_line":"        self.assertEquals(msg, \"\u0027None\u0027 is not a dictionary\")"},{"line_number":420,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2Fu0M%3D","line":417,"in_reply_to":"AAAAMH%2F%2Fu7w%3D","updated":"2012-11-28 07:26:51.000000000","message":"this part of a patch goes from Oleg Bondarev\u0027s extension patch, so I think Leon just needs to keep track of Oleg\u0027s patch updates","commit_id":"995070ecaf83afd0467b2ee3ee6802bd602adca9"}],"quantum/tests/unit/test_db_loadbalancer.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def tearDown(self):"},{"line_number":119,"context_line":"        super(LoadBalancerPluginDbTestCase, self).tearDown()"},{"line_number":120,"context_line":"        db.clear_db()"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        db._ENGINE \u003d None"},{"line_number":123,"context_line":"        db._MAKER \u003d None"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2F%2BC4%3D","line":120,"updated":"2012-12-04 15:18:33.000000000","message":"Can you please look at tearDown from quantum/tests/unit/test_db_plugin.py. There were some fixes to help deal with memory utulization.","commit_id":"9657567c9addd590844348152b9cf2e47e723593"}]}
