)]}'
{"ovsdbapp/schema/ovn_northbound/commands.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b603cf0f76b35d51a2cc89f0be2b509ffffc001a","unresolved":false,"context_lines":[{"line_number":1027,"context_line":"        self.priority \u003d priority"},{"line_number":1028,"context_line":"        self.match \u003d match"},{"line_number":1029,"context_line":"        self.action \u003d action"},{"line_number":1030,"context_line":"        self.nexthop \u003d nexthop or []"},{"line_number":1031,"context_line":"        self.may_exist \u003d may_exist"},{"line_number":1032,"context_line":""},{"line_number":1033,"context_line":"    def run_idl(self, txn):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_e7ff83a8","line":1030,"range":{"start_line":1030,"start_character":30,"end_line":1030,"end_character":36},"updated":"2019-09-26 09:50:59.000000000","message":"It took me a while to realize why it\u0027s set to empty list. Perhaps better would be to skip setting policy.nexthop on L1047 if nexthop is set to None?","commit_id":"9d0d07823d78ce79c4a20703106bb82fbe656fdf"},{"author":{"_account_id":30297,"name":"Abhiram Sangana","email":"sangana.abhiram@nutanix.com","username":"Abh1ram"},"change_message_id":"018ae855edbf12fd139f11754ef8430f1c90a031","unresolved":false,"context_lines":[{"line_number":1027,"context_line":"        self.priority \u003d priority"},{"line_number":1028,"context_line":"        self.match \u003d match"},{"line_number":1029,"context_line":"        self.action \u003d action"},{"line_number":1030,"context_line":"        self.nexthop \u003d nexthop or []"},{"line_number":1031,"context_line":"        self.may_exist \u003d may_exist"},{"line_number":1032,"context_line":""},{"line_number":1033,"context_line":"    def run_idl(self, txn):"}],"source_content_type":"text/x-python","patch_set":4,"id":"4a27b958_0ed33c72","line":1030,"range":{"start_line":1030,"start_character":30,"end_line":1030,"end_character":36},"in_reply_to":"3fa7e38b_e7ff83a8","updated":"2021-08-14 07:27:59.000000000","message":"Sure - changed it.","commit_id":"9d0d07823d78ce79c4a20703106bb82fbe656fdf"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b603cf0f76b35d51a2cc89f0be2b509ffffc001a","unresolved":false,"context_lines":[{"line_number":1079,"context_line":"                policy.delete()"},{"line_number":1080,"context_line":"                if self.match and self.priority:"},{"line_number":1081,"context_line":"                    return"},{"line_number":1082,"context_line":"        if self.match and self.priority and not (found or self.if_exists):"},{"line_number":1083,"context_line":"            raise RuntimeError("},{"line_number":1084,"context_line":"                \"Policy with match %s and priority %s does not exist in \""},{"line_number":1085,"context_line":"                \"router %s\" % (self.match, self.priority, self.router))"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_27d27b01","line":1082,"updated":"2019-09-26 09:50:59.000000000","message":"What if we want to delete policy just based on match and we omit priority? It won\u0027t be found but we won\u0027t get an exception.","commit_id":"9d0d07823d78ce79c4a20703106bb82fbe656fdf"},{"author":{"_account_id":30297,"name":"Abhiram Sangana","email":"sangana.abhiram@nutanix.com","username":"Abh1ram"},"change_message_id":"018ae855edbf12fd139f11754ef8430f1c90a031","unresolved":false,"context_lines":[{"line_number":1079,"context_line":"                policy.delete()"},{"line_number":1080,"context_line":"                if self.match and self.priority:"},{"line_number":1081,"context_line":"                    return"},{"line_number":1082,"context_line":"        if self.match and self.priority and not (found or self.if_exists):"},{"line_number":1083,"context_line":"            raise RuntimeError("},{"line_number":1084,"context_line":"                \"Policy with match %s and priority %s does not exist in \""},{"line_number":1085,"context_line":"                \"router %s\" % (self.match, self.priority, self.router))"}],"source_content_type":"text/x-python","patch_set":4,"id":"f0f3696c_aa82c3ee","line":1082,"in_reply_to":"3fa7e38b_27d27b01","updated":"2021-08-14 07:27:59.000000000","message":"That is true. I have modified the behavior of this function to be similar to `ovn-nbctl lr-policy-del [PRIORITY [MATCH]]`","commit_id":"9d0d07823d78ce79c4a20703106bb82fbe656fdf"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"0193c51d10ada299f2a84ab299e39a9fbc20bfa5","unresolved":true,"context_lines":[{"line_number":1083,"context_line":"        lr.addvalue(\u0027policies\u0027, policy)"},{"line_number":1084,"context_line":"        self.result \u003d policy.uuid"},{"line_number":1085,"context_line":""},{"line_number":1086,"context_line":"    def post_commit(self, txn):"},{"line_number":1087,"context_line":"        real_uuid \u003d txn.get_insert_uuid(self.result)"},{"line_number":1088,"context_line":"        if real_uuid:"},{"line_number":1089,"context_line":"            row \u003d self.api.tables[\u0027Logical_Router_Policy\u0027].rows[real_uuid]"}],"source_content_type":"text/x-python","patch_set":7,"id":"fb8b34fb_8115d5ea","line":1086,"updated":"2021-09-02 16:04:30.000000000","message":"I think subclassing cmd.AddCommand will get you this post_commit(), and since it would be the same everywhere if we need to fix a bug with it, we could do it all in one place. (we\u0027ve been running into issues with AddCommand.post_commit and ovsdb-server message order that *may* require a workaround in this code)","commit_id":"33954047eb6da24b1503acef7d964f16a7ac0513"},{"author":{"_account_id":30297,"name":"Abhiram Sangana","email":"sangana.abhiram@nutanix.com","username":"Abh1ram"},"change_message_id":"e6d61f95008e8ce2fe4cf8ecdb4dd900e64dfbec","unresolved":true,"context_lines":[{"line_number":1083,"context_line":"        lr.addvalue(\u0027policies\u0027, policy)"},{"line_number":1084,"context_line":"        self.result \u003d policy.uuid"},{"line_number":1085,"context_line":""},{"line_number":1086,"context_line":"    def post_commit(self, txn):"},{"line_number":1087,"context_line":"        real_uuid \u003d txn.get_insert_uuid(self.result)"},{"line_number":1088,"context_line":"        if real_uuid:"},{"line_number":1089,"context_line":"            row \u003d self.api.tables[\u0027Logical_Router_Policy\u0027].rows[real_uuid]"}],"source_content_type":"text/x-python","patch_set":7,"id":"e2ac240f_0a42a798","line":1086,"in_reply_to":"fb8b34fb_8115d5ea","updated":"2021-09-06 17:34:01.000000000","message":"Thanks for catching this - I\u0027ve updated the subclass.","commit_id":"33954047eb6da24b1503acef7d964f16a7ac0513"}],"ovsdbapp/tests/functional/schema/ovn_northbound/test_impl_idl.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b603cf0f76b35d51a2cc89f0be2b509ffffc001a","unresolved":false,"context_lines":[{"line_number":907,"context_line":"        nexthop \u003d \"10.3.0.2\""},{"line_number":908,"context_line":"        policy \u003d self._lr_policy_add(priority, match, action, nexthop\u003dnexthop)"},{"line_number":909,"context_line":"        self.assertEqual(policy.nexthop, [nexthop])"},{"line_number":910,"context_line":""},{"line_number":911,"context_line":"    def test_lr_policy_add_reroute_no_nexthop(self):"},{"line_number":912,"context_line":"        priority \u003d 10"},{"line_number":913,"context_line":"        match \u003d \u0027ip4.dst\u003d\u003d10.1.0.0/16 \u0026\u0026 ip4.src\u003d\u003d10.2.0.0/16\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_8737af4d","line":910,"updated":"2019-09-26 09:50:59.000000000","message":"Missing test case where action is out of valid actions.","commit_id":"9d0d07823d78ce79c4a20703106bb82fbe656fdf"},{"author":{"_account_id":30297,"name":"Abhiram Sangana","email":"sangana.abhiram@nutanix.com","username":"Abh1ram"},"change_message_id":"018ae855edbf12fd139f11754ef8430f1c90a031","unresolved":false,"context_lines":[{"line_number":907,"context_line":"        nexthop \u003d \"10.3.0.2\""},{"line_number":908,"context_line":"        policy \u003d self._lr_policy_add(priority, match, action, nexthop\u003dnexthop)"},{"line_number":909,"context_line":"        self.assertEqual(policy.nexthop, [nexthop])"},{"line_number":910,"context_line":""},{"line_number":911,"context_line":"    def test_lr_policy_add_reroute_no_nexthop(self):"},{"line_number":912,"context_line":"        priority \u003d 10"},{"line_number":913,"context_line":"        match \u003d \u0027ip4.dst\u003d\u003d10.1.0.0/16 \u0026\u0026 ip4.src\u003d\u003d10.2.0.0/16\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"e2f0cf1a_5fbecb09","line":910,"in_reply_to":"3fa7e38b_8737af4d","updated":"2021-08-14 07:27:59.000000000","message":"Added the case.","commit_id":"9d0d07823d78ce79c4a20703106bb82fbe656fdf"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b603cf0f76b35d51a2cc89f0be2b509ffffc001a","unresolved":false,"context_lines":[{"line_number":944,"context_line":"        pr1 \u003d 10"},{"line_number":945,"context_line":"        pr2 \u003d 9"},{"line_number":946,"context_line":"        match1 \u003d \u0027ip4.src\u003d\u003d10.1.1.0/24 \u0026\u0026 ip4.dst\u003d\u003d20.1.1.0/24\u0027"},{"line_number":947,"context_line":"        match2 \u003d \u0027ip4.src\u003d\u003d30.1.1.0/24 \u0026\u0026 ip4.dst\u003d\u003d40.1.1.0/24\u0027"},{"line_number":948,"context_line":"        self._lr_policy_add(pr1, match1, const.POLICY_ACTION_ALLOW,"},{"line_number":949,"context_line":"                            router\u003dlr)"},{"line_number":950,"context_line":"        self._lr_policy_add(pr2, match2, const.POLICY_ACTION_DROP,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_276efb2e","line":947,"range":{"start_line":947,"start_character":0,"end_line":947,"end_character":63},"updated":"2019-09-26 09:50:59.000000000","message":"would be good to make these e.g. a class attribute and reuse on L968 to avoid typos.","commit_id":"9d0d07823d78ce79c4a20703106bb82fbe656fdf"},{"author":{"_account_id":30297,"name":"Abhiram Sangana","email":"sangana.abhiram@nutanix.com","username":"Abh1ram"},"change_message_id":"018ae855edbf12fd139f11754ef8430f1c90a031","unresolved":false,"context_lines":[{"line_number":944,"context_line":"        pr1 \u003d 10"},{"line_number":945,"context_line":"        pr2 \u003d 9"},{"line_number":946,"context_line":"        match1 \u003d \u0027ip4.src\u003d\u003d10.1.1.0/24 \u0026\u0026 ip4.dst\u003d\u003d20.1.1.0/24\u0027"},{"line_number":947,"context_line":"        match2 \u003d \u0027ip4.src\u003d\u003d30.1.1.0/24 \u0026\u0026 ip4.dst\u003d\u003d40.1.1.0/24\u0027"},{"line_number":948,"context_line":"        self._lr_policy_add(pr1, match1, const.POLICY_ACTION_ALLOW,"},{"line_number":949,"context_line":"                            router\u003dlr)"},{"line_number":950,"context_line":"        self._lr_policy_add(pr2, match2, const.POLICY_ACTION_DROP,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1b827657_6f852b92","line":947,"range":{"start_line":947,"start_character":0,"end_line":947,"end_character":63},"in_reply_to":"3fa7e38b_276efb2e","updated":"2021-08-14 07:27:59.000000000","message":"Right - added the match conditions as class attributes.","commit_id":"9d0d07823d78ce79c4a20703106bb82fbe656fdf"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b603cf0f76b35d51a2cc89f0be2b509ffffc001a","unresolved":false,"context_lines":[{"line_number":987,"context_line":"    def test_lr_policy_del_not_found(self):"},{"line_number":988,"context_line":"        self.assertRaises(RuntimeError, self._lr_policy_del,"},{"line_number":989,"context_line":"                          priority\u003d100, match\u003d\u0027ip4.dst\u003d\u003d40.1.1.0/24\u0027)"},{"line_number":990,"context_line":""},{"line_number":991,"context_line":"    def test_lr_policy_del_if_exists(self):"},{"line_number":992,"context_line":"        lr \u003d self._lr_policy_del(priority\u003d100, match\u003d\u0027ip4.dst\u003d\u003d40.1.1.0/24\u0027,"},{"line_number":993,"context_line":"                                 if_exists\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_87d32fd5","line":990,"updated":"2019-09-26 09:50:59.000000000","message":"Missing a case where either priority or match is passed and doesn\u0027t match anything.","commit_id":"9d0d07823d78ce79c4a20703106bb82fbe656fdf"},{"author":{"_account_id":30297,"name":"Abhiram Sangana","email":"sangana.abhiram@nutanix.com","username":"Abh1ram"},"change_message_id":"018ae855edbf12fd139f11754ef8430f1c90a031","unresolved":false,"context_lines":[{"line_number":987,"context_line":"    def test_lr_policy_del_not_found(self):"},{"line_number":988,"context_line":"        self.assertRaises(RuntimeError, self._lr_policy_del,"},{"line_number":989,"context_line":"                          priority\u003d100, match\u003d\u0027ip4.dst\u003d\u003d40.1.1.0/24\u0027)"},{"line_number":990,"context_line":""},{"line_number":991,"context_line":"    def test_lr_policy_del_if_exists(self):"},{"line_number":992,"context_line":"        lr \u003d self._lr_policy_del(priority\u003d100, match\u003d\u0027ip4.dst\u003d\u003d40.1.1.0/24\u0027,"},{"line_number":993,"context_line":"                                 if_exists\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":4,"id":"36f4eb11_263215d1","line":990,"in_reply_to":"3fa7e38b_87d32fd5","updated":"2021-08-14 07:27:59.000000000","message":"After modifying the LrPolicyDel function behavior, I think we don\u0027t need this case.","commit_id":"9d0d07823d78ce79c4a20703106bb82fbe656fdf"}]}
