)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"047ef9dd3aada7a9e09523971e2f0c5e1aea0748","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2014-02-12 10:54:24 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"LBaaS L7 model"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: If87041daf0d983cc3eefaa5274cb690a331dbe55"},{"line_number":10,"context_line":"Implements: blueprint lbaas-l7-rules"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"AAAAUX%2F%2Fie0%3D","line":8,"updated":"2014-02-13 12:09:18.000000000","message":"please briefly describe what was added/changed.\nAlso DocImpact should be added as new API resources are introduced","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"3c433cd9e1443e85c7bb3649a106b4adc01ce8e5","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2014-02-12 10:54:24 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"LBaaS L7 model"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: If87041daf0d983cc3eefaa5274cb690a331dbe55"},{"line_number":10,"context_line":"Implements: blueprint lbaas-l7-rules"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"AAAAUX%2F%2FDiA%3D","line":8,"in_reply_to":"AAAAUX%2F%2FE1U%3D","updated":"2014-02-17 12:36:52.000000000","message":"Sure: https://wiki.openstack.org/wiki/GitCommitMessages - this also explains what DocImpact is and when it should be used","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"8c475f6458e44a5cfae189cb0bd4fd541bec1fef","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2014-02-12 10:54:24 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"LBaaS L7 model"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: If87041daf0d983cc3eefaa5274cb690a331dbe55"},{"line_number":10,"context_line":"Implements: blueprint lbaas-l7-rules"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"AAAAUX%2F%2FE1U%3D","line":8,"in_reply_to":"AAAAUX%2F%2Fie0%3D","updated":"2014-02-17 09:40:53.000000000","message":"can you please point me to any reference that will help me here?","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"}],"neutron/api/v2/base.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"9c7d8147bea53bb92cef3f18c9e96a3684ce285e","unresolved":false,"context_lines":[{"line_number":532,"context_line":""},{"line_number":533,"context_line":"        body argument must be the deserialized body."},{"line_number":534,"context_line":"        \"\"\""},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"        collection \u003d resource + \"s\""},{"line_number":537,"context_line":"        if not body:"},{"line_number":538,"context_line":"            raise webob.exc.HTTPBadRequest(_(\"Resource body required\"))"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUH%2F9gaY%3D","line":535,"updated":"2014-02-06 13:30:59.000000000","message":"unrelated","commit_id":"7382a7c92291ea0fc220216f407f291686568792"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"187cc1574d5574932bcfd46ad6da39ed0aebbf4f","unresolved":false,"context_lines":[{"line_number":532,"context_line":""},{"line_number":533,"context_line":"        body argument must be the deserialized body."},{"line_number":534,"context_line":"        \"\"\""},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"        collection \u003d resource + \"s\""},{"line_number":537,"context_line":"        if not body:"},{"line_number":538,"context_line":"            raise webob.exc.HTTPBadRequest(_(\"Resource body required\"))"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2F1j8%3D","line":535,"in_reply_to":"AAAAUH%2F9gaY%3D","updated":"2014-02-10 14:06:51.000000000","message":"You are right - I did some changes here but removed them since i found a better solution. How can I \"revert\" this change?","commit_id":"7382a7c92291ea0fc220216f407f291686568792"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"047ef9dd3aada7a9e09523971e2f0c5e1aea0748","unresolved":false,"context_lines":[{"line_number":532,"context_line":""},{"line_number":533,"context_line":"        body argument must be the deserialized body."},{"line_number":534,"context_line":"        \"\"\""},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"        collection \u003d resource + \"s\""},{"line_number":537,"context_line":"        if not body:"},{"line_number":538,"context_line":"            raise webob.exc.HTTPBadRequest(_(\"Resource body required\"))"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2Fieg%3D","line":535,"updated":"2014-02-13 12:09:18.000000000","message":"just delete this line to revert the change you\u0027ve made accidentally","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"8c475f6458e44a5cfae189cb0bd4fd541bec1fef","unresolved":false,"context_lines":[{"line_number":532,"context_line":""},{"line_number":533,"context_line":"        body argument must be the deserialized body."},{"line_number":534,"context_line":"        \"\"\""},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"        collection \u003d resource + \"s\""},{"line_number":537,"context_line":"        if not body:"},{"line_number":538,"context_line":"            raise webob.exc.HTTPBadRequest(_(\"Resource body required\"))"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FI1Y%3D","line":535,"in_reply_to":"AAAAUX%2F%2Fieg%3D","updated":"2014-02-17 09:40:53.000000000","message":"ok","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"}],"neutron/db/loadbalancer/loadbalancer_db.py":[{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"29beaa84915fb1ee5605871acf035c1dc0795bde","unresolved":false,"context_lines":[{"line_number":39,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class L7Rule(model_base.BASEV2, models_v2.HasId):"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    \"\"\"Represents L7 Rule.\"\"\""},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F80uw%3D","line":42,"updated":"2013-12-19 22:19:47.000000000","message":"Rule and policy should have tenant, otherwise one tenant could browse rules of another.","commit_id":"31c54ee1417ebaf9715a2d49ef214d351e824ed6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"02440a2eaaad6a4d52aca8d753962ea39ae575f6","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class L7Rule(model_base.BASEV2, models_v2.HasId):"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    \"\"\"Represents L7 Rule.\"\"\""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    l7_policy_id \u003d sa.Column(sa.String(36),"},{"line_number":47,"context_line":"                             sa.ForeignKey(\"l7policys.id\"),"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F84Ao%3D","line":44,"updated":"2013-12-19 10:34:13.000000000","message":"nit: an L7 rule","commit_id":"31c54ee1417ebaf9715a2d49ef214d351e824ed6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"02440a2eaaad6a4d52aca8d753962ea39ae575f6","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"class L7Policy(model_base.BASEV2, models_v2.HasId):"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    \"\"\"Represents L7 Policy.\"\"\""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    name \u003d sa.Column(sa.String(255), nullable\u003dFalse)"},{"line_number":63,"context_line":"    rules \u003d orm.relationship(L7Rule, backref\u003d\"l7policys\","}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F838Q%3D","line":60,"updated":"2013-12-19 10:34:13.000000000","message":"\"There\u0027s no blank line either before or after the docstring.\" \nhttp://www.python.org/dev/peps/pep-0257/#one-line-docstrings","commit_id":"31c54ee1417ebaf9715a2d49ef214d351e824ed6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"02440a2eaaad6a4d52aca8d753962ea39ae575f6","unresolved":false,"context_lines":[{"line_number":58,"context_line":"class L7Policy(model_base.BASEV2, models_v2.HasId):"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    \"\"\"Represents L7 Policy.\"\"\""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    name \u003d sa.Column(sa.String(255), nullable\u003dFalse)"},{"line_number":63,"context_line":"    rules \u003d orm.relationship(L7Rule, backref\u003d\"l7policys\","},{"line_number":64,"context_line":"                             cascade\u003d\"all, delete-orphan\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F83%2B8%3D","line":61,"updated":"2013-12-19 10:34:13.000000000","message":"__tablename__ \u003d \u0027l7policies\u0027","commit_id":"31c54ee1417ebaf9715a2d49ef214d351e824ed6"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"29beaa84915fb1ee5605871acf035c1dc0795bde","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                             cascade\u003d\"all, delete-orphan\")"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"class L7VipPolicyAssociation(model_base.BASEV2):"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    \"\"\"Represents an association of a vip to L7 Policy.\"\"\""},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F80vs%3D","line":67,"updated":"2013-12-19 22:19:47.000000000","message":"I think we need VipPoolAssociation.\nIt may have l7policy_id or not.","commit_id":"31c54ee1417ebaf9715a2d49ef214d351e824ed6"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"29beaa84915fb1ee5605871acf035c1dc0795bde","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    l7_policy_id \u003d sa.Column(sa.String(36),"},{"line_number":72,"context_line":"                             sa.ForeignKey(\"l7policys.id\"),"},{"line_number":73,"context_line":"                             nullable\u003dFalse,"},{"line_number":74,"context_line":"                             primary_key\u003dTrue)"},{"line_number":75,"context_line":"    vip_id \u003d sa.Column(sa.String(36),"},{"line_number":76,"context_line":"                       sa.ForeignKey(\"vips.id\"),"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F80v4%3D","line":73,"updated":"2013-12-19 22:19:47.000000000","message":"I think this should be nullable, for instance, for default vip-pool association.","commit_id":"31c54ee1417ebaf9715a2d49ef214d351e824ed6"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"29beaa84915fb1ee5605871acf035c1dc0795bde","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    vip_id \u003d sa.Column(sa.String(36),"},{"line_number":76,"context_line":"                       sa.ForeignKey(\"vips.id\"),"},{"line_number":77,"context_line":"                       nullable\u003dFalse,"},{"line_number":78,"context_line":"                       primary_key\u003dTrue)"},{"line_number":79,"context_line":"    pool_id \u003d sa.Column(sa.String(36),"},{"line_number":80,"context_line":"                        sa.ForeignKey(\"pools.id\"),"},{"line_number":81,"context_line":"                        nullable\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F80vw%3D","line":78,"updated":"2013-12-19 22:19:47.000000000","message":"vip_id, pool_id both form a PK.","commit_id":"31c54ee1417ebaf9715a2d49ef214d351e824ed6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"02440a2eaaad6a4d52aca8d753962ea39ae575f6","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"class PoolStatistics(model_base.BASEV2):"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    \"\"\"Represents pool statistics.\"\"\""},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    pool_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\"pools.id\"),"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F8388%3D","line":100,"updated":"2013-12-19 10:34:13.000000000","message":"seems it\u0027s not a pep257 requirement to put blank line before a one-liner docstring. Please remove all unrelated changes","commit_id":"31c54ee1417ebaf9715a2d49ef214d351e824ed6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"02440a2eaaad6a4d52aca8d753962ea39ae575f6","unresolved":false,"context_lines":[{"line_number":367,"context_line":""},{"line_number":368,"context_line":"    def _create_port_for_vip(self, context, vip_db, subnet_id, ip_address):"},{"line_number":369,"context_line":"            # resolve subnet and create port"},{"line_number":370,"context_line":"        subnet \u003d self._core_plugin.get_subnet(context, subnet_id)"},{"line_number":371,"context_line":"        fixed_ip \u003d {\u0027subnet_id\u0027: subnet[\u0027id\u0027]}"},{"line_number":372,"context_line":"        if ip_address and ip_address !\u003d attributes.ATTR_NOT_SPECIFIED:"},{"line_number":373,"context_line":"            fixed_ip[\u0027ip_address\u0027] \u003d ip_address"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F833s%3D","line":370,"updated":"2013-12-19 10:34:13.000000000","message":"please remove unrelated changes #370-#387 - it makes it harder to review.","commit_id":"31c54ee1417ebaf9715a2d49ef214d351e824ed6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"02440a2eaaad6a4d52aca8d753962ea39ae575f6","unresolved":false,"context_lines":[{"line_number":386,"context_line":"        port \u003d self._core_plugin.create_port(context, {\u0027port\u0027: port_data})"},{"line_number":387,"context_line":"        vip_db.port_id \u003d port[\u0027id\u0027]"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"    def _make_l7policy_dict(self, l7policy, fields\u003dNone):"},{"line_number":390,"context_line":"        res \u003d {\u0027id\u0027: l7policy[\u0027id\u0027],"},{"line_number":391,"context_line":"               \u0027name\u0027: l7policy[\u0027name\u0027]}"},{"line_number":392,"context_line":"        return self._fields(res, fields)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F832A%3D","line":389,"updated":"2013-12-19 10:34:13.000000000","message":"consider appending l7 related methods at the end of the file","commit_id":"31c54ee1417ebaf9715a2d49ef214d351e824ed6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"02440a2eaaad6a4d52aca8d753962ea39ae575f6","unresolved":false,"context_lines":[{"line_number":388,"context_line":""},{"line_number":389,"context_line":"    def _make_l7policy_dict(self, l7policy, fields\u003dNone):"},{"line_number":390,"context_line":"        res \u003d {\u0027id\u0027: l7policy[\u0027id\u0027],"},{"line_number":391,"context_line":"               \u0027name\u0027: l7policy[\u0027name\u0027]}"},{"line_number":392,"context_line":"        return self._fields(res, fields)"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"    def create_l7policy(self, context, l7policy):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F833g%3D","line":391,"updated":"2013-12-19 10:34:13.000000000","message":"probably makes sense to include list of rules","commit_id":"31c54ee1417ebaf9715a2d49ef214d351e824ed6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"02440a2eaaad6a4d52aca8d753962ea39ae575f6","unresolved":false,"context_lines":[{"line_number":392,"context_line":"        return self._fields(res, fields)"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"    def create_l7policy(self, context, l7policy):"},{"line_number":395,"context_line":"        v \u003d l7policy[\u0027l7policy\u0027]"},{"line_number":396,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":397,"context_line":"            l7p_db \u003d L7Policy(id\u003duuidutils.generate_uuid(),"},{"line_number":398,"context_line":"                              name\u003dv[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F832w%3D","line":395,"updated":"2013-12-19 10:34:13.000000000","message":"what stands for v? Seems it makes no sense. I guess initially it was a copy-paste failure from create_vip where v was a short for \u0027vip\u0027. Plese consider \u0027p\u0027 or \u0027policy\u0027 here.","commit_id":"31c54ee1417ebaf9715a2d49ef214d351e824ed6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"02440a2eaaad6a4d52aca8d753962ea39ae575f6","unresolved":false,"context_lines":[{"line_number":397,"context_line":"            l7p_db \u003d L7Policy(id\u003duuidutils.generate_uuid(),"},{"line_number":398,"context_line":"                              name\u003dv[\u0027name\u0027])"},{"line_number":399,"context_line":"            context.session.add(l7p_db)"},{"line_number":400,"context_line":"            context.session.flush()"},{"line_number":401,"context_line":"        return self._make_l7policy_dict(l7p_db)"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"    def update_l7policy(self, context, id, l7policy):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F8314%3D","line":400,"updated":"2013-12-19 10:34:13.000000000","message":"why need flush here?","commit_id":"31c54ee1417ebaf9715a2d49ef214d351e824ed6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"02440a2eaaad6a4d52aca8d753962ea39ae575f6","unresolved":false,"context_lines":[{"line_number":401,"context_line":"        return self._make_l7policy_dict(l7p_db)"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"    def update_l7policy(self, context, id, l7policy):"},{"line_number":404,"context_line":"        v \u003d l7policy[\u0027l7policy\u0027]"},{"line_number":405,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":406,"context_line":"            l7policy_db \u003d self._get_resource(context, L7Policy, id)"},{"line_number":407,"context_line":"            if v:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F831s%3D","line":404,"updated":"2013-12-19 10:34:13.000000000","message":"ditto on v. Here ant in below methods","commit_id":"31c54ee1417ebaf9715a2d49ef214d351e824ed6"},{"author":{"_account_id":7317,"name":"Bo Lin","email":"linb@vmware.com","username":"berlin"},"change_message_id":"04ec74bb21422dcaed17ed627a33ee12804d6b64","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                                           ondelete\u003d\"CASCADE\"),"},{"line_number":72,"context_line":"                             nullable\u003dFalse,"},{"line_number":73,"context_line":"                             primary_key\u003dTrue)"},{"line_number":74,"context_line":"    vip_id \u003d sa.Column(sa.String(36),"},{"line_number":75,"context_line":"                       sa.ForeignKey(\"vips.id\", ondelete\u003d\"CASCADE\"),"},{"line_number":76,"context_line":"                       nullable\u003dFalse,"},{"line_number":77,"context_line":"                       primary_key\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAUH%2F%2FI6g%3D","line":74,"updated":"2014-01-17 07:13:50.000000000","message":"what\u0027s the relationship between vip and policy, M:N?","commit_id":"651765f189f7ddc771deaf1ddd224541f5f02689"},{"author":{"_account_id":7317,"name":"Bo Lin","email":"linb@vmware.com","username":"berlin"},"change_message_id":"04ec74bb21422dcaed17ed627a33ee12804d6b64","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                       sa.ForeignKey(\"vips.id\", ondelete\u003d\"CASCADE\"),"},{"line_number":76,"context_line":"                       nullable\u003dFalse,"},{"line_number":77,"context_line":"                       primary_key\u003dTrue)"},{"line_number":78,"context_line":"    pool_id \u003d sa.Column(sa.String(36),"},{"line_number":79,"context_line":"                        sa.ForeignKey(\"pools.id\"),"},{"line_number":80,"context_line":"                        nullable\u003dTrue)"},{"line_number":81,"context_line":"    # Enum (redirect_to_pool,reject,modify_content)?"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAUH%2F%2FI7U%3D","line":78,"updated":"2014-01-17 07:13:50.000000000","message":"whether the pool_id is necessary as you describe the table association between vip and policy. also what should handle if delete a pool which is being in VipPolicyAssociation association state?","commit_id":"651765f189f7ddc771deaf1ddd224541f5f02689"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"7e90e4ac75f5f4db48f3ff9ef7201ae48998ee52","unresolved":false,"context_lines":[{"line_number":43,"context_line":"class L7Rule(model_base.BASEV2,"},{"line_number":44,"context_line":"             models_v2.HasId,"},{"line_number":45,"context_line":"             models_v2.HasTenant,"},{"line_number":46,"context_line":"             models_v2.HasStatusDescription):"},{"line_number":47,"context_line":"    \"\"\"Represents L7 Rule.\"\"\""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    l7_policy_id \u003d sa.Column(sa.String(36),"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F%2Brbc%3D","line":46,"updated":"2014-01-23 10:38:52.000000000","message":"What does status of L7Rule mean? Isn\u0027t it a pure db object?","commit_id":"935049a69a2237a451bf4d790a242d2689cf3a05"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"7e90e4ac75f5f4db48f3ff9ef7201ae48998ee52","unresolved":false,"context_lines":[{"line_number":62,"context_line":"class L7Policy(model_base.BASEV2,"},{"line_number":63,"context_line":"               models_v2.HasId,"},{"line_number":64,"context_line":"               models_v2.HasTenant,"},{"line_number":65,"context_line":"               models_v2.HasStatusDescription):"},{"line_number":66,"context_line":"    \"\"\"Represents L7 Policy.\"\"\""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    __tablename__ \u003d \u0027l7policies\u0027"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F%2BrbQ%3D","line":65,"updated":"2014-01-23 10:38:52.000000000","message":"ditto on status","commit_id":"935049a69a2237a451bf4d790a242d2689cf3a05"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"7e90e4ac75f5f4db48f3ff9ef7201ae48998ee52","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                             cascade\u003d\"all, delete-orphan\")"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"class L7VipPolicyAssociation(model_base.BASEV2, models_v2.HasTenant):"},{"line_number":78,"context_line":"    \"\"\"Represents an association of a vip to L7 Policy.\"\"\""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    l7_policy_id \u003d sa.Column(sa.String(36),"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F%2BrGI%3D","line":77,"updated":"2014-01-23 10:38:52.000000000","message":"Another question: should we have status(_description) fields in association table?","commit_id":"935049a69a2237a451bf4d790a242d2689cf3a05"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"4179de59b49fe0f3ce409b2abbc879b1001fcab6","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                             cascade\u003d\"all, delete-orphan\")"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"class L7VipPolicyAssociation(model_base.BASEV2, models_v2.HasTenant):"},{"line_number":78,"context_line":"    \"\"\"Represents an association of a vip to L7 Policy.\"\"\""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    l7_policy_id \u003d sa.Column(sa.String(36),"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F%2BuNw%3D","line":77,"updated":"2014-01-22 19:48:12.000000000","message":"I\u0027d think what we really need here is:\nclass VipPoolAssociation\n  vip_id\n  pool_id (nullable)\n  l7policy_id (nullable, where NULL means \u0027default pool\u0027)\n\nSo, in my opinion the PK is vip_id+pool_id\n\nAlso i\u0027m not sure action should be an attribute of association and not policy.","commit_id":"935049a69a2237a451bf4d790a242d2689cf3a05"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"7e90e4ac75f5f4db48f3ff9ef7201ae48998ee52","unresolved":false,"context_lines":[{"line_number":231,"context_line":""},{"line_number":232,"context_line":"class LoadBalancerPluginDb(LoadBalancerPluginBase,"},{"line_number":233,"context_line":"                           base_db.CommonDbMixin):"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    \"\"\"Wraps loadbalancer with SQLAlchemy models."},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    A class that wraps the implementation of the Neutron loadbalancer"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F%2Bre0%3D","line":234,"updated":"2014-01-23 10:38:52.000000000","message":"unrelated","commit_id":"935049a69a2237a451bf4d790a242d2689cf3a05"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"7e90e4ac75f5f4db48f3ff9ef7201ae48998ee52","unresolved":false,"context_lines":[{"line_number":369,"context_line":"            sess_qry.filter_by(vip_id\u003dvip_id).delete()"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"    def _create_port_for_vip(self, context, vip_db, subnet_id, ip_address):"},{"line_number":372,"context_line":"            # resolve subnet and create port"},{"line_number":373,"context_line":"        subnet \u003d self._core_plugin.get_subnet(context, subnet_id)"},{"line_number":374,"context_line":"        fixed_ip \u003d {\u0027subnet_id\u0027: subnet[\u0027id\u0027]}"},{"line_number":375,"context_line":"        if ip_address and ip_address !\u003d attributes.ATTR_NOT_SPECIFIED:"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F%2BreI%3D","line":372,"updated":"2014-01-23 10:38:52.000000000","message":"ok, I won\u0027t be not opposed to the below indentation fix though it is unrelated, but this comment indentation should be fixed as well.","commit_id":"935049a69a2237a451bf4d790a242d2689cf3a05"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"7e90e4ac75f5f4db48f3ff9ef7201ae48998ee52","unresolved":false,"context_lines":[{"line_number":856,"context_line":"        p \u003d l7policy[\u0027l7policy\u0027]"},{"line_number":857,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":858,"context_line":"            l7p_db \u003d L7Policy(id\u003duuidutils.generate_uuid(),"},{"line_number":859,"context_line":"                              status\u003dp[\u0027status\u0027],"},{"line_number":860,"context_line":"                              name\u003dp[\u0027name\u0027])"},{"line_number":861,"context_line":"            context.session.add(l7p_db)"},{"line_number":862,"context_line":"        return self._make_l7policy_dict(l7p_db)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F%2Brb4%3D","line":859,"updated":"2014-01-23 10:38:52.000000000","message":"status field can not be passed on create or update operations (see extension) (In case status field is still needed for l7policy)","commit_id":"935049a69a2237a451bf4d790a242d2689cf3a05"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"7e90e4ac75f5f4db48f3ff9ef7201ae48998ee52","unresolved":false,"context_lines":[{"line_number":864,"context_line":"    def update_l7policy(self, context, id, l7policy):"},{"line_number":865,"context_line":"        p \u003d l7policy[\u0027l7policy\u0027]"},{"line_number":866,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":867,"context_line":"            l7policy_db \u003d self._get_resource(context, L7Policy, id)"},{"line_number":868,"context_line":"            if p:"},{"line_number":869,"context_line":"                l7policy_db.update(p)"},{"line_number":870,"context_line":"        return self._make_l7policy_dict(l7policy_db)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F%2BraY%3D","line":867,"updated":"2014-01-23 10:38:52.000000000","message":"self.assert_modification_allowed(l7policy_db)?","commit_id":"935049a69a2237a451bf4d790a242d2689cf3a05"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"7e90e4ac75f5f4db48f3ff9ef7201ae48998ee52","unresolved":false,"context_lines":[{"line_number":905,"context_line":"            l7rule_db \u003d L7Rule(id\u003duuidutils.generate_uuid(),"},{"line_number":906,"context_line":"                               type\u003dr[\u0027type\u0027],"},{"line_number":907,"context_line":"                               value\u003dr[\u0027value\u0027],"},{"line_number":908,"context_line":"                               status\u003dr[\u0027status\u0027],"},{"line_number":909,"context_line":"                               tenant_id\u003dr[\u0027tenant_id\u0027],"},{"line_number":910,"context_line":"                               compare_type\u003dr[\u0027compare_type\u0027],"},{"line_number":911,"context_line":"                               position\u003dr.get(\u0027position\u0027),"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F%2BraE%3D","line":908,"updated":"2014-01-23 10:38:52.000000000","message":"ditto on status field","commit_id":"935049a69a2237a451bf4d790a242d2689cf3a05"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"7e90e4ac75f5f4db48f3ff9ef7201ae48998ee52","unresolved":false,"context_lines":[{"line_number":921,"context_line":"    def update_l7rule(self, context, id, l7rule):"},{"line_number":922,"context_line":"        r \u003d l7rule[\u0027l7rule\u0027]"},{"line_number":923,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":924,"context_line":"            l7rule_db \u003d self._get_resource(context, L7Rule, id)"},{"line_number":925,"context_line":"            if r:"},{"line_number":926,"context_line":"                l7rule_db.update(r)"},{"line_number":927,"context_line":"        return self._make_l7rule_dict(l7rule_db)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F%2BrZw%3D","line":924,"updated":"2014-01-23 10:38:52.000000000","message":"self.assert_modification_allowed(l7rule_db)?","commit_id":"935049a69a2237a451bf4d790a242d2689cf3a05"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"7e90e4ac75f5f4db48f3ff9ef7201ae48998ee52","unresolved":false,"context_lines":[{"line_number":963,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":964,"context_line":"            l7assoc_db \u003d self._get_l7assoc(context,"},{"line_number":965,"context_line":"                                           a[\u0027vip_id\u0027],"},{"line_number":966,"context_line":"                                           a[\u0027l7_policy_id\u0027])"},{"line_number":967,"context_line":"            if a:"},{"line_number":968,"context_line":"                l7assoc_db.update(a)"},{"line_number":969,"context_line":"        return self._make_l7assoc_dict(l7assoc_db)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F%2BrVA%3D","line":966,"updated":"2014-01-23 10:38:52.000000000","message":"self.assert_modification_allowed(l7assoc_db)?","commit_id":"935049a69a2237a451bf4d790a242d2689cf3a05"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"9c7d8147bea53bb92cef3f18c9e96a3684ce285e","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                             nullable\u003dFalse)"},{"line_number":52,"context_line":"    # type is half closed set which we can represnt an Enum"},{"line_number":53,"context_line":"    # (\"HEADER\",\"URL\",\"BODY\",...)"},{"line_number":54,"context_line":"    type \u003d sa.Column(sa.String(36), nullable\u003dFalse)"},{"line_number":55,"context_line":"    value \u003d sa.Column(sa.String(255), nullable\u003dFalse)"},{"line_number":56,"context_line":"    # compare_type is half closed set which we can represnt an Enum"},{"line_number":57,"context_line":"    # (\"REG_EXP\", \"EQ\", \"GT\", \"LT\",\"EQ_IGNORE_CASE\",...)"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUH%2F9gUs%3D","line":54,"updated":"2014-02-06 13:30:59.000000000","message":"can we define a closed set for the type in the extension?","commit_id":"7382a7c92291ea0fc220216f407f291686568792"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"187cc1574d5574932bcfd46ad6da39ed0aebbf4f","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                             nullable\u003dFalse)"},{"line_number":52,"context_line":"    # type is half closed set which we can represnt an Enum"},{"line_number":53,"context_line":"    # (\"HEADER\",\"URL\",\"BODY\",...)"},{"line_number":54,"context_line":"    type \u003d sa.Column(sa.String(36), nullable\u003dFalse)"},{"line_number":55,"context_line":"    value \u003d sa.Column(sa.String(255), nullable\u003dFalse)"},{"line_number":56,"context_line":"    # compare_type is half closed set which we can represnt an Enum"},{"line_number":57,"context_line":"    # (\"REG_EXP\", \"EQ\", \"GT\", \"LT\",\"EQ_IGNORE_CASE\",...)"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2F1is%3D","line":54,"in_reply_to":"AAAAUH%2F9gUs%3D","updated":"2014-02-10 14:06:51.000000000","message":"I am not sure that I get it..\nDo you suggest that \u0027type\u0027 will be Enum? This is why I added the comment - because I am not sure if it is Enum or not.\nI would like to see what the other guys think.","commit_id":"7382a7c92291ea0fc220216f407f291686568792"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"9c7d8147bea53bb92cef3f18c9e96a3684ce285e","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    value \u003d sa.Column(sa.String(255), nullable\u003dFalse)"},{"line_number":56,"context_line":"    # compare_type is half closed set which we can represnt an Enum"},{"line_number":57,"context_line":"    # (\"REG_EXP\", \"EQ\", \"GT\", \"LT\",\"EQ_IGNORE_CASE\",...)"},{"line_number":58,"context_line":"    compare_type \u003d sa.Column(sa.String(36), nullable\u003dFalse)"},{"line_number":59,"context_line":"    position \u003d sa.Column(sa.Integer, nullable\u003dFalse)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUH%2F9gUY%3D","line":58,"updated":"2014-02-06 13:30:59.000000000","message":"same here","commit_id":"7382a7c92291ea0fc220216f407f291686568792"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"187cc1574d5574932bcfd46ad6da39ed0aebbf4f","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    value \u003d sa.Column(sa.String(255), nullable\u003dFalse)"},{"line_number":56,"context_line":"    # compare_type is half closed set which we can represnt an Enum"},{"line_number":57,"context_line":"    # (\"REG_EXP\", \"EQ\", \"GT\", \"LT\",\"EQ_IGNORE_CASE\",...)"},{"line_number":58,"context_line":"    compare_type \u003d sa.Column(sa.String(36), nullable\u003dFalse)"},{"line_number":59,"context_line":"    position \u003d sa.Column(sa.Integer, nullable\u003dFalse)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2F1ig%3D","line":58,"in_reply_to":"AAAAUH%2F9gUY%3D","updated":"2014-02-10 14:06:51.000000000","message":"see above","commit_id":"7382a7c92291ea0fc220216f407f291686568792"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"9c7d8147bea53bb92cef3f18c9e96a3684ce285e","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    __tablename__ \u003d \u0027l7policies\u0027"},{"line_number":69,"context_line":"    name \u003d sa.Column(sa.String(255), nullable\u003dFalse)"},{"line_number":70,"context_line":"    #rules \u003d orm.relationship(L7Rule, backref\u003d\"l7policies\","},{"line_number":71,"context_line":"    #                         cascade\u003d\"all, delete-orphan\")"},{"line_number":72,"context_line":"    rules \u003d orm.relationship(L7Rule, order_by\u003d\"L7Rule.position\","},{"line_number":73,"context_line":"                             collection_class\u003dordering_list(\u0027position\u0027),"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUH%2F9gZ4%3D","line":70,"updated":"2014-02-06 13:30:59.000000000","message":"please remove","commit_id":"7382a7c92291ea0fc220216f407f291686568792"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"187cc1574d5574932bcfd46ad6da39ed0aebbf4f","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    __tablename__ \u003d \u0027l7policies\u0027"},{"line_number":69,"context_line":"    name \u003d sa.Column(sa.String(255), nullable\u003dFalse)"},{"line_number":70,"context_line":"    #rules \u003d orm.relationship(L7Rule, backref\u003d\"l7policies\","},{"line_number":71,"context_line":"    #                         cascade\u003d\"all, delete-orphan\")"},{"line_number":72,"context_line":"    rules \u003d orm.relationship(L7Rule, order_by\u003d\"L7Rule.position\","},{"line_number":73,"context_line":"                             collection_class\u003dordering_list(\u0027position\u0027),"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2F1iI%3D","line":70,"in_reply_to":"AAAAUH%2F9gZ4%3D","updated":"2014-02-10 14:06:51.000000000","message":"OK","commit_id":"7382a7c92291ea0fc220216f407f291686568792"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"9c7d8147bea53bb92cef3f18c9e96a3684ce285e","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    pool_id \u003d sa.Column(sa.String(36),"},{"line_number":90,"context_line":"                        sa.ForeignKey(\"pools.id\"),"},{"line_number":91,"context_line":"                        nullable\u003dTrue)"},{"line_number":92,"context_line":"    # Enum (redirect_to_pool,reject,modify_content)?"},{"line_number":93,"context_line":"    action \u003d sa.Column(sa.String(36), nullable\u003dFalse)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUH%2F9gS0%3D","line":92,"updated":"2014-02-06 13:30:59.000000000","message":"closed set?","commit_id":"7382a7c92291ea0fc220216f407f291686568792"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"187cc1574d5574932bcfd46ad6da39ed0aebbf4f","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    pool_id \u003d sa.Column(sa.String(36),"},{"line_number":90,"context_line":"                        sa.ForeignKey(\"pools.id\"),"},{"line_number":91,"context_line":"                        nullable\u003dTrue)"},{"line_number":92,"context_line":"    # Enum (redirect_to_pool,reject,modify_content)?"},{"line_number":93,"context_line":"    action \u003d sa.Column(sa.String(36), nullable\u003dFalse)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2F1h4%3D","line":92,"in_reply_to":"AAAAUH%2F9gS0%3D","updated":"2014-02-10 14:06:51.000000000","message":"Again.. not sure, wating for the other guys to give their input.","commit_id":"7382a7c92291ea0fc220216f407f291686568792"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"9c7d8147bea53bb92cef3f18c9e96a3684ce285e","unresolved":false,"context_lines":[{"line_number":847,"context_line":"        res \u003d {\u0027tenant_id\u0027: l7policy[\u0027tenant_id\u0027],"},{"line_number":848,"context_line":"               \u0027id\u0027: l7policy[\u0027id\u0027],"},{"line_number":849,"context_line":"               \u0027name\u0027: l7policy[\u0027name\u0027]}"},{"line_number":850,"context_line":"        #rules \u003d self._get_l7rules_by_l7policy(context, l7policy[\u0027id\u0027])"},{"line_number":851,"context_line":"        res[\u0027rules\u0027] \u003d [self._make_l7rule_dict(rule)"},{"line_number":852,"context_line":"                        for rule in l7policy[\u0027rules\u0027]]"},{"line_number":853,"context_line":"        return self._fields(res, fields)"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUH%2F9gTs%3D","line":850,"updated":"2014-02-06 13:30:59.000000000","message":"please remove","commit_id":"7382a7c92291ea0fc220216f407f291686568792"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"187cc1574d5574932bcfd46ad6da39ed0aebbf4f","unresolved":false,"context_lines":[{"line_number":847,"context_line":"        res \u003d {\u0027tenant_id\u0027: l7policy[\u0027tenant_id\u0027],"},{"line_number":848,"context_line":"               \u0027id\u0027: l7policy[\u0027id\u0027],"},{"line_number":849,"context_line":"               \u0027name\u0027: l7policy[\u0027name\u0027]}"},{"line_number":850,"context_line":"        #rules \u003d self._get_l7rules_by_l7policy(context, l7policy[\u0027id\u0027])"},{"line_number":851,"context_line":"        res[\u0027rules\u0027] \u003d [self._make_l7rule_dict(rule)"},{"line_number":852,"context_line":"                        for rule in l7policy[\u0027rules\u0027]]"},{"line_number":853,"context_line":"        return self._fields(res, fields)"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2F1hs%3D","line":850,"in_reply_to":"AAAAUH%2F9gTs%3D","updated":"2014-02-10 14:06:51.000000000","message":"OK","commit_id":"7382a7c92291ea0fc220216f407f291686568792"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"9c7d8147bea53bb92cef3f18c9e96a3684ce285e","unresolved":false,"context_lines":[{"line_number":945,"context_line":""},{"line_number":946,"context_line":"    def create_vip_l7policy(self, context, vip_id, l7policy):"},{"line_number":947,"context_line":"        p \u003d l7policy"},{"line_number":948,"context_line":"        if p[\u0027action\u0027] \u003d\u003d \u0027redirect_to_pool\u0027 and not p.get(\u0027pool_id\u0027):"},{"line_number":949,"context_line":"            raise loadbalancer.L7PolicyPoolIdIsManadatory()"},{"line_number":950,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":951,"context_line":"            l7assoc_db \u003d L7VipPolicyAssociation(l7_policy_id\u003dp[\u0027l7_policy_id\u0027],"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUH%2F9gTA%3D","line":948,"updated":"2014-02-06 13:30:59.000000000","message":"I don\u0027t see pool_id as member of l7policy. Am I missing smth?","commit_id":"7382a7c92291ea0fc220216f407f291686568792"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"187cc1574d5574932bcfd46ad6da39ed0aebbf4f","unresolved":false,"context_lines":[{"line_number":945,"context_line":""},{"line_number":946,"context_line":"    def create_vip_l7policy(self, context, vip_id, l7policy):"},{"line_number":947,"context_line":"        p \u003d l7policy"},{"line_number":948,"context_line":"        if p[\u0027action\u0027] \u003d\u003d \u0027redirect_to_pool\u0027 and not p.get(\u0027pool_id\u0027):"},{"line_number":949,"context_line":"            raise loadbalancer.L7PolicyPoolIdIsManadatory()"},{"line_number":950,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":951,"context_line":"            l7assoc_db \u003d L7VipPolicyAssociation(l7_policy_id\u003dp[\u0027l7_policy_id\u0027],"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUH%2F9fA8%3D","line":948,"in_reply_to":"AAAAUH%2F9gTA%3D","updated":"2014-02-10 14:06:51.000000000","message":"well.. you are.\n\u0027l7policy\u0027 is not l7policy is the vip--l7policy assoc data.\nI was forced by the REST framework to call it \u0027l7policy\u0027 \nI have comment about it in loadbalancer.py","commit_id":"7382a7c92291ea0fc220216f407f291686568792"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"047ef9dd3aada7a9e09523971e2f0c5e1aea0748","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    l7_policy_id \u003d sa.Column(sa.String(36),"},{"line_number":49,"context_line":"                             sa.ForeignKey(\"l7policies.id\"),"},{"line_number":50,"context_line":"                             nullable\u003dFalse)"},{"line_number":51,"context_line":"    # type is half closed set which we can represnt an Enum"},{"line_number":52,"context_line":"    # (\"HEADER\",\"URL\",\"BODY\",...)"},{"line_number":53,"context_line":"    type \u003d sa.Column(sa.String(36), nullable\u003dFalse)"},{"line_number":54,"context_line":"    value \u003d sa.Column(sa.String(255), nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FieQ%3D","line":51,"updated":"2014-02-13 12:09:18.000000000","message":"typo: represent","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"8c475f6458e44a5cfae189cb0bd4fd541bec1fef","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    l7_policy_id \u003d sa.Column(sa.String(36),"},{"line_number":49,"context_line":"                             sa.ForeignKey(\"l7policies.id\"),"},{"line_number":50,"context_line":"                             nullable\u003dFalse)"},{"line_number":51,"context_line":"    # type is half closed set which we can represnt an Enum"},{"line_number":52,"context_line":"    # (\"HEADER\",\"URL\",\"BODY\",...)"},{"line_number":53,"context_line":"    type \u003d sa.Column(sa.String(36), nullable\u003dFalse)"},{"line_number":54,"context_line":"    value \u003d sa.Column(sa.String(255), nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FI1M%3D","line":51,"in_reply_to":"AAAAUX%2F%2FieQ%3D","updated":"2014-02-17 09:40:53.000000000","message":"comment will be removed after we will have a decision about the field type (enum or string)","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"047ef9dd3aada7a9e09523971e2f0c5e1aea0748","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    # (\"HEADER\",\"URL\",\"BODY\",...)"},{"line_number":53,"context_line":"    type \u003d sa.Column(sa.String(36), nullable\u003dFalse)"},{"line_number":54,"context_line":"    value \u003d sa.Column(sa.String(255), nullable\u003dFalse)"},{"line_number":55,"context_line":"    # compare_type is half closed set which we can represnt an Enum"},{"line_number":56,"context_line":"    # (\"REG_EXP\", \"EQ\", \"GT\", \"LT\",\"EQ_IGNORE_CASE\",...)"},{"line_number":57,"context_line":"    compare_type \u003d sa.Column(sa.String(36), nullable\u003dFalse)"},{"line_number":58,"context_line":"    position \u003d sa.Column(sa.Integer, nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2Fid4%3D","line":55,"updated":"2014-02-13 12:09:18.000000000","message":"ditto","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"8c475f6458e44a5cfae189cb0bd4fd541bec1fef","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    # (\"HEADER\",\"URL\",\"BODY\",...)"},{"line_number":53,"context_line":"    type \u003d sa.Column(sa.String(36), nullable\u003dFalse)"},{"line_number":54,"context_line":"    value \u003d sa.Column(sa.String(255), nullable\u003dFalse)"},{"line_number":55,"context_line":"    # compare_type is half closed set which we can represnt an Enum"},{"line_number":56,"context_line":"    # (\"REG_EXP\", \"EQ\", \"GT\", \"LT\",\"EQ_IGNORE_CASE\",...)"},{"line_number":57,"context_line":"    compare_type \u003d sa.Column(sa.String(36), nullable\u003dFalse)"},{"line_number":58,"context_line":"    position \u003d sa.Column(sa.Integer, nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FI1E%3D","line":55,"in_reply_to":"AAAAUX%2F%2Fid4%3D","updated":"2014-02-17 09:40:53.000000000","message":"ditto","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"047ef9dd3aada7a9e09523971e2f0c5e1aea0748","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    __tablename__ \u003d \u0027l7policies\u0027"},{"line_number":67,"context_line":"    name \u003d sa.Column(sa.String(255), nullable\u003dFalse)"},{"line_number":68,"context_line":"    #rules \u003d orm.relationship(L7Rule, backref\u003d\"l7policies\","},{"line_number":69,"context_line":"    #                         cascade\u003d\"all, delete-orphan\")"},{"line_number":70,"context_line":"    rules \u003d orm.relationship(L7Rule, order_by\u003d\"L7Rule.position\","},{"line_number":71,"context_line":"                             collection_class\u003dordering_list(\u0027position\u0027),"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2Fidg%3D","line":68,"updated":"2014-02-13 12:09:18.000000000","message":"please remove","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"8c475f6458e44a5cfae189cb0bd4fd541bec1fef","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    __tablename__ \u003d \u0027l7policies\u0027"},{"line_number":67,"context_line":"    name \u003d sa.Column(sa.String(255), nullable\u003dFalse)"},{"line_number":68,"context_line":"    #rules \u003d orm.relationship(L7Rule, backref\u003d\"l7policies\","},{"line_number":69,"context_line":"    #                         cascade\u003d\"all, delete-orphan\")"},{"line_number":70,"context_line":"    rules \u003d orm.relationship(L7Rule, order_by\u003d\"L7Rule.position\","},{"line_number":71,"context_line":"                             collection_class\u003dordering_list(\u0027position\u0027),"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FI1A%3D","line":68,"in_reply_to":"AAAAUX%2F%2Fidg%3D","updated":"2014-02-17 09:40:53.000000000","message":"ok","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"047ef9dd3aada7a9e09523971e2f0c5e1aea0748","unresolved":false,"context_lines":[{"line_number":232,"context_line":""},{"line_number":233,"context_line":"class LoadBalancerPluginDb(LoadBalancerPluginBase,"},{"line_number":234,"context_line":"                           base_db.CommonDbMixin):"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    \"\"\"Wraps loadbalancer with SQLAlchemy models."},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    A class that wraps the implementation of the Neutron loadbalancer"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FidA%3D","line":235,"updated":"2014-02-13 12:09:18.000000000","message":"unrelated, not needed, please delete the line","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"8c475f6458e44a5cfae189cb0bd4fd541bec1fef","unresolved":false,"context_lines":[{"line_number":232,"context_line":""},{"line_number":233,"context_line":"class LoadBalancerPluginDb(LoadBalancerPluginBase,"},{"line_number":234,"context_line":"                           base_db.CommonDbMixin):"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    \"\"\"Wraps loadbalancer with SQLAlchemy models."},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    A class that wraps the implementation of the Neutron loadbalancer"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FI04%3D","line":235,"in_reply_to":"AAAAUX%2F%2FidA%3D","updated":"2014-02-17 09:40:53.000000000","message":"ok","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"047ef9dd3aada7a9e09523971e2f0c5e1aea0748","unresolved":false,"context_lines":[{"line_number":370,"context_line":"            sess_qry.filter_by(vip_id\u003dvip_id).delete()"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"    def _create_port_for_vip(self, context, vip_db, subnet_id, ip_address):"},{"line_number":373,"context_line":"            # resolve subnet and create port"},{"line_number":374,"context_line":"        subnet \u003d self._core_plugin.get_subnet(context, subnet_id)"},{"line_number":375,"context_line":"        fixed_ip \u003d {\u0027subnet_id\u0027: subnet[\u0027id\u0027]}"},{"line_number":376,"context_line":"        if ip_address and ip_address !\u003d attributes.ATTR_NOT_SPECIFIED:"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2Ficc%3D","line":373,"updated":"2014-02-13 12:09:18.000000000","message":"either correct the indentation of the comment or just don\u0027t change the func (unrelated change)","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"8c475f6458e44a5cfae189cb0bd4fd541bec1fef","unresolved":false,"context_lines":[{"line_number":370,"context_line":"            sess_qry.filter_by(vip_id\u003dvip_id).delete()"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"    def _create_port_for_vip(self, context, vip_db, subnet_id, ip_address):"},{"line_number":373,"context_line":"            # resolve subnet and create port"},{"line_number":374,"context_line":"        subnet \u003d self._core_plugin.get_subnet(context, subnet_id)"},{"line_number":375,"context_line":"        fixed_ip \u003d {\u0027subnet_id\u0027: subnet[\u0027id\u0027]}"},{"line_number":376,"context_line":"        if ip_address and ip_address !\u003d attributes.ATTR_NOT_SPECIFIED:"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FI00%3D","line":373,"in_reply_to":"AAAAUX%2F%2Ficc%3D","updated":"2014-02-17 09:40:53.000000000","message":"ok","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"4a7349d5eda0e6a3811184319df06312b21d6232","unresolved":false,"context_lines":[{"line_number":863,"context_line":"    def update_l7policy(self, context, id, l7policy):"},{"line_number":864,"context_line":"        p \u003d l7policy[\u0027l7policy\u0027]"},{"line_number":865,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":866,"context_line":"            l7policy_db \u003d self._get_resource(context, L7Policy, id)"},{"line_number":867,"context_line":"            if p:"},{"line_number":868,"context_line":"                l7policy_db.update(p)"},{"line_number":869,"context_line":"        return self._make_l7policy_dict(l7policy_db)"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FP8s%3D","line":866,"updated":"2014-02-14 15:17:03.000000000","message":"self.assert_modification_allowed(l7policy_db)?","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"8c475f6458e44a5cfae189cb0bd4fd541bec1fef","unresolved":false,"context_lines":[{"line_number":863,"context_line":"    def update_l7policy(self, context, id, l7policy):"},{"line_number":864,"context_line":"        p \u003d l7policy[\u0027l7policy\u0027]"},{"line_number":865,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":866,"context_line":"            l7policy_db \u003d self._get_resource(context, L7Policy, id)"},{"line_number":867,"context_line":"            if p:"},{"line_number":868,"context_line":"                l7policy_db.update(p)"},{"line_number":869,"context_line":"        return self._make_l7policy_dict(l7policy_db)"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FI0s%3D","line":866,"in_reply_to":"AAAAUX%2F%2FP8s%3D","updated":"2014-02-17 09:40:53.000000000","message":"makes sense","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"4a7349d5eda0e6a3811184319df06312b21d6232","unresolved":false,"context_lines":[{"line_number":918,"context_line":"    def update_l7rule(self, context, id, l7rule):"},{"line_number":919,"context_line":"        r \u003d l7rule[\u0027l7rule\u0027]"},{"line_number":920,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":921,"context_line":"            l7rule_db \u003d self._get_resource(context, L7Rule, id)"},{"line_number":922,"context_line":"            if r:"},{"line_number":923,"context_line":"                l7rule_db.update(r)"},{"line_number":924,"context_line":"        return self._make_l7rule_dict(l7rule_db)"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FP8E%3D","line":921,"updated":"2014-02-14 15:17:03.000000000","message":"assert_modification_allowed","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"8c475f6458e44a5cfae189cb0bd4fd541bec1fef","unresolved":false,"context_lines":[{"line_number":918,"context_line":"    def update_l7rule(self, context, id, l7rule):"},{"line_number":919,"context_line":"        r \u003d l7rule[\u0027l7rule\u0027]"},{"line_number":920,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":921,"context_line":"            l7rule_db \u003d self._get_resource(context, L7Rule, id)"},{"line_number":922,"context_line":"            if r:"},{"line_number":923,"context_line":"                l7rule_db.update(r)"},{"line_number":924,"context_line":"        return self._make_l7rule_dict(l7rule_db)"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FI0k%3D","line":921,"in_reply_to":"AAAAUX%2F%2FP8E%3D","updated":"2014-02-17 09:40:53.000000000","message":"ok","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"4a7349d5eda0e6a3811184319df06312b21d6232","unresolved":false,"context_lines":[{"line_number":947,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":948,"context_line":"            l7assoc_db \u003d L7VipPolicyAssociation(l7_policy_id\u003dp[\u0027l7_policy_id\u0027],"},{"line_number":949,"context_line":"                                                vip_id\u003dvip_id,"},{"line_number":950,"context_line":"                                                status\u003dp[\u0027status\u0027],"},{"line_number":951,"context_line":"                                                pool_id\u003dp.get(\u0027pool_id\u0027),"},{"line_number":952,"context_line":"                                                tenant_id\u003dp[\u0027tenant_id\u0027],"},{"line_number":953,"context_line":"                                                action\u003dp[\u0027action\u0027])"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FP5k%3D","line":950,"updated":"2014-02-14 15:17:03.000000000","message":"status field can not be passed on create or update operations","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"8c475f6458e44a5cfae189cb0bd4fd541bec1fef","unresolved":false,"context_lines":[{"line_number":947,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":948,"context_line":"            l7assoc_db \u003d L7VipPolicyAssociation(l7_policy_id\u003dp[\u0027l7_policy_id\u0027],"},{"line_number":949,"context_line":"                                                vip_id\u003dvip_id,"},{"line_number":950,"context_line":"                                                status\u003dp[\u0027status\u0027],"},{"line_number":951,"context_line":"                                                pool_id\u003dp.get(\u0027pool_id\u0027),"},{"line_number":952,"context_line":"                                                tenant_id\u003dp[\u0027tenant_id\u0027],"},{"line_number":953,"context_line":"                                                action\u003dp[\u0027action\u0027])"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FI0U%3D","line":950,"in_reply_to":"AAAAUX%2F%2FP5k%3D","updated":"2014-02-17 09:40:53.000000000","message":"ok","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"047ef9dd3aada7a9e09523971e2f0c5e1aea0748","unresolved":false,"context_lines":[{"line_number":976,"context_line":"               \u0027vip_id\u0027: l7assoc[\u0027vip_id\u0027],"},{"line_number":977,"context_line":"               \u0027pool_id\u0027: l7assoc.get(\u0027pool_id\u0027),"},{"line_number":978,"context_line":"               \u0027tenant_id\u0027: l7assoc[\u0027tenant_id\u0027],"},{"line_number":979,"context_line":"               \u0027status\u0027: l7assoc[\u0027status\u0027],"},{"line_number":980,"context_line":"               \u0027action\u0027: l7assoc[\u0027action\u0027]}"},{"line_number":981,"context_line":"        return self._fields(res, fields)"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2Fibg%3D","line":979,"updated":"2014-02-13 12:09:18.000000000","message":"status_description?","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"8c475f6458e44a5cfae189cb0bd4fd541bec1fef","unresolved":false,"context_lines":[{"line_number":976,"context_line":"               \u0027vip_id\u0027: l7assoc[\u0027vip_id\u0027],"},{"line_number":977,"context_line":"               \u0027pool_id\u0027: l7assoc.get(\u0027pool_id\u0027),"},{"line_number":978,"context_line":"               \u0027tenant_id\u0027: l7assoc[\u0027tenant_id\u0027],"},{"line_number":979,"context_line":"               \u0027status\u0027: l7assoc[\u0027status\u0027],"},{"line_number":980,"context_line":"               \u0027action\u0027: l7assoc[\u0027action\u0027]}"},{"line_number":981,"context_line":"        return self._fields(res, fields)"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FI0M%3D","line":979,"in_reply_to":"AAAAUX%2F%2Fibg%3D","updated":"2014-02-17 09:40:53.000000000","message":"ok","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"}],"neutron/extensions/loadbalancer.py":[{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"63033a90077f5ea952f56a1d53cd29e3edc0cbc8","unresolved":false,"context_lines":[{"line_number":312,"context_line":"                         \u0027validate\u0027: {\u0027type:string\u0027: None},"},{"line_number":313,"context_line":"                         \u0027is_visible\u0027: True},"},{"line_number":314,"context_line":"        \u0027status\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":315,"context_line":"                   \u0027is_visible\u0027: True}"},{"line_number":316,"context_line":"    },"},{"line_number":317,"context_line":"    \u0027l7policies\u0027: {"},{"line_number":318,"context_line":"        \u0027id\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F%2Brxk%3D","line":315,"updated":"2014-01-23 07:55:40.000000000","message":"No need to define \u0027position\u0027 here?","commit_id":"935049a69a2237a451bf4d790a242d2689cf3a05"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"9f62f14f57b476b7e77f07f596981d4012efaec8","unresolved":false,"context_lines":[{"line_number":312,"context_line":"                         \u0027validate\u0027: {\u0027type:string\u0027: None},"},{"line_number":313,"context_line":"                         \u0027is_visible\u0027: True},"},{"line_number":314,"context_line":"        \u0027status\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":315,"context_line":"                   \u0027is_visible\u0027: True}"},{"line_number":316,"context_line":"    },"},{"line_number":317,"context_line":"    \u0027l7policies\u0027: {"},{"line_number":318,"context_line":"        \u0027id\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUX%2F%2F1cc%3D","line":315,"in_reply_to":"AAAAUH%2F%2Brxk%3D","updated":"2014-02-10 14:25:52.000000000","message":"Yes - position should be defined here","commit_id":"935049a69a2237a451bf4d790a242d2689cf3a05"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"7e90e4ac75f5f4db48f3ff9ef7201ae48998ee52","unresolved":false,"context_lines":[{"line_number":329,"context_line":"        \u0027status\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":330,"context_line":"                   \u0027is_visible\u0027: True}"},{"line_number":331,"context_line":"    },"},{"line_number":332,"context_line":"    \u0027l7assocs\u0027: {"},{"line_number":333,"context_line":"        \u0027tenant_id\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":334,"context_line":"                      \u0027validate\u0027: {\u0027type:string\u0027: None},"},{"line_number":335,"context_line":"                      \u0027required_by_policy\u0027: True,"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F%2BrSw%3D","line":332,"updated":"2014-01-23 10:38:52.000000000","message":"not sure l7 association should be a first class citizen in the lbaas API. I think it is worth discussing","commit_id":"935049a69a2237a451bf4d790a242d2689cf3a05"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"9f62f14f57b476b7e77f07f596981d4012efaec8","unresolved":false,"context_lines":[{"line_number":329,"context_line":"        \u0027status\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":330,"context_line":"                   \u0027is_visible\u0027: True}"},{"line_number":331,"context_line":"    },"},{"line_number":332,"context_line":"    \u0027l7assocs\u0027: {"},{"line_number":333,"context_line":"        \u0027tenant_id\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":334,"context_line":"                      \u0027validate\u0027: {\u0027type:string\u0027: None},"},{"line_number":335,"context_line":"                      \u0027required_by_policy\u0027: True,"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUX%2F%2F1b0%3D","line":332,"in_reply_to":"AAAAUH%2F%2BrSw%3D","updated":"2014-02-10 14:25:52.000000000","message":"You are right - code has been removed.","commit_id":"935049a69a2237a451bf4d790a242d2689cf3a05"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"63033a90077f5ea952f56a1d53cd29e3edc0cbc8","unresolved":false,"context_lines":[{"line_number":395,"context_line":"        resources \u003d []"},{"line_number":396,"context_line":"        plugin \u003d manager.NeutronManager.get_service_plugins()["},{"line_number":397,"context_line":"            constants.LOADBALANCER]"},{"line_number":398,"context_line":"        for collection_name in RESOURCE_ATTRIBUTE_MAP:"},{"line_number":399,"context_line":"            # Special handling needed for resources with \u0027y\u0027 ending"},{"line_number":400,"context_line":"            # (e.g. proxies -\u003e proxy)"},{"line_number":401,"context_line":"            resource_name \u003d attr.PLURALS[collection_name]"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F%2Br6c%3D","line":398,"updated":"2014-01-23 07:55:40.000000000","message":"Are you accidentally reverting 18c0f093?","commit_id":"935049a69a2237a451bf4d790a242d2689cf3a05"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"7e90e4ac75f5f4db48f3ff9ef7201ae48998ee52","unresolved":false,"context_lines":[{"line_number":395,"context_line":"        resources \u003d []"},{"line_number":396,"context_line":"        plugin \u003d manager.NeutronManager.get_service_plugins()["},{"line_number":397,"context_line":"            constants.LOADBALANCER]"},{"line_number":398,"context_line":"        for collection_name in RESOURCE_ATTRIBUTE_MAP:"},{"line_number":399,"context_line":"            # Special handling needed for resources with \u0027y\u0027 ending"},{"line_number":400,"context_line":"            # (e.g. proxies -\u003e proxy)"},{"line_number":401,"context_line":"            resource_name \u003d attr.PLURALS[collection_name]"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F%2BrRs%3D","line":398,"in_reply_to":"AAAAUH%2F%2Br6c%3D","updated":"2014-01-23 10:38:52.000000000","message":"+1","commit_id":"935049a69a2237a451bf4d790a242d2689cf3a05"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"9f62f14f57b476b7e77f07f596981d4012efaec8","unresolved":false,"context_lines":[{"line_number":395,"context_line":"        resources \u003d []"},{"line_number":396,"context_line":"        plugin \u003d manager.NeutronManager.get_service_plugins()["},{"line_number":397,"context_line":"            constants.LOADBALANCER]"},{"line_number":398,"context_line":"        for collection_name in RESOURCE_ATTRIBUTE_MAP:"},{"line_number":399,"context_line":"            # Special handling needed for resources with \u0027y\u0027 ending"},{"line_number":400,"context_line":"            # (e.g. proxies -\u003e proxy)"},{"line_number":401,"context_line":"            resource_name \u003d attr.PLURALS[collection_name]"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUX%2F%2F1bE%3D","line":398,"in_reply_to":"AAAAUH%2F%2BrRs%3D","updated":"2014-02-10 14:25:52.000000000","message":"I am using the resource_helper - see later cahnges","commit_id":"935049a69a2237a451bf4d790a242d2689cf3a05"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"047ef9dd3aada7a9e09523971e2f0c5e1aea0748","unresolved":false,"context_lines":[{"line_number":302,"context_line":"        \u0027l7policy_id\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":303,"context_line":"                        \u0027validate\u0027: {\u0027type:uuid\u0027: None},"},{"line_number":304,"context_line":"                        \u0027is_visible\u0027: True},"},{"line_number":305,"context_line":"        \u0027type\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":306,"context_line":"                 \u0027validate\u0027: {\u0027type:string\u0027: None},"},{"line_number":307,"context_line":"                 \u0027is_visible\u0027: True},"},{"line_number":308,"context_line":"        \u0027value\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FaZE%3D","line":305,"updated":"2014-02-13 12:09:18.000000000","message":"still think we need to agree on what types are supported, define allowed values here and document them. Same applies for compare_type","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"8c475f6458e44a5cfae189cb0bd4fd541bec1fef","unresolved":false,"context_lines":[{"line_number":302,"context_line":"        \u0027l7policy_id\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":303,"context_line":"                        \u0027validate\u0027: {\u0027type:uuid\u0027: None},"},{"line_number":304,"context_line":"                        \u0027is_visible\u0027: True},"},{"line_number":305,"context_line":"        \u0027type\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":306,"context_line":"                 \u0027validate\u0027: {\u0027type:string\u0027: None},"},{"line_number":307,"context_line":"                 \u0027is_visible\u0027: True},"},{"line_number":308,"context_line":"        \u0027value\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FFPk%3D","line":305,"in_reply_to":"AAAAUX%2F%2FaZE%3D","updated":"2014-02-17 09:40:53.000000000","message":"Lets see if we get any attention in the ML for this.\nHowever even if we decide to go with enum - I am not sure I can tell all \u0027members\u0027 of each of our 3 enum candidates","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"047ef9dd3aada7a9e09523971e2f0c5e1aea0748","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        \u0027compare_type\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":312,"context_line":"                         \u0027validate\u0027: {\u0027type:string\u0027: None},"},{"line_number":313,"context_line":"                         \u0027is_visible\u0027: True},"},{"line_number":314,"context_line":"        \u0027status\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":315,"context_line":"                   \u0027is_visible\u0027: True},"},{"line_number":316,"context_line":"        \u0027position\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":317,"context_line":"                     \u0027convert_to\u0027: attr.convert_to_int,"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FiaQ%3D","line":314,"updated":"2014-02-13 12:09:18.000000000","message":"status was removed from l7rules, right?","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"8c475f6458e44a5cfae189cb0bd4fd541bec1fef","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        \u0027compare_type\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":312,"context_line":"                         \u0027validate\u0027: {\u0027type:string\u0027: None},"},{"line_number":313,"context_line":"                         \u0027is_visible\u0027: True},"},{"line_number":314,"context_line":"        \u0027status\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":315,"context_line":"                   \u0027is_visible\u0027: True},"},{"line_number":316,"context_line":"        \u0027position\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":317,"context_line":"                     \u0027convert_to\u0027: attr.convert_to_int,"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FFPc%3D","line":314,"in_reply_to":"AAAAUX%2F%2FiaQ%3D","updated":"2014-02-17 09:40:53.000000000","message":"OK","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"047ef9dd3aada7a9e09523971e2f0c5e1aea0748","unresolved":false,"context_lines":[{"line_number":329,"context_line":"        \u0027name\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":330,"context_line":"                 \u0027validate\u0027: {\u0027type:string\u0027: None},"},{"line_number":331,"context_line":"                 \u0027is_visible\u0027: True},"},{"line_number":332,"context_line":"        \u0027status\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":333,"context_line":"                   \u0027is_visible\u0027: True}"},{"line_number":334,"context_line":"    }"},{"line_number":335,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FiaE%3D","line":332,"updated":"2014-02-13 12:09:18.000000000","message":"ditto","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"8c475f6458e44a5cfae189cb0bd4fd541bec1fef","unresolved":false,"context_lines":[{"line_number":329,"context_line":"        \u0027name\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":330,"context_line":"                 \u0027validate\u0027: {\u0027type:string\u0027: None},"},{"line_number":331,"context_line":"                 \u0027is_visible\u0027: True},"},{"line_number":332,"context_line":"        \u0027status\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":333,"context_line":"                   \u0027is_visible\u0027: True}"},{"line_number":334,"context_line":"    }"},{"line_number":335,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FFPY%3D","line":332,"in_reply_to":"AAAAUX%2F%2FiaE%3D","updated":"2014-02-17 09:40:53.000000000","message":"OK","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"047ef9dd3aada7a9e09523971e2f0c5e1aea0748","unresolved":false,"context_lines":[{"line_number":361,"context_line":"                                   \u0027validate\u0027: {\u0027type:uuid_or_none\u0027: None},"},{"line_number":362,"context_line":"                                   \u0027required_by_policy\u0027: False,"},{"line_number":363,"context_line":"                                   \u0027is_visible\u0027: True},"},{"line_number":364,"context_line":"                       \u0027action\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":365,"context_line":"                                  \u0027validate\u0027: {\u0027type:string\u0027: None},"},{"line_number":366,"context_line":"                                  \u0027required_by_policy\u0027: True,"},{"line_number":367,"context_line":"                                  \u0027is_visible\u0027: True},"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FaYo%3D","line":364,"updated":"2014-02-13 12:09:18.000000000","message":"the same here: need to define actions that are supported","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"8c475f6458e44a5cfae189cb0bd4fd541bec1fef","unresolved":false,"context_lines":[{"line_number":361,"context_line":"                                   \u0027validate\u0027: {\u0027type:uuid_or_none\u0027: None},"},{"line_number":362,"context_line":"                                   \u0027required_by_policy\u0027: False,"},{"line_number":363,"context_line":"                                   \u0027is_visible\u0027: True},"},{"line_number":364,"context_line":"                       \u0027action\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":365,"context_line":"                                  \u0027validate\u0027: {\u0027type:string\u0027: None},"},{"line_number":366,"context_line":"                                  \u0027required_by_policy\u0027: True,"},{"line_number":367,"context_line":"                                  \u0027is_visible\u0027: True},"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FFPQ%3D","line":364,"in_reply_to":"AAAAUX%2F%2FaYo%3D","updated":"2014-02-17 09:40:53.000000000","message":"ditto","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"}],"neutron/services/loadbalancer/drivers/abstract_driver.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"047ef9dd3aada7a9e09523971e2f0c5e1aea0748","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        pass"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    @abc.abstractmethod"},{"line_number":133,"context_line":"    def update_l7_policy(self, context, old_l7policy, new_l7policy):"},{"line_number":134,"context_line":"        pass"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FaW0%3D","line":133,"updated":"2014-02-13 12:09:18.000000000","message":"name is the only updatable attribute of the l7policy - do drivers really need to handle such update?","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"8c475f6458e44a5cfae189cb0bd4fd541bec1fef","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        pass"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    @abc.abstractmethod"},{"line_number":133,"context_line":"    def update_l7_policy(self, context, old_l7policy, new_l7policy):"},{"line_number":134,"context_line":"        pass"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FFOI%3D","line":133,"in_reply_to":"AAAAUX%2F%2FaW0%3D","updated":"2014-02-17 09:40:53.000000000","message":"I dont know. \nLets see if we get any idea drom the ML. I will post there.","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"047ef9dd3aada7a9e09523971e2f0c5e1aea0748","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        pass"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    @abc.abstractmethod"},{"line_number":137,"context_line":"    def delete_l7_policy(self, context, id):"},{"line_number":138,"context_line":"        pass"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FaYE%3D","line":137,"updated":"2014-02-13 12:09:18.000000000","message":"If prohibit the deletion of an l7policy which has associations - we\u0027ll not need this method for drivers, right?","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"8c475f6458e44a5cfae189cb0bd4fd541bec1fef","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        pass"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    @abc.abstractmethod"},{"line_number":137,"context_line":"    def delete_l7_policy(self, context, id):"},{"line_number":138,"context_line":"        pass"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FFKQ%3D","line":137,"in_reply_to":"AAAAUX%2F%2FaYE%3D","updated":"2014-02-17 09:40:53.000000000","message":"Yes - I agree.\nThe question is - do we wnt to prohibit it...\nAnother quetion to ML","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"}],"neutron/services/loadbalancer/drivers/haproxy/plugin_driver.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"047ef9dd3aada7a9e09523971e2f0c5e1aea0748","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        }"},{"line_number":163,"context_line":"        if obj_type not in model_mapping:"},{"line_number":164,"context_line":"            raise q_exc.Invalid(_(\u0027Unknown object type: %s\u0027) % obj_type)"},{"line_number":165,"context_line":"        elif obj_type \u003d\u003d \u0027health_monitor\u0027:"},{"line_number":166,"context_line":"            self.plugin.update_pool_health_monitor("},{"line_number":167,"context_line":"                context, obj_id[\u0027monitor_id\u0027], obj_id[\u0027pool_id\u0027], status)"},{"line_number":168,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FaWI%3D","line":165,"updated":"2014-02-13 12:09:18.000000000","message":"please rebase carefully - it was a bugfix which is deleted here (https://review.openstack.org/#/c/62318/)","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"8c475f6458e44a5cfae189cb0bd4fd541bec1fef","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        }"},{"line_number":163,"context_line":"        if obj_type not in model_mapping:"},{"line_number":164,"context_line":"            raise q_exc.Invalid(_(\u0027Unknown object type: %s\u0027) % obj_type)"},{"line_number":165,"context_line":"        elif obj_type \u003d\u003d \u0027health_monitor\u0027:"},{"line_number":166,"context_line":"            self.plugin.update_pool_health_monitor("},{"line_number":167,"context_line":"                context, obj_id[\u0027monitor_id\u0027], obj_id[\u0027pool_id\u0027], status)"},{"line_number":168,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FFGg%3D","line":165,"in_reply_to":"AAAAUX%2F%2FaWI%3D","updated":"2014-02-17 09:40:53.000000000","message":"ok","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"}],"neutron/services/loadbalancer/plugin.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"0865e503da55d1a8263ba8cb36ab4b0a09aed89c","unresolved":false,"context_lines":[{"line_number":296,"context_line":"                                                    l7policy)"},{"line_number":297,"context_line":"        drivers \u003d self._get_drivers_for_l7policy(id)"},{"line_number":298,"context_line":"        for driver in drivers:"},{"line_number":299,"context_line":"            driver.update_l7_policy(context, old_l7policy, new_l7policy)"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"    def delete_l7policy(self, context, id):"},{"line_number":302,"context_line":"        self.update_status(context, ldb.L7Policy,"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F%2BR6k%3D","line":299,"updated":"2014-01-28 13:08:10.000000000","message":"Since \u0027name\u0027 is the only field of l7 policy that can be updated - should we call driver for this. If yes - what is it supposed to do?","commit_id":"935049a69a2237a451bf4d790a242d2689cf3a05"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"9f62f14f57b476b7e77f07f596981d4012efaec8","unresolved":false,"context_lines":[{"line_number":296,"context_line":"                                                    l7policy)"},{"line_number":297,"context_line":"        drivers \u003d self._get_drivers_for_l7policy(id)"},{"line_number":298,"context_line":"        for driver in drivers:"},{"line_number":299,"context_line":"            driver.update_l7_policy(context, old_l7policy, new_l7policy)"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"    def delete_l7policy(self, context, id):"},{"line_number":302,"context_line":"        self.update_status(context, ldb.L7Policy,"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUX%2F%2F1e4%3D","line":299,"in_reply_to":"AAAAUH%2F%2BR6k%3D","updated":"2014-02-10 14:25:52.000000000","message":"It depends on the driver.. I am not sure i have a good answer.\nAnyway.. in later versions I call the driver only if L7[policy/rule] are connected to a vip","commit_id":"935049a69a2237a451bf4d790a242d2689cf3a05"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"0865e503da55d1a8263ba8cb36ab4b0a09aed89c","unresolved":false,"context_lines":[{"line_number":303,"context_line":"                           id, constants.PENDING_DELETE)"},{"line_number":304,"context_line":"        drivers \u003d self._get_drivers_for_l7policy(id)"},{"line_number":305,"context_line":"        for driver in drivers:"},{"line_number":306,"context_line":"            driver.delete_l7_policy(context, id)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"    def create_l7rule(self, context, l7rule):"},{"line_number":309,"context_line":"        drivers \u003d self._get_drivers_for_l7policy(l7rule[\u0027l7rule\u0027]"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F%2BR58%3D","line":306,"updated":"2014-01-28 13:08:10.000000000","message":"Should we prohibit l7 policy deletion in case it has associations with vips? (just like we agreed to do for health monitors - https://review.openstack.org/#/c/53821/)","commit_id":"935049a69a2237a451bf4d790a242d2689cf3a05"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"9f62f14f57b476b7e77f07f596981d4012efaec8","unresolved":false,"context_lines":[{"line_number":303,"context_line":"                           id, constants.PENDING_DELETE)"},{"line_number":304,"context_line":"        drivers \u003d self._get_drivers_for_l7policy(id)"},{"line_number":305,"context_line":"        for driver in drivers:"},{"line_number":306,"context_line":"            driver.delete_l7_policy(context, id)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"    def create_l7rule(self, context, l7rule):"},{"line_number":309,"context_line":"        drivers \u003d self._get_drivers_for_l7policy(l7rule[\u0027l7rule\u0027]"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUX%2F%2F1dI%3D","line":306,"in_reply_to":"AAAAUH%2F%2BR58%3D","updated":"2014-02-10 14:25:52.000000000","message":"Removing the L7Policy or the Vip will cause the DB to drop the L7Policy-Vip assoc record. Since the driver is invoked upon\nvip and l7policy removal, the driver can \"check\" if the vip/l7policy are part of an assoc and act accordingly.\nwhat do you think?","commit_id":"935049a69a2237a451bf4d790a242d2689cf3a05"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"7e90e4ac75f5f4db48f3ff9ef7201ae48998ee52","unresolved":false,"context_lines":[{"line_number":343,"context_line":"        return assoc"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"    def delete_l7assoc(self, context, l7assoc):"},{"line_number":346,"context_line":"        self.update_l7assoc_status(context, l7assoc,"},{"line_number":347,"context_line":"                                   constants.PENDING_DELETE)"},{"line_number":348,"context_line":"        drivers \u003d self._get_drivers_for_l7policy(l7assoc[\u0027l7assoc\u0027]"},{"line_number":349,"context_line":"                                                 [\u0027l7_policy_id\u0027])"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F%2BrGU%3D","line":346,"updated":"2014-01-23 10:38:52.000000000","message":"where is it defined?","commit_id":"935049a69a2237a451bf4d790a242d2689cf3a05"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"9f62f14f57b476b7e77f07f596981d4012efaec8","unresolved":false,"context_lines":[{"line_number":343,"context_line":"        return assoc"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"    def delete_l7assoc(self, context, l7assoc):"},{"line_number":346,"context_line":"        self.update_l7assoc_status(context, l7assoc,"},{"line_number":347,"context_line":"                                   constants.PENDING_DELETE)"},{"line_number":348,"context_line":"        drivers \u003d self._get_drivers_for_l7policy(l7assoc[\u0027l7assoc\u0027]"},{"line_number":349,"context_line":"                                                 [\u0027l7_policy_id\u0027])"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUX%2F%2F1dA%3D","line":346,"in_reply_to":"AAAAUH%2F%2BrGU%3D","updated":"2014-02-10 14:25:52.000000000","message":"code was removed","commit_id":"935049a69a2237a451bf4d790a242d2689cf3a05"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"047ef9dd3aada7a9e09523971e2f0c5e1aea0748","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        l7rule \u003d self.get_l7rule(context, id)"},{"line_number":347,"context_line":"        l7policy_id \u003d l7rule[\u0027l7rule\u0027][\u0027l7_policy_id\u0027]"},{"line_number":348,"context_line":"        connected \u003d self._l7policy_connected_to_vip(context, l7policy_id)"},{"line_number":349,"context_line":"        if connected:"},{"line_number":350,"context_line":"            drivers \u003d self._get_drivers_for_l7policy(l7rule[\u0027l7_policy_id\u0027])"},{"line_number":351,"context_line":"            for driver in drivers:"},{"line_number":352,"context_line":"                driver.delete_l7_rule(context, id)"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FaUs%3D","line":349,"updated":"2014-02-13 12:09:18.000000000","message":"who will delete l7rule from db in this case?","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"65dc394dc7689ac2c11e30155333ee38a74a4018","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        l7rule \u003d self.get_l7rule(context, id)"},{"line_number":347,"context_line":"        l7policy_id \u003d l7rule[\u0027l7rule\u0027][\u0027l7_policy_id\u0027]"},{"line_number":348,"context_line":"        connected \u003d self._l7policy_connected_to_vip(context, l7policy_id)"},{"line_number":349,"context_line":"        if connected:"},{"line_number":350,"context_line":"            drivers \u003d self._get_drivers_for_l7policy(l7rule[\u0027l7_policy_id\u0027])"},{"line_number":351,"context_line":"            for driver in drivers:"},{"line_number":352,"context_line":"                driver.delete_l7_rule(context, id)"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FCRM%3D","line":349,"in_reply_to":"AAAAUX%2F%2FCt4%3D","updated":"2014-02-17 14:27:20.000000000","message":"Ok, one thing that I missed is that l7rule (as well as l7policy) is a pure db object and has no status - so #344 should be removed at least. My proposal would be to delete l7 rule from db first and then call drivers - in case of any errors a driver will set the status of the whole vip-policy association to ERROR. So all consistency issues between server and backend should be reflected in the assoc object.","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"b26cedd3be7676b2e361518179941fe80f221deb","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        l7rule \u003d self.get_l7rule(context, id)"},{"line_number":347,"context_line":"        l7policy_id \u003d l7rule[\u0027l7rule\u0027][\u0027l7_policy_id\u0027]"},{"line_number":348,"context_line":"        connected \u003d self._l7policy_connected_to_vip(context, l7policy_id)"},{"line_number":349,"context_line":"        if connected:"},{"line_number":350,"context_line":"            drivers \u003d self._get_drivers_for_l7policy(l7rule[\u0027l7_policy_id\u0027])"},{"line_number":351,"context_line":"            for driver in drivers:"},{"line_number":352,"context_line":"                driver.delete_l7_rule(context, id)"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FCt4%3D","line":349,"in_reply_to":"AAAAUX%2F%2FDfU%3D","updated":"2014-02-17 14:11:39.000000000","message":"I agree.\nThis is a \"deep hole\" in the design.\nWhat are the options we have here?\nIf the plugin will delete the entity from DB and the driver will fail to delete it from its backend - the consistency between Neutron and the vendor\u0027s backend is broken.\nSo we have a serious issue with the Atomicity of the operation.\nWe need to rethink about it..","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"3c433cd9e1443e85c7bb3649a106b4adc01ce8e5","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        l7rule \u003d self.get_l7rule(context, id)"},{"line_number":347,"context_line":"        l7policy_id \u003d l7rule[\u0027l7rule\u0027][\u0027l7_policy_id\u0027]"},{"line_number":348,"context_line":"        connected \u003d self._l7policy_connected_to_vip(context, l7policy_id)"},{"line_number":349,"context_line":"        if connected:"},{"line_number":350,"context_line":"            drivers \u003d self._get_drivers_for_l7policy(l7rule[\u0027l7_policy_id\u0027])"},{"line_number":351,"context_line":"            for driver in drivers:"},{"line_number":352,"context_line":"                driver.delete_l7_rule(context, id)"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FDfU%3D","line":349,"in_reply_to":"AAAAUX%2F%2FFFQ%3D","updated":"2014-02-17 12:36:52.000000000","message":"That\u0027s fine if we have only one driver. What if we have multiple drivers - so the first driver will delete the record from db and the second driver for some reason is not able to delete from backend and going to mark the record as ERROR - so we have a conflict here.","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"8c475f6458e44a5cfae189cb0bd4fd541bec1fef","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        l7rule \u003d self.get_l7rule(context, id)"},{"line_number":347,"context_line":"        l7policy_id \u003d l7rule[\u0027l7rule\u0027][\u0027l7_policy_id\u0027]"},{"line_number":348,"context_line":"        connected \u003d self._l7policy_connected_to_vip(context, l7policy_id)"},{"line_number":349,"context_line":"        if connected:"},{"line_number":350,"context_line":"            drivers \u003d self._get_drivers_for_l7policy(l7rule[\u0027l7_policy_id\u0027])"},{"line_number":351,"context_line":"            for driver in drivers:"},{"line_number":352,"context_line":"                driver.delete_l7_rule(context, id)"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FFFQ%3D","line":349,"in_reply_to":"AAAAUX%2F%2FaUs%3D","updated":"2014-02-17 09:40:53.000000000","message":"The pattern we have is: the plugin marks the record as PENDEING_DELETE and once the driver is [able / not able] to delete the record from its backend he marks the record with ERROR or delete it from DB\nThe plugin exposes the functions: \u0027_delete_db_\u003centity\u003e\u0027 for this purpose","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"047ef9dd3aada7a9e09523971e2f0c5e1aea0748","unresolved":false,"context_lines":[{"line_number":354,"context_line":"            super(LoadBalancerPlugin, self).delete_l7_rule(context, id)"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"    def create_vip_l7policy(self, context, vip_id, l7policy):"},{"line_number":357,"context_line":"        func \u003d super(LoadBalancerPlugin, self).create_vip_l7policy"},{"line_number":358,"context_line":"        vip_l7policy \u003d func(context, vip_id, l7policy)"},{"line_number":359,"context_line":"        l7_policy_id \u003d vip_l7policy[\u0027l7_policy_id\u0027]"},{"line_number":360,"context_line":"        drivers \u003d self._get_drivers_for_l7policy(l7_policy_id)"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FaUM%3D","line":357,"updated":"2014-02-13 12:09:18.000000000","message":"consider\n vip_l7policy \u003d super(LoadBalancerPlugin, self).create_vip_l7policy(\n  context, vip_id, l7policy)","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"8c475f6458e44a5cfae189cb0bd4fd541bec1fef","unresolved":false,"context_lines":[{"line_number":354,"context_line":"            super(LoadBalancerPlugin, self).delete_l7_rule(context, id)"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"    def create_vip_l7policy(self, context, vip_id, l7policy):"},{"line_number":357,"context_line":"        func \u003d super(LoadBalancerPlugin, self).create_vip_l7policy"},{"line_number":358,"context_line":"        vip_l7policy \u003d func(context, vip_id, l7policy)"},{"line_number":359,"context_line":"        l7_policy_id \u003d vip_l7policy[\u0027l7_policy_id\u0027]"},{"line_number":360,"context_line":"        drivers \u003d self._get_drivers_for_l7policy(l7_policy_id)"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FFC0%3D","line":357,"in_reply_to":"AAAAUX%2F%2FaUM%3D","updated":"2014-02-17 09:40:53.000000000","message":"ok","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"047ef9dd3aada7a9e09523971e2f0c5e1aea0748","unresolved":false,"context_lines":[{"line_number":357,"context_line":"        func \u003d super(LoadBalancerPlugin, self).create_vip_l7policy"},{"line_number":358,"context_line":"        vip_l7policy \u003d func(context, vip_id, l7policy)"},{"line_number":359,"context_line":"        l7_policy_id \u003d vip_l7policy[\u0027l7_policy_id\u0027]"},{"line_number":360,"context_line":"        drivers \u003d self._get_drivers_for_l7policy(l7_policy_id)"},{"line_number":361,"context_line":"        for driver in drivers:"},{"line_number":362,"context_line":"            driver.create_vip_l7policy(context, vip_l7policy)"},{"line_number":363,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FaS4%3D","line":360,"updated":"2014-02-13 12:09:18.000000000","message":"I believe driver should be discovered from vip\u0027s pool_id, not from l7policy","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"b26cedd3be7676b2e361518179941fe80f221deb","unresolved":false,"context_lines":[{"line_number":357,"context_line":"        func \u003d super(LoadBalancerPlugin, self).create_vip_l7policy"},{"line_number":358,"context_line":"        vip_l7policy \u003d func(context, vip_id, l7policy)"},{"line_number":359,"context_line":"        l7_policy_id \u003d vip_l7policy[\u0027l7_policy_id\u0027]"},{"line_number":360,"context_line":"        drivers \u003d self._get_drivers_for_l7policy(l7_policy_id)"},{"line_number":361,"context_line":"        for driver in drivers:"},{"line_number":362,"context_line":"            driver.create_vip_l7policy(context, vip_l7policy)"},{"line_number":363,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FChM%3D","line":360,"in_reply_to":"AAAAUX%2F%2FDcU%3D","updated":"2014-02-17 14:11:39.000000000","message":"I agere - my mistake. Only one driver is needed here.\nvip_l7policy ---\u003e vip --\u003e pool --\u003e driver","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"3c433cd9e1443e85c7bb3649a106b4adc01ce8e5","unresolved":false,"context_lines":[{"line_number":357,"context_line":"        func \u003d super(LoadBalancerPlugin, self).create_vip_l7policy"},{"line_number":358,"context_line":"        vip_l7policy \u003d func(context, vip_id, l7policy)"},{"line_number":359,"context_line":"        l7_policy_id \u003d vip_l7policy[\u0027l7_policy_id\u0027]"},{"line_number":360,"context_line":"        drivers \u003d self._get_drivers_for_l7policy(l7_policy_id)"},{"line_number":361,"context_line":"        for driver in drivers:"},{"line_number":362,"context_line":"            driver.create_vip_l7policy(context, vip_l7policy)"},{"line_number":363,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FDcU%3D","line":360,"in_reply_to":"AAAAUX%2F%2FE8k%3D","updated":"2014-02-17 12:36:52.000000000","message":"Why should you get and call all drivers (whose vips are associated with the policy) if you need to just associate the policy with one particular vip? So my suggestion is to get a driver for this vip and call just it.","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"8c475f6458e44a5cfae189cb0bd4fd541bec1fef","unresolved":false,"context_lines":[{"line_number":357,"context_line":"        func \u003d super(LoadBalancerPlugin, self).create_vip_l7policy"},{"line_number":358,"context_line":"        vip_l7policy \u003d func(context, vip_id, l7policy)"},{"line_number":359,"context_line":"        l7_policy_id \u003d vip_l7policy[\u0027l7_policy_id\u0027]"},{"line_number":360,"context_line":"        drivers \u003d self._get_drivers_for_l7policy(l7_policy_id)"},{"line_number":361,"context_line":"        for driver in drivers:"},{"line_number":362,"context_line":"            driver.create_vip_l7policy(context, vip_l7policy)"},{"line_number":363,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FE8k%3D","line":360,"in_reply_to":"AAAAUX%2F%2FaS4%3D","updated":"2014-02-17 09:40:53.000000000","message":"you are right. if you look inside \u0027_get_drivers_for_l7policy\u0027 you will see that this is what I am doing","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"4a7349d5eda0e6a3811184319df06312b21d6232","unresolved":false,"context_lines":[{"line_number":359,"context_line":"        l7_policy_id \u003d vip_l7policy[\u0027l7_policy_id\u0027]"},{"line_number":360,"context_line":"        drivers \u003d self._get_drivers_for_l7policy(l7_policy_id)"},{"line_number":361,"context_line":"        for driver in drivers:"},{"line_number":362,"context_line":"            driver.create_vip_l7policy(context, vip_l7policy)"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"    def delete_vip_l7policy(self, context, id, vip_id):"},{"line_number":365,"context_line":"        drivers \u003d self._get_drivers_for_l7policy(context, id)"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FP2w%3D","line":362,"updated":"2014-02-14 15:17:03.000000000","message":"better to include rules in this dict (seems currently they are not there) in advance so that driver don\u0027t need to call plugin for them. Probably that could be done in db _make_l7assoc_dict()","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"b26cedd3be7676b2e361518179941fe80f221deb","unresolved":false,"context_lines":[{"line_number":359,"context_line":"        l7_policy_id \u003d vip_l7policy[\u0027l7_policy_id\u0027]"},{"line_number":360,"context_line":"        drivers \u003d self._get_drivers_for_l7policy(l7_policy_id)"},{"line_number":361,"context_line":"        for driver in drivers:"},{"line_number":362,"context_line":"            driver.create_vip_l7policy(context, vip_l7policy)"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"    def delete_vip_l7policy(self, context, id, vip_id):"},{"line_number":365,"context_line":"        drivers \u003d self._get_drivers_for_l7policy(context, id)"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FCYc%3D","line":362,"in_reply_to":"AAAAUX%2F%2FDa8%3D","updated":"2014-02-17 14:11:39.000000000","message":"ok","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"3c433cd9e1443e85c7bb3649a106b4adc01ce8e5","unresolved":false,"context_lines":[{"line_number":359,"context_line":"        l7_policy_id \u003d vip_l7policy[\u0027l7_policy_id\u0027]"},{"line_number":360,"context_line":"        drivers \u003d self._get_drivers_for_l7policy(l7_policy_id)"},{"line_number":361,"context_line":"        for driver in drivers:"},{"line_number":362,"context_line":"            driver.create_vip_l7policy(context, vip_l7policy)"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"    def delete_vip_l7policy(self, context, id, vip_id):"},{"line_number":365,"context_line":"        drivers \u003d self._get_drivers_for_l7policy(context, id)"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FDa8%3D","line":362,"in_reply_to":"AAAAUX%2F%2FE50%3D","updated":"2014-02-17 12:36:52.000000000","message":"super(LoadBalancerPlugin, self).create_vip_l7policy at #358 returns  self._make_l7assoc_dict(), not _make_l7policy_dict()","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"8c475f6458e44a5cfae189cb0bd4fd541bec1fef","unresolved":false,"context_lines":[{"line_number":359,"context_line":"        l7_policy_id \u003d vip_l7policy[\u0027l7_policy_id\u0027]"},{"line_number":360,"context_line":"        drivers \u003d self._get_drivers_for_l7policy(l7_policy_id)"},{"line_number":361,"context_line":"        for driver in drivers:"},{"line_number":362,"context_line":"            driver.create_vip_l7policy(context, vip_l7policy)"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"    def delete_vip_l7policy(self, context, id, vip_id):"},{"line_number":365,"context_line":"        drivers \u003d self._get_drivers_for_l7policy(context, id)"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FE50%3D","line":362,"in_reply_to":"AAAAUX%2F%2FP2w%3D","updated":"2014-02-17 09:40:53.000000000","message":"I think I include them:\n  def _make_l7policy_dict(self, l7policy, fields\u003dNone):\n       res \u003d {\u0027tenant_id\u0027: l7policy[\u0027tenant_id\u0027],\n               \u0027id\u0027: l7policy[\u0027id\u0027],\n              \u0027name\u0027: l7policy[\u0027name\u0027]}\n       res[\u0027rules\u0027] \u003d [self._make_l7rule_dict(rule)\n                       for rule in l7policy[\u0027rules\u0027]]","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"047ef9dd3aada7a9e09523971e2f0c5e1aea0748","unresolved":false,"context_lines":[{"line_number":361,"context_line":"        for driver in drivers:"},{"line_number":362,"context_line":"            driver.create_vip_l7policy(context, vip_l7policy)"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"    def delete_vip_l7policy(self, context, id, vip_id):"},{"line_number":365,"context_line":"        drivers \u003d self._get_drivers_for_l7policy(context, id)"},{"line_number":366,"context_line":"        for driver in drivers:"},{"line_number":367,"context_line":"            driver.delete_vip_l7policy(context, id)"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FaRs%3D","line":364,"updated":"2014-02-13 12:09:18.000000000","message":"where the deletion of association from db should happen?","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"8c475f6458e44a5cfae189cb0bd4fd541bec1fef","unresolved":false,"context_lines":[{"line_number":361,"context_line":"        for driver in drivers:"},{"line_number":362,"context_line":"            driver.create_vip_l7policy(context, vip_l7policy)"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"    def delete_vip_l7policy(self, context, id, vip_id):"},{"line_number":365,"context_line":"        drivers \u003d self._get_drivers_for_l7policy(context, id)"},{"line_number":366,"context_line":"        for driver in drivers:"},{"line_number":367,"context_line":"            driver.delete_vip_l7policy(context, id)"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FE5M%3D","line":364,"in_reply_to":"AAAAUX%2F%2FaRs%3D","updated":"2014-02-17 09:40:53.000000000","message":"at the driver side - I should mark the assoc as pendeing_delete","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"047ef9dd3aada7a9e09523971e2f0c5e1aea0748","unresolved":false,"context_lines":[{"line_number":362,"context_line":"            driver.create_vip_l7policy(context, vip_l7policy)"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"    def delete_vip_l7policy(self, context, id, vip_id):"},{"line_number":365,"context_line":"        drivers \u003d self._get_drivers_for_l7policy(context, id)"},{"line_number":366,"context_line":"        for driver in drivers:"},{"line_number":367,"context_line":"            driver.delete_vip_l7policy(context, id)"},{"line_number":368,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FaSo%3D","line":365,"updated":"2014-02-13 12:09:18.000000000","message":"ditto","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"b26cedd3be7676b2e361518179941fe80f221deb","unresolved":false,"context_lines":[{"line_number":362,"context_line":"            driver.create_vip_l7policy(context, vip_l7policy)"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"    def delete_vip_l7policy(self, context, id, vip_id):"},{"line_number":365,"context_line":"        drivers \u003d self._get_drivers_for_l7policy(context, id)"},{"line_number":366,"context_line":"        for driver in drivers:"},{"line_number":367,"context_line":"            driver.delete_vip_l7policy(context, id)"},{"line_number":368,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FCgc%3D","line":365,"in_reply_to":"AAAAUX%2F%2FDZc%3D","updated":"2014-02-17 14:11:39.000000000","message":"I agree","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"3c433cd9e1443e85c7bb3649a106b4adc01ce8e5","unresolved":false,"context_lines":[{"line_number":362,"context_line":"            driver.create_vip_l7policy(context, vip_l7policy)"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"    def delete_vip_l7policy(self, context, id, vip_id):"},{"line_number":365,"context_line":"        drivers \u003d self._get_drivers_for_l7policy(context, id)"},{"line_number":366,"context_line":"        for driver in drivers:"},{"line_number":367,"context_line":"            driver.delete_vip_l7policy(context, id)"},{"line_number":368,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FDZc%3D","line":365,"in_reply_to":"AAAAUX%2F%2FaSo%3D","updated":"2014-02-17 12:36:52.000000000","message":"You don\u0027t need to call all drivers to delete the policy - just call the driver of this particular vip","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"4a7349d5eda0e6a3811184319df06312b21d6232","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        ).filter_by(l7_policy_id\u003dl7_policy_id)"},{"line_number":381,"context_line":"        drivers \u003d []"},{"line_number":382,"context_line":"        for assoc in qry:"},{"line_number":383,"context_line":"            vip \u003d self.get_vip(context, assoc[\u0027vip_id\u0027])"},{"line_number":384,"context_line":"            drivers.append(self._get_driver_for_pool(context, vip[\u0027pool_id\u0027]))"},{"line_number":385,"context_line":"        return drivers"},{"line_number":386,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FPt0%3D","line":383,"updated":"2014-02-14 15:17:03.000000000","message":"If two vips associated with the same policy belong to the same driver then we\u0027ll have that driver duplicated in the result. Later (at line #326 for example) same driver will be called twice with the same parameter with no way to distinguish which call is for which vip. A suggestion would be to include vip to each driver call. This will also save driver several db requests","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"8c475f6458e44a5cfae189cb0bd4fd541bec1fef","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        ).filter_by(l7_policy_id\u003dl7_policy_id)"},{"line_number":381,"context_line":"        drivers \u003d []"},{"line_number":382,"context_line":"        for assoc in qry:"},{"line_number":383,"context_line":"            vip \u003d self.get_vip(context, assoc[\u0027vip_id\u0027])"},{"line_number":384,"context_line":"            drivers.append(self._get_driver_for_pool(context, vip[\u0027pool_id\u0027]))"},{"line_number":385,"context_line":"        return drivers"},{"line_number":386,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUX%2F%2FE1w%3D","line":383,"in_reply_to":"AAAAUX%2F%2FPt0%3D","updated":"2014-02-17 09:40:53.000000000","message":"I agree it will save DB queries if we will add the Vip as well.\nWithout it the driver (assuming it was invoked on #326) will have to navigate: L7Rule --\u003e L7Policy --\u003e L7PolicyVipAssoc --\u003e Vip\nThis navigation is doable but it will be good if we can save that from the driver.","commit_id":"0236a24e69f392253a0144e0fa5e585610ba85f3"}],"neutron/tests/unit/db/loadbalancer/test_db_loadbalancer.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"02440a2eaaad6a4d52aca8d753962ea39ae575f6","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"class NoopLbaaSDriver(abstract_driver.LoadBalancerAbstractDriver):"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    \"\"\"A dummy lbass driver that that only performs object deletion.\"\"\""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def __init__(self, plugin):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F831Q%3D","line":67,"updated":"2013-12-19 10:34:13.000000000","message":"unrelated, not needed. Please remove all unrelated stylistic fixes as it makes it harder to review.","commit_id":"31c54ee1417ebaf9715a2d49ef214d351e824ed6"}]}
