)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"1419130a0ed6f6b7ffd56929c35f37e8ab238fe8","unresolved":false,"context_lines":[{"line_number":9,"context_line":"To make it easy to test, I write all codes in neutron."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I9b92702af8a235443a2fa1aea3997f3d40a03fc3"},{"line_number":12,"context_line":"Closes-Bug: bug/1877301"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9f560f44_49f3839f","line":12,"range":{"start_line":12,"start_character":12,"end_line":12,"end_character":23},"updated":"2020-07-27 07:26:12.000000000","message":"#1877391","commit_id":"4cbf091e6b2a2870e1c7ec96687902b153e42acd"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"6eea0857f0c817da24aa3a0033aec8df7b2b236a","unresolved":true,"context_lines":[{"line_number":7,"context_line":"[Server Side] L3 router support ndp proxy"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I9b92702af8a235443a2fa1aea3997f3d40a03fc3"},{"line_number":10,"context_line":"Closes-Bug: #1877301"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":35,"id":"06d75e8b_0d935c52","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":6},"updated":"2022-01-10 11:18:21.000000000","message":"\"Partial\" as this is start of the chain as I see","commit_id":"26130295ec4d4b96f79900d6e320f02b57001795"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"0b38a24a21d713bb36d0e5bf09e201f21050f24e","unresolved":true,"context_lines":[{"line_number":7,"context_line":"[Server Side] L3 router support ndp proxy"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I9b92702af8a235443a2fa1aea3997f3d40a03fc3"},{"line_number":10,"context_line":"Closes-Bug: #1877301"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":35,"id":"30e6494d_094319ec","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":6},"in_reply_to":"06d75e8b_0d935c52","updated":"2022-01-18 06:21:24.000000000","message":"thx","commit_id":"26130295ec4d4b96f79900d6e320f02b57001795"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"3835806df538fd76b1d4b3c5e39c17f9aefd091e","unresolved":false,"context_lines":[{"line_number":7,"context_line":"[Server Side] L3 router support ndp proxy"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I9b92702af8a235443a2fa1aea3997f3d40a03fc3"},{"line_number":10,"context_line":"Closes-Bug: #1877301"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":35,"id":"75e0948a_83bb764f","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":6},"in_reply_to":"30e6494d_094319ec","updated":"2022-01-18 07:15:11.000000000","message":"Done","commit_id":"26130295ec4d4b96f79900d6e320f02b57001795"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"f1588c0496c9634e30052ec8e9f6da704a0dc23d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"2cf38dd4_97d8d5df","updated":"2021-11-21 08:55:05.000000000","message":"recheck","commit_id":"e6982caa274dad3806eed5cb90a9beb29682dfb6"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"2a8a3a710a349d225dd320d1f7ff53c97428d608","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":30,"id":"7f4323f1_31caaddf","updated":"2021-11-29 01:48:20.000000000","message":"recheck","commit_id":"527ab2bdf7994d16d84ee2f2f41b03db85e8e302"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"8e763df5920e60c32ce863a89d52d954e270ebc8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":30,"id":"f1729ed6_0e315486","updated":"2021-11-28 02:12:00.000000000","message":"recheck","commit_id":"527ab2bdf7994d16d84ee2f2f41b03db85e8e302"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"d29e98d27dda94a882d2cf5fc0b800803238324f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":32,"id":"f781563c_7a4b21b4","updated":"2021-12-06 06:57:23.000000000","message":"Unit tests should not force how code should be written","commit_id":"34f3fa50fa8da5bbd96002c03c0ceaeeb947c5d4"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"0b38a24a21d713bb36d0e5bf09e201f21050f24e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":35,"id":"72022f72_cc778d59","updated":"2022-01-18 06:21:24.000000000","message":"Sorry for my late response, I will fixed these issues as soon as possible.","commit_id":"26130295ec4d4b96f79900d6e320f02b57001795"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"ee857d261bea8fa4f45a665a3323d73516446104","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":35,"id":"1a21f2a5_1652464f","updated":"2021-12-28 00:36:13.000000000","message":"recheck","commit_id":"26130295ec4d4b96f79900d6e320f02b57001795"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"48ba68b28646f81202322ff8953fe2bda7a55ba6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":35,"id":"4bba709d_ed5f9006","updated":"2021-12-29 01:51:17.000000000","message":"recheck","commit_id":"26130295ec4d4b96f79900d6e320f02b57001795"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"312e37c8eefbc34fe532ccb5a101df743cee11ee","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":35,"id":"5bdfeef8_d447272a","updated":"2021-12-28 10:08:36.000000000","message":"recheck","commit_id":"26130295ec4d4b96f79900d6e320f02b57001795"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"bd8d1a43e66f0e3d8f680fdf5b867a5e27b8fe01","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":35,"id":"a3e51e64_cd37f2c5","updated":"2022-01-01 05:59:00.000000000","message":"recheck","commit_id":"26130295ec4d4b96f79900d6e320f02b57001795"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"bb309d4c0d6de30aae99c25a64e9df39f992fb40","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":39,"id":"63231cba_e4bbea4d","updated":"2022-01-26 12:09:22.000000000","message":"recheck","commit_id":"e00eea06210394e4e578f6fd9c077d7cd81dba6d"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"3cecb008392e50cd5a9eb8eccdd906901adfd113","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":40,"id":"2274af5d_a147fcd5","updated":"2022-02-03 04:38:13.000000000","message":"recheck","commit_id":"a0a25cb15c4f04baeed7319b7cdaea328d043388"}],"neutron/api/extensions.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"38d26d8f3c8a72c8576cf2176d4fba0abf5dbb7c","unresolved":false,"context_lines":[{"line_number":336,"context_line":"        extenable_attr_types \u003d [\u0027type:dict\u0027, \u0027type:dict_or_none\u0027,"},{"line_number":337,"context_line":"                                \u0027type:dict_or_empty\u0027, \u0027type:dict_or_nodata\u0027]"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"        def _precess_extendable_attributes(origin_attrs, ext_attrs):"},{"line_number":340,"context_line":"            for attr_name, attr_constraint in ext_attrs.items():"},{"line_number":341,"context_line":"                if \u0027validate\u0027 not in attr_constraint:"},{"line_number":342,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_a9afbf92","line":339,"range":{"start_line":339,"start_character":12,"end_line":339,"end_character":42},"updated":"2020-07-27 07:25:31.000000000","message":"this deals with validation, so please consider a more meaningful name for better readability","commit_id":"4cbf091e6b2a2870e1c7ec96687902b153e42acd"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"38d26d8f3c8a72c8576cf2176d4fba0abf5dbb7c","unresolved":false,"context_lines":[{"line_number":336,"context_line":"        extenable_attr_types \u003d [\u0027type:dict\u0027, \u0027type:dict_or_none\u0027,"},{"line_number":337,"context_line":"                                \u0027type:dict_or_empty\u0027, \u0027type:dict_or_nodata\u0027]"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"        def _precess_extendable_attributes(origin_attrs, ext_attrs):"},{"line_number":340,"context_line":"            for attr_name, attr_constraint in ext_attrs.items():"},{"line_number":341,"context_line":"                if \u0027validate\u0027 not in attr_constraint:"},{"line_number":342,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_89a0fba7","line":339,"range":{"start_line":339,"start_character":13,"end_line":339,"end_character":20},"updated":"2020-07-27 07:25:31.000000000","message":"typo in process","commit_id":"4cbf091e6b2a2870e1c7ec96687902b153e42acd"}],"neutron/conf/db/l3_ndpproxy_db.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"4ecfd7531de83fccca01089feb2424e5a7dabfa6","unresolved":true,"context_lines":[{"line_number":20,"context_line":"    cfg.BoolOpt(\u0027enable_ndp_proxy_by_default\u0027, default\u003dFalse,"},{"line_number":21,"context_line":"                help\u003d_(\u0027Define the default value of enable_ndp_proxy if not \u0027"},{"line_number":22,"context_line":"                       \u0027provided in router.\u0027)),"},{"line_number":23,"context_line":"    cfg.BoolOpt(\u0027use_lla_address\u0027, default\u003dFalse,"},{"line_number":24,"context_line":"                help\u003d_(\u0027With IPv6, the network used for the external gateway \u0027"},{"line_number":25,"context_line":"                       \u0027does not need to have an associated subnet, since the \u0027"},{"line_number":26,"context_line":"                       \u0027automatically assigned link-local address (LLA) can \u0027"}],"source_content_type":"text/x-python","patch_set":38,"id":"161f4402_1dbf33ff","line":23,"range":{"start_line":23,"start_character":17,"end_line":23,"end_character":32},"updated":"2022-01-20 07:54:45.000000000","message":"I don\u0027t see that config option proposed in the spec https://review.opendev.org/c/openstack/neutron-specs/+/728628/41/specs/xena/l3-router-support-ndp-proxy.rst#665, why?","commit_id":"8ebe45e2e2e551aa33b59beb0df81b295ccd0221"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"955c5b2691acebb4f742f8df3ba5843e3ed793e5","unresolved":true,"context_lines":[{"line_number":20,"context_line":"    cfg.BoolOpt(\u0027enable_ndp_proxy_by_default\u0027, default\u003dFalse,"},{"line_number":21,"context_line":"                help\u003d_(\u0027Define the default value of enable_ndp_proxy if not \u0027"},{"line_number":22,"context_line":"                       \u0027provided in router.\u0027)),"},{"line_number":23,"context_line":"    cfg.BoolOpt(\u0027use_lla_address\u0027, default\u003dFalse,"},{"line_number":24,"context_line":"                help\u003d_(\u0027With IPv6, the network used for the external gateway \u0027"},{"line_number":25,"context_line":"                       \u0027does not need to have an associated subnet, since the \u0027"},{"line_number":26,"context_line":"                       \u0027automatically assigned link-local address (LLA) can \u0027"}],"source_content_type":"text/x-python","patch_set":38,"id":"6e002a9e_62971ee8","line":23,"range":{"start_line":23,"start_character":17,"end_line":23,"end_character":32},"in_reply_to":"161f4402_1dbf33ff","updated":"2022-01-25 06:39:39.000000000","message":"Yep, the spec don\u0027t contain this config option. Because I realized later that the external network does not need an IPv6 subnet (the network interface has LLA(local link address), it can be used to support  the route forward). So, I add this config option.","commit_id":"8ebe45e2e2e551aa33b59beb0df81b295ccd0221"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"67fa676c529151879e5a739bbe3354671b24c517","unresolved":true,"context_lines":[{"line_number":20,"context_line":"    cfg.BoolOpt(\u0027enable_ndp_proxy_by_default\u0027, default\u003dFalse,"},{"line_number":21,"context_line":"                help\u003d_(\u0027Define the default value of enable_ndp_proxy if not \u0027"},{"line_number":22,"context_line":"                       \u0027provided in router.\u0027)),"},{"line_number":23,"context_line":"    cfg.BoolOpt(\u0027use_lla_address\u0027, default\u003dFalse,"},{"line_number":24,"context_line":"                help\u003d_(\u0027With IPv6, the network used for the external gateway \u0027"},{"line_number":25,"context_line":"                       \u0027does not need to have an associated subnet, since the \u0027"},{"line_number":26,"context_line":"                       \u0027automatically assigned link-local address (LLA) can \u0027"}],"source_content_type":"text/x-python","patch_set":38,"id":"9eaa495c_1cee7ef6","line":23,"range":{"start_line":23,"start_character":17,"end_line":23,"end_character":32},"in_reply_to":"6e002a9e_62971ee8","updated":"2022-02-02 19:35:33.000000000","message":"maybe you can update spec then to add it?","commit_id":"8ebe45e2e2e551aa33b59beb0df81b295ccd0221"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"92db84fbd586759c7fb6b66d881d4841cfc52981","unresolved":true,"context_lines":[{"line_number":20,"context_line":"    cfg.BoolOpt(\u0027enable_ndp_proxy_by_default\u0027, default\u003dFalse,"},{"line_number":21,"context_line":"                help\u003d_(\u0027Define the default value of enable_ndp_proxy if not \u0027"},{"line_number":22,"context_line":"                       \u0027provided in router.\u0027)),"},{"line_number":23,"context_line":"    cfg.BoolOpt(\u0027use_lla_address\u0027, default\u003dFalse,"},{"line_number":24,"context_line":"                help\u003d_(\u0027With IPv6, the network used for the external gateway \u0027"},{"line_number":25,"context_line":"                       \u0027does not need to have an associated subnet, since the \u0027"},{"line_number":26,"context_line":"                       \u0027automatically assigned link-local address (LLA) can \u0027"}],"source_content_type":"text/x-python","patch_set":38,"id":"f03b48d1_8f654b51","line":23,"range":{"start_line":23,"start_character":17,"end_line":23,"end_character":32},"in_reply_to":"9eaa495c_1cee7ef6","updated":"2022-02-03 02:24:42.000000000","message":"OK, I will update the spec on later. But now, I temporarily removed this configuration option so that this patch conform to the current spec.","commit_id":"8ebe45e2e2e551aa33b59beb0df81b295ccd0221"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"4ecfd7531de83fccca01089feb2424e5a7dabfa6","unresolved":true,"context_lines":[{"line_number":25,"context_line":"                       \u0027does not need to have an associated subnet, since the \u0027"},{"line_number":26,"context_line":"                       \u0027automatically assigned link-local address (LLA) can \u0027"},{"line_number":27,"context_line":"                       \u0027be used. However, for activate the LLA address, the \u0027"},{"line_number":28,"context_line":"                       \u0027ipv6_gateway option must be set in l3 agent side. If \u0027"},{"line_number":29,"context_line":"                       \u0027ipv6_gateway is not set, the option should be set as \u0027"},{"line_number":30,"context_line":"                       \u0027False.\u0027))"},{"line_number":31,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":38,"id":"8b0bf400_dd5649c2","line":28,"range":{"start_line":28,"start_character":59,"end_line":28,"end_character":62},"updated":"2022-01-20 07:54:45.000000000","message":"nit: I think that it should be \"the L3 agent\" but I may be wrong here","commit_id":"8ebe45e2e2e551aa33b59beb0df81b295ccd0221"}],"neutron/conf/policies/ndp_proxy.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"6eea0857f0c817da24aa3a0033aec8df7b2b236a","unresolved":true,"context_lines":[{"line_number":23,"context_line":"rules \u003d ["},{"line_number":24,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":25,"context_line":"        name\u003d\u0027get_ndp_proxy\u0027,"},{"line_number":26,"context_line":"        check_str\u003dbase.SYSTEM_OR_PROJECT_READER,"},{"line_number":27,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027project\u0027],"},{"line_number":28,"context_line":"        description\u003d\u0027Get a NDP proxy\u0027,"},{"line_number":29,"context_line":"        operations\u003d["},{"line_number":30,"context_line":"            {"}],"source_content_type":"text/x-python","patch_set":35,"id":"deda78c3_2140683e","line":27,"range":{"start_line":26,"start_character":8,"end_line":27,"end_character":42},"updated":"2022-01-10 11:18:21.000000000","message":"please check https://review.opendev.org/c/openstack/neutron/+/821208 and update according to new guidelines","commit_id":"26130295ec4d4b96f79900d6e320f02b57001795"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"3835806df538fd76b1d4b3c5e39c17f9aefd091e","unresolved":true,"context_lines":[{"line_number":23,"context_line":"rules \u003d ["},{"line_number":24,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":25,"context_line":"        name\u003d\u0027get_ndp_proxy\u0027,"},{"line_number":26,"context_line":"        check_str\u003dbase.SYSTEM_OR_PROJECT_READER,"},{"line_number":27,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027project\u0027],"},{"line_number":28,"context_line":"        description\u003d\u0027Get a NDP proxy\u0027,"},{"line_number":29,"context_line":"        operations\u003d["},{"line_number":30,"context_line":"            {"}],"source_content_type":"text/x-python","patch_set":35,"id":"2ccce2cc_f0a89dd2","line":27,"range":{"start_line":26,"start_character":8,"end_line":27,"end_character":42},"in_reply_to":"214b9892_46bd7104","updated":"2022-01-18 07:15:11.000000000","message":"I deleted this file new, after the patch https://review.opendev.org/821208 merged, I will commit a new patch.","commit_id":"26130295ec4d4b96f79900d6e320f02b57001795"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"0b38a24a21d713bb36d0e5bf09e201f21050f24e","unresolved":true,"context_lines":[{"line_number":23,"context_line":"rules \u003d ["},{"line_number":24,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":25,"context_line":"        name\u003d\u0027get_ndp_proxy\u0027,"},{"line_number":26,"context_line":"        check_str\u003dbase.SYSTEM_OR_PROJECT_READER,"},{"line_number":27,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027project\u0027],"},{"line_number":28,"context_line":"        description\u003d\u0027Get a NDP proxy\u0027,"},{"line_number":29,"context_line":"        operations\u003d["},{"line_number":30,"context_line":"            {"}],"source_content_type":"text/x-python","patch_set":35,"id":"214b9892_46bd7104","line":27,"range":{"start_line":26,"start_character":8,"end_line":27,"end_character":42},"in_reply_to":"deda78c3_2140683e","updated":"2022-01-18 06:21:24.000000000","message":"Thanks for your reminder, I will modify it later.","commit_id":"26130295ec4d4b96f79900d6e320f02b57001795"}],"neutron/db/migration/alembic_migrations/versions/victoria/expand/34cf8b009713_add_routerndpproxyenable_table.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"38d26d8f3c8a72c8576cf2176d4fba0abf5dbb7c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"9f560f44_6993e750","updated":"2020-07-27 07:25:31.000000000","message":"why need 2 migrations?","commit_id":"4cbf091e6b2a2870e1c7ec96687902b153e42acd"}],"neutron/db/migration/alembic_migrations/versions/yoga/expand/34cf8b009713_add_router_ndp_proxy_table.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"82dc6608a6ef989699844d44479c235ceed2db49","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Copyright 2020 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":30,"id":"8c4576ef_85ebe18d","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"updated":"2021-11-29 15:22:22.000000000","message":"nit: 2021","commit_id":"527ab2bdf7994d16d84ee2f2f41b03db85e8e302"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"f6de21c9aeaae0882764bf09455579dcdeaad482","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2020 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":30,"id":"c53464ea_f3ad7178","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"in_reply_to":"8c4576ef_85ebe18d","updated":"2021-12-05 03:26:23.000000000","message":"Done","commit_id":"527ab2bdf7994d16d84ee2f2f41b03db85e8e302"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"82dc6608a6ef989699844d44479c235ceed2db49","unresolved":true,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Revision ID: 34cf8b009713"},{"line_number":25,"context_line":"Revises: 76df7844a8c6"},{"line_number":26,"context_line":"Create Date: 2020-07-04 03:57:34.838905"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"\"\"\""},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"c5458ba4_fa1505ed","line":26,"range":{"start_line":26,"start_character":13,"end_line":26,"end_character":23},"updated":"2021-11-29 15:22:22.000000000","message":"please update to current date :)","commit_id":"527ab2bdf7994d16d84ee2f2f41b03db85e8e302"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"f6de21c9aeaae0882764bf09455579dcdeaad482","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Revision ID: 34cf8b009713"},{"line_number":25,"context_line":"Revises: 76df7844a8c6"},{"line_number":26,"context_line":"Create Date: 2020-07-04 03:57:34.838905"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"\"\"\""},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"6719f810_cfb23af1","line":26,"range":{"start_line":26,"start_character":13,"end_line":26,"end_character":23},"in_reply_to":"c5458ba4_fa1505ed","updated":"2021-12-05 03:26:23.000000000","message":"Done","commit_id":"527ab2bdf7994d16d84ee2f2f41b03db85e8e302"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"82dc6608a6ef989699844d44479c235ceed2db49","unresolved":true,"context_lines":[{"line_number":56,"context_line":"        sa.Column(\u0027port_id\u0027,"},{"line_number":57,"context_line":"                  sa.String(length\u003dconstants.UUID_FIELD_SIZE),"},{"line_number":58,"context_line":"                  nullable\u003dFalse),"},{"line_number":59,"context_line":"        sa.Column(\u0027ip_address\u0027, sa.String(64),"},{"line_number":60,"context_line":"                  nullable\u003dFalse),"},{"line_number":61,"context_line":"        sa.Column(\u0027standard_attr_id\u0027, sa.BigInteger(), nullable\u003dFalse),"},{"line_number":62,"context_line":"        sa.ForeignKeyConstraint([\u0027router_id\u0027], [\u0027routers.id\u0027],"}],"source_content_type":"text/x-python","patch_set":30,"id":"515f34c2_0a46a6f5","line":59,"range":{"start_line":59,"start_character":42,"end_line":59,"end_character":44},"updated":"2021-11-29 15:22:22.000000000","message":"IP_ADDR_FIELD_SIZE","commit_id":"527ab2bdf7994d16d84ee2f2f41b03db85e8e302"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"f6de21c9aeaae0882764bf09455579dcdeaad482","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        sa.Column(\u0027port_id\u0027,"},{"line_number":57,"context_line":"                  sa.String(length\u003dconstants.UUID_FIELD_SIZE),"},{"line_number":58,"context_line":"                  nullable\u003dFalse),"},{"line_number":59,"context_line":"        sa.Column(\u0027ip_address\u0027, sa.String(64),"},{"line_number":60,"context_line":"                  nullable\u003dFalse),"},{"line_number":61,"context_line":"        sa.Column(\u0027standard_attr_id\u0027, sa.BigInteger(), nullable\u003dFalse),"},{"line_number":62,"context_line":"        sa.ForeignKeyConstraint([\u0027router_id\u0027], [\u0027routers.id\u0027],"}],"source_content_type":"text/x-python","patch_set":30,"id":"1c85403d_b119f020","line":59,"range":{"start_line":59,"start_character":42,"end_line":59,"end_character":44},"in_reply_to":"515f34c2_0a46a6f5","updated":"2021-12-05 03:26:23.000000000","message":"Done","commit_id":"527ab2bdf7994d16d84ee2f2f41b03db85e8e302"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"4ecfd7531de83fccca01089feb2424e5a7dabfa6","unresolved":true,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"def upgrade():"},{"line_number":36,"context_line":"    op.create_table("},{"line_number":37,"context_line":"        \u0027router_ndp_proxy_state\u0027,"},{"line_number":38,"context_line":"        sa.Column(\u0027router_id\u0027, sa.String(length\u003dconstants.UUID_FIELD_SIZE),"},{"line_number":39,"context_line":"                  nullable\u003dFalse),"},{"line_number":40,"context_line":"        sa.Column(\u0027enable_ndp_proxy\u0027, sa.Boolean(), nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":38,"id":"0b2a0924_9a499405","line":37,"range":{"start_line":37,"start_character":9,"end_line":37,"end_character":31},"updated":"2022-01-20 07:54:45.000000000","message":"I don\u0027t see that table proposed in the spec? Is it something what was changed during the implementation?","commit_id":"8ebe45e2e2e551aa33b59beb0df81b295ccd0221"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"955c5b2691acebb4f742f8df3ba5843e3ed793e5","unresolved":true,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"def upgrade():"},{"line_number":36,"context_line":"    op.create_table("},{"line_number":37,"context_line":"        \u0027router_ndp_proxy_state\u0027,"},{"line_number":38,"context_line":"        sa.Column(\u0027router_id\u0027, sa.String(length\u003dconstants.UUID_FIELD_SIZE),"},{"line_number":39,"context_line":"                  nullable\u003dFalse),"},{"line_number":40,"context_line":"        sa.Column(\u0027enable_ndp_proxy\u0027, sa.Boolean(), nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":38,"id":"4f8d4f08_c55ea801","line":37,"range":{"start_line":37,"start_character":9,"end_line":37,"end_character":31},"in_reply_to":"0b2a0924_9a499405","updated":"2022-01-25 06:39:39.000000000","message":"In data-model-impact [1], I proposed the table.\n\n[1] https://specs.openstack.org/openstack/neutron-specs/specs/xena/l3-router-support-ndp-proxy.html#data-model-impact","commit_id":"8ebe45e2e2e551aa33b59beb0df81b295ccd0221"}],"neutron/db/models/ndp_proxy.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"82dc6608a6ef989699844d44479c235ceed2db49","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Copyright 2020 Troila"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":30,"id":"7942ffe0_97b98b27","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"updated":"2021-11-29 15:22:22.000000000","message":"nit: 2021","commit_id":"527ab2bdf7994d16d84ee2f2f41b03db85e8e302"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"f6de21c9aeaae0882764bf09455579dcdeaad482","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2020 Troila"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":30,"id":"fc7d8246_01d9ebf6","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"in_reply_to":"7942ffe0_97b98b27","updated":"2021-12-05 03:26:23.000000000","message":"Done","commit_id":"527ab2bdf7994d16d84ee2f2f41b03db85e8e302"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"82dc6608a6ef989699844d44479c235ceed2db49","unresolved":true,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from neutron.db.models import l3"},{"line_number":23,"context_line":"from neutron.db import models_v2"},{"line_number":24,"context_line":"from neutron_lib.db import constants as db_const"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class NDPProxy(standard_attr.HasStandardAttributes,"}],"source_content_type":"text/x-python","patch_set":30,"id":"fe1272e9_f362520b","line":24,"range":{"start_line":24,"start_character":0,"end_line":24,"end_character":48},"updated":"2021-11-29 15:22:22.000000000","message":"lib import should be in 3rd party import section above","commit_id":"527ab2bdf7994d16d84ee2f2f41b03db85e8e302"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"f6de21c9aeaae0882764bf09455579dcdeaad482","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from neutron.db.models import l3"},{"line_number":23,"context_line":"from neutron.db import models_v2"},{"line_number":24,"context_line":"from neutron_lib.db import constants as db_const"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class NDPProxy(standard_attr.HasStandardAttributes,"}],"source_content_type":"text/x-python","patch_set":30,"id":"8613c9e2_10a28563","line":24,"range":{"start_line":24,"start_character":0,"end_line":24,"end_character":48},"in_reply_to":"fe1272e9_f362520b","updated":"2021-12-05 03:26:23.000000000","message":"Done","commit_id":"527ab2bdf7994d16d84ee2f2f41b03db85e8e302"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"82dc6608a6ef989699844d44479c235ceed2db49","unresolved":true,"context_lines":[{"line_number":39,"context_line":"                        sa.ForeignKey(\u0027ports.id\u0027,"},{"line_number":40,"context_line":"                                      ondelete\u003d\"CASCADE\"),"},{"line_number":41,"context_line":"                        nullable\u003dFalse)"},{"line_number":42,"context_line":"    ip_address \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":43,"context_line":"    port \u003d orm.relationship("},{"line_number":44,"context_line":"        models_v2.Port, load_on_pending\u003dTrue,"},{"line_number":45,"context_line":"        backref\u003dorm.backref(\"ndp_proxies\","}],"source_content_type":"text/x-python","patch_set":30,"id":"dc7ab1ea_8226532c","line":42,"range":{"start_line":42,"start_character":37,"end_line":42,"end_character":39},"updated":"2021-11-29 15:22:22.000000000","message":"IP_ADDR_FIELD_SIZE","commit_id":"527ab2bdf7994d16d84ee2f2f41b03db85e8e302"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"f6de21c9aeaae0882764bf09455579dcdeaad482","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                        sa.ForeignKey(\u0027ports.id\u0027,"},{"line_number":40,"context_line":"                                      ondelete\u003d\"CASCADE\"),"},{"line_number":41,"context_line":"                        nullable\u003dFalse)"},{"line_number":42,"context_line":"    ip_address \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":43,"context_line":"    port \u003d orm.relationship("},{"line_number":44,"context_line":"        models_v2.Port, load_on_pending\u003dTrue,"},{"line_number":45,"context_line":"        backref\u003dorm.backref(\"ndp_proxies\","}],"source_content_type":"text/x-python","patch_set":30,"id":"f5e367a7_a52cdfce","line":42,"range":{"start_line":42,"start_character":37,"end_line":42,"end_character":39},"in_reply_to":"dc7ab1ea_8226532c","updated":"2021-12-05 03:26:23.000000000","message":"Done","commit_id":"527ab2bdf7994d16d84ee2f2f41b03db85e8e302"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"82dc6608a6ef989699844d44479c235ceed2db49","unresolved":true,"context_lines":[{"line_number":43,"context_line":"    port \u003d orm.relationship("},{"line_number":44,"context_line":"        models_v2.Port, load_on_pending\u003dTrue,"},{"line_number":45,"context_line":"        backref\u003dorm.backref(\"ndp_proxies\","},{"line_number":46,"context_line":"                            lazy\u003d\u0027subquery\u0027, uselist\u003dTrue,"},{"line_number":47,"context_line":"                            cascade\u003d\u0027delete\u0027)"},{"line_number":48,"context_line":"    )"},{"line_number":49,"context_line":"    router \u003d orm.relationship("}],"source_content_type":"text/x-python","patch_set":30,"id":"467735e2_714925fc","line":46,"range":{"start_line":46,"start_character":28,"end_line":46,"end_character":43},"updated":"2021-11-29 15:22:22.000000000","message":"this will affect all port operations performance which is major part of neutron operations. Is it really needed to load ndp_proxies each time any port is queried? Please consider making it \u0027select\u0027 - as this is new feature and should not affect performance of all project.","commit_id":"527ab2bdf7994d16d84ee2f2f41b03db85e8e302"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"f6de21c9aeaae0882764bf09455579dcdeaad482","unresolved":true,"context_lines":[{"line_number":43,"context_line":"    port \u003d orm.relationship("},{"line_number":44,"context_line":"        models_v2.Port, load_on_pending\u003dTrue,"},{"line_number":45,"context_line":"        backref\u003dorm.backref(\"ndp_proxies\","},{"line_number":46,"context_line":"                            lazy\u003d\u0027subquery\u0027, uselist\u003dTrue,"},{"line_number":47,"context_line":"                            cascade\u003d\u0027delete\u0027)"},{"line_number":48,"context_line":"    )"},{"line_number":49,"context_line":"    router \u003d orm.relationship("}],"source_content_type":"text/x-python","patch_set":30,"id":"d31004ef_3b96b7b3","line":46,"range":{"start_line":46,"start_character":28,"end_line":46,"end_character":43},"in_reply_to":"467735e2_714925fc","updated":"2021-12-05 03:26:23.000000000","message":"The \u0027port\u0027 and \u0027router\u0027 are not used.  I think we can delete them directly.","commit_id":"527ab2bdf7994d16d84ee2f2f41b03db85e8e302"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"82dc6608a6ef989699844d44479c235ceed2db49","unresolved":true,"context_lines":[{"line_number":49,"context_line":"    router \u003d orm.relationship("},{"line_number":50,"context_line":"        l3.Router, load_on_pending\u003dTrue,"},{"line_number":51,"context_line":"        backref\u003dorm.backref(\"ndp_proxies\","},{"line_number":52,"context_line":"                            lazy\u003d\u0027subquery\u0027, uselist\u003dTrue,"},{"line_number":53,"context_line":"                            cascade\u003d\u0027delete\u0027)"},{"line_number":54,"context_line":"    )"},{"line_number":55,"context_line":"    revises_on_change \u003d (\u0027router\u0027, \u0027port\u0027)"}],"source_content_type":"text/x-python","patch_set":30,"id":"7d8ca6ea_1a4b1801","line":52,"range":{"start_line":52,"start_character":34,"end_line":52,"end_character":42},"updated":"2021-11-29 15:22:22.000000000","message":"ditto: \u0027select\u0027","commit_id":"527ab2bdf7994d16d84ee2f2f41b03db85e8e302"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"82dc6608a6ef989699844d44479c235ceed2db49","unresolved":true,"context_lines":[{"line_number":71,"context_line":"    router \u003d orm.relationship("},{"line_number":72,"context_line":"        l3.Router, load_on_pending\u003dTrue,"},{"line_number":73,"context_line":"        backref\u003dorm.backref(\"ndp_proxy_state\","},{"line_number":74,"context_line":"                            lazy\u003d\u0027joined\u0027, uselist\u003dFalse,"},{"line_number":75,"context_line":"                            cascade\u003d\u0027delete\u0027)"},{"line_number":76,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":30,"id":"1d751c29_d880d6fd","line":74,"range":{"start_line":74,"start_character":34,"end_line":74,"end_character":40},"updated":"2021-11-29 15:22:22.000000000","message":"For new feature please use \u0027select\u0027. The feature first need to mature and become widely used before making it \u0027joined\u0027","commit_id":"527ab2bdf7994d16d84ee2f2f41b03db85e8e302"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"c974a35c748f7d12f6843c18777af4df35d964ec","unresolved":true,"context_lines":[{"line_number":71,"context_line":"    router \u003d orm.relationship("},{"line_number":72,"context_line":"        l3.Router, load_on_pending\u003dTrue,"},{"line_number":73,"context_line":"        backref\u003dorm.backref(\"ndp_proxy_state\","},{"line_number":74,"context_line":"                            lazy\u003d\u0027joined\u0027, uselist\u003dFalse,"},{"line_number":75,"context_line":"                            cascade\u003d\u0027delete\u0027)"},{"line_number":76,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":30,"id":"a2da090a_a88915e8","line":74,"range":{"start_line":74,"start_character":34,"end_line":74,"end_character":40},"in_reply_to":"0cca1f20_9fed5567","updated":"2021-12-09 14:38:13.000000000","message":"Right, extenders should have an ability to receive current context and start a separate session if needed. I agree it\u0027s out of scope here","commit_id":"527ab2bdf7994d16d84ee2f2f41b03db85e8e302"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"f6de21c9aeaae0882764bf09455579dcdeaad482","unresolved":true,"context_lines":[{"line_number":71,"context_line":"    router \u003d orm.relationship("},{"line_number":72,"context_line":"        l3.Router, load_on_pending\u003dTrue,"},{"line_number":73,"context_line":"        backref\u003dorm.backref(\"ndp_proxy_state\","},{"line_number":74,"context_line":"                            lazy\u003d\u0027joined\u0027, uselist\u003dFalse,"},{"line_number":75,"context_line":"                            cascade\u003d\u0027delete\u0027)"},{"line_number":76,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":30,"id":"3ee2191e_67e710c3","line":74,"range":{"start_line":74,"start_character":34,"end_line":74,"end_character":40},"in_reply_to":"1d751c29_d880d6fd","updated":"2021-12-05 03:26:23.000000000","message":"The unit test report the following errors while I modify it to \u0027select\u0027. https://paste.opendev.org/show/811420/\n\nI didn\u0027t find the way to solve it. Maybe the \u0027select\u0027 don\u0027t suit here. Perhaps, we need extra patch to adapt it.","commit_id":"527ab2bdf7994d16d84ee2f2f41b03db85e8e302"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"ef9daab6fee9656799d3659d5228105005743239","unresolved":true,"context_lines":[{"line_number":71,"context_line":"    router \u003d orm.relationship("},{"line_number":72,"context_line":"        l3.Router, load_on_pending\u003dTrue,"},{"line_number":73,"context_line":"        backref\u003dorm.backref(\"ndp_proxy_state\","},{"line_number":74,"context_line":"                            lazy\u003d\u0027joined\u0027, uselist\u003dFalse,"},{"line_number":75,"context_line":"                            cascade\u003d\u0027delete\u0027)"},{"line_number":76,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":30,"id":"700a894f_42960f60","line":74,"range":{"start_line":74,"start_character":34,"end_line":74,"end_character":40},"in_reply_to":"37986b8f_5b98d14c","updated":"2021-12-09 10:52:44.000000000","message":"Hi, It isn\u0027t only the unit test issue. Please reference the link [1]. The reason is that the \u0027resource_extend.apply_funcs\u0027 [4] lack db session. Take \u0027get_router\u0027 as an example: In \u0027_get_router\u0027 [2], the router db object was loaded, then \u0027get_router\u0027 [3] load the router\u0027s extension feilds, but the session already closed before \u0027get_router\u0027 execute \u0027_make_router_dict\u0027, so we get the errors[1]. In my opinion, we should add a function like \u0027resource_extend.apply_funcs_with_session\u0027 to adapt \u0027select\u0027, but this need an extra patch. Additional, I don\u0027t found the \u0027select\u0027 in current neutron codes.\n\n[1] https://paste.opendev.org/show/811565/\n[2] https://opendev.org/openstack/neutron/src/branch/master/neutron/db/l3_db.py#L198\n[3] https://opendev.org/openstack/neutron/src/branch/master/neutron/db/l3_db.py#L618\n[4] https://opendev.org/openstack/neutron-lib/src/branch/master/neutron_lib/db/resource_extend.py#L80","commit_id":"527ab2bdf7994d16d84ee2f2f41b03db85e8e302"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"d29e98d27dda94a882d2cf5fc0b800803238324f","unresolved":true,"context_lines":[{"line_number":71,"context_line":"    router \u003d orm.relationship("},{"line_number":72,"context_line":"        l3.Router, load_on_pending\u003dTrue,"},{"line_number":73,"context_line":"        backref\u003dorm.backref(\"ndp_proxy_state\","},{"line_number":74,"context_line":"                            lazy\u003d\u0027joined\u0027, uselist\u003dFalse,"},{"line_number":75,"context_line":"                            cascade\u003d\u0027delete\u0027)"},{"line_number":76,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":30,"id":"37986b8f_5b98d14c","line":74,"range":{"start_line":74,"start_character":34,"end_line":74,"end_character":40},"in_reply_to":"3ee2191e_67e710c3","updated":"2021-12-06 06:57:23.000000000","message":"Well, it\u0027s the problem of this test, probably more mocks are needed. Please use \u0027select\u0027 (it\u0027s default, no need to specify) and fix unit test.","commit_id":"527ab2bdf7994d16d84ee2f2f41b03db85e8e302"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"56561de5ef60b1529b8615e0bc67b7efa6fa7c9d","unresolved":true,"context_lines":[{"line_number":71,"context_line":"    router \u003d orm.relationship("},{"line_number":72,"context_line":"        l3.Router, load_on_pending\u003dTrue,"},{"line_number":73,"context_line":"        backref\u003dorm.backref(\"ndp_proxy_state\","},{"line_number":74,"context_line":"                            lazy\u003d\u0027joined\u0027, uselist\u003dFalse,"},{"line_number":75,"context_line":"                            cascade\u003d\u0027delete\u0027)"},{"line_number":76,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":30,"id":"0cca1f20_9fed5567","line":74,"range":{"start_line":74,"start_character":34,"end_line":74,"end_character":40},"in_reply_to":"700a894f_42960f60","updated":"2021-12-09 13:48:21.000000000","message":"\u0027select\u0027 is default and no need to specify explicitly so you don\u0027t see it in current code. Ok, I see the issue with session, I\u0027ll think how we can handle this","commit_id":"527ab2bdf7994d16d84ee2f2f41b03db85e8e302"}],"neutron/extensions/l3_ext_ndp_proxy.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"82dc6608a6ef989699844d44479c235ceed2db49","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Copyright 2020 Troila"},{"line_number":2,"context_line":"# All rights reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":30,"id":"64769834_760c1db2","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"updated":"2021-11-29 15:22:22.000000000","message":"2021","commit_id":"527ab2bdf7994d16d84ee2f2f41b03db85e8e302"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"f6de21c9aeaae0882764bf09455579dcdeaad482","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2020 Troila"},{"line_number":2,"context_line":"# All rights reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":30,"id":"5ecb008f_1cd6c548","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"in_reply_to":"64769834_760c1db2","updated":"2021-12-05 03:26:23.000000000","message":"Done","commit_id":"527ab2bdf7994d16d84ee2f2f41b03db85e8e302"}],"neutron/extensions/l3_ndp_proxy.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ea7bc4faf8d0dbb11e852c726825e96487cb1273","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from neutron_lib import exceptions as n_exc"},{"line_number":24,"context_line":"from neutron_lib.plugins import directory"},{"line_number":25,"context_line":"from neutron_lib.services import base as service_base"},{"line_number":26,"context_line":"import six"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from neutron.api import extensions"},{"line_number":29,"context_line":"from neutron.api.v2 import base"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f560f44_22d4cf1f","line":26,"updated":"2020-08-05 03:53:47.000000000","message":"pep8: N348: Test code must not import six library","commit_id":"d097ef62871781f0eabe04d3a513de43a5d4fda4"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"82dc6608a6ef989699844d44479c235ceed2db49","unresolved":true,"context_lines":[{"line_number":23,"context_line":"from neutron.api.v2 import resource_helper"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class L3_ndp_proxy(api_extensions.APIExtensionDescriptor):"},{"line_number":27,"context_line":"    \"\"\"L3 NDP Proxy API extension\"\"\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    api_definition \u003d apidef"}],"source_content_type":"text/x-python","patch_set":30,"id":"79df4306_d8350532","line":26,"range":{"start_line":26,"start_character":19,"end_line":26,"end_character":56},"updated":"2021-11-29 15:22:22.000000000","message":"L3AgentExtension","commit_id":"527ab2bdf7994d16d84ee2f2f41b03db85e8e302"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"f6de21c9aeaae0882764bf09455579dcdeaad482","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from neutron.api.v2 import resource_helper"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class L3_ndp_proxy(api_extensions.APIExtensionDescriptor):"},{"line_number":27,"context_line":"    \"\"\"L3 NDP Proxy API extension\"\"\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    api_definition \u003d apidef"}],"source_content_type":"text/x-python","patch_set":30,"id":"afbd5d91_c33be416","line":26,"range":{"start_line":26,"start_character":19,"end_line":26,"end_character":56},"in_reply_to":"79df4306_d8350532","updated":"2021-12-05 03:26:23.000000000","message":"Done","commit_id":"527ab2bdf7994d16d84ee2f2f41b03db85e8e302"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"d29e98d27dda94a882d2cf5fc0b800803238324f","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from neutron.api.v2 import resource_helper"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class L3_ndp_proxy(api_extensions.APIExtensionDescriptor):"},{"line_number":27,"context_line":"    \"\"\"L3 NDP Proxy API extension\"\"\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    api_definition \u003d apidef"}],"source_content_type":"text/x-python","patch_set":30,"id":"bc3ad317_177e2c80","line":26,"range":{"start_line":26,"start_character":19,"end_line":26,"end_character":56},"in_reply_to":"afbd5d91_c33be416","updated":"2021-12-06 06:57:23.000000000","message":"this wasn\u0027t resolved","commit_id":"527ab2bdf7994d16d84ee2f2f41b03db85e8e302"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"ef9daab6fee9656799d3659d5228105005743239","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from neutron.api.v2 import resource_helper"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class L3_ndp_proxy(api_extensions.APIExtensionDescriptor):"},{"line_number":27,"context_line":"    \"\"\"L3 NDP Proxy API extension\"\"\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    api_definition \u003d apidef"}],"source_content_type":"text/x-python","patch_set":30,"id":"da9c0d70_f0d8e436","line":26,"range":{"start_line":26,"start_character":19,"end_line":26,"end_character":56},"in_reply_to":"bc3ad317_177e2c80","updated":"2021-12-09 10:52:44.000000000","message":"Sorry, I don\u0027t understand you mean. This is a api extension not agent extension. Could you provide more informations about why are we use L3AgentExtension here.","commit_id":"527ab2bdf7994d16d84ee2f2f41b03db85e8e302"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"56561de5ef60b1529b8615e0bc67b7efa6fa7c9d","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from neutron.api.v2 import resource_helper"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class L3_ndp_proxy(api_extensions.APIExtensionDescriptor):"},{"line_number":27,"context_line":"    \"\"\"L3 NDP Proxy API extension\"\"\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    api_definition \u003d apidef"}],"source_content_type":"text/x-python","patch_set":30,"id":"c58c3422_47d0b13f","line":26,"range":{"start_line":26,"start_character":19,"end_line":26,"end_character":56},"in_reply_to":"da9c0d70_f0d8e436","updated":"2021-12-09 13:48:21.000000000","message":"Ah, I see, my bad, sorry","commit_id":"527ab2bdf7994d16d84ee2f2f41b03db85e8e302"}],"neutron/objects/ndp_proxy.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"6eea0857f0c817da24aa3a0033aec8df7b2b236a","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2020 Troila"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":35,"id":"66788518_5e169dd6","line":1,"range":{"start_line":1,"start_character":16,"end_line":1,"end_character":20},"updated":"2022-01-10 11:18:21.000000000","message":"2022, please check other files as well","commit_id":"26130295ec4d4b96f79900d6e320f02b57001795"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"0b38a24a21d713bb36d0e5bf09e201f21050f24e","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2020 Troila"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":35,"id":"ec4c17c0_4d814566","line":1,"range":{"start_line":1,"start_character":16,"end_line":1,"end_character":20},"in_reply_to":"66788518_5e169dd6","updated":"2022-01-18 06:21:24.000000000","message":"thk","commit_id":"26130295ec4d4b96f79900d6e320f02b57001795"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"3835806df538fd76b1d4b3c5e39c17f9aefd091e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2020 Troila"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":35,"id":"2d09a16f_f3dd0dd0","line":1,"range":{"start_line":1,"start_character":16,"end_line":1,"end_character":20},"in_reply_to":"ec4c17c0_4d814566","updated":"2022-01-18 07:15:11.000000000","message":"Done","commit_id":"26130295ec4d4b96f79900d6e320f02b57001795"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"4ecfd7531de83fccca01089feb2424e5a7dabfa6","unresolved":true,"context_lines":[{"line_number":21,"context_line":"from neutron.db.models import ndp_proxy as models"},{"line_number":22,"context_line":"from neutron.objects import base"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from oslo_log import log as logging"},{"line_number":25,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"b6cc0eb9_b7ce10f9","line":24,"updated":"2022-01-20 07:54:45.000000000","message":"please move this import to the section in L18-L19","commit_id":"8ebe45e2e2e551aa33b59beb0df81b295ccd0221"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"955c5b2691acebb4f742f8df3ba5843e3ed793e5","unresolved":true,"context_lines":[{"line_number":21,"context_line":"from neutron.db.models import ndp_proxy as models"},{"line_number":22,"context_line":"from neutron.objects import base"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from oslo_log import log as logging"},{"line_number":25,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"d5f14f0b_ec2cabaa","line":24,"in_reply_to":"b6cc0eb9_b7ce10f9","updated":"2022-01-25 06:39:39.000000000","message":"thx","commit_id":"8ebe45e2e2e551aa33b59beb0df81b295ccd0221"}],"neutron/services/l3_router/l3_router_plugin.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"38d26d8f3c8a72c8576cf2176d4fba0abf5dbb7c","unresolved":false,"context_lines":[{"line_number":115,"context_line":"                                    qos_gateway_ip.ALIAS,"},{"line_number":116,"context_line":"                                    l3_port_ip_change_not_allowed.ALIAS,"},{"line_number":117,"context_line":"                                    _admin_state_down_before_update_lib.ALIAS,"},{"line_number":118,"context_line":"                                    \u0027router-extend-ndp-proxy\u0027]"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    __native_pagination_support \u003d True"},{"line_number":121,"context_line":"    __native_sorting_support \u003d True"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_49da6317","line":118,"range":{"start_line":118,"start_character":36,"end_line":118,"end_character":61},"updated":"2020-07-27 07:25:31.000000000","message":"nit: maybe useful to add TODO to change after neutron_lib patch is merged, just to not forget.","commit_id":"4cbf091e6b2a2870e1c7ec96687902b153e42acd"}],"neutron/services/ndp_proxy/exceptions.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"82dc6608a6ef989699844d44479c235ceed2db49","unresolved":true,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from neutron._i18n import _"},{"line_number":17,"context_line":"from neutron_lib import exceptions as n_exc"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class RouterGatewayInUseByNDPProxy(n_exc.Conflict):"}],"source_content_type":"text/x-python","patch_set":30,"id":"a17c2242_b07d1b18","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":43},"updated":"2021-11-29 15:22:22.000000000","message":"3rd party import should go in separate section above","commit_id":"527ab2bdf7994d16d84ee2f2f41b03db85e8e302"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"f6de21c9aeaae0882764bf09455579dcdeaad482","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from neutron._i18n import _"},{"line_number":17,"context_line":"from neutron_lib import exceptions as n_exc"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class RouterGatewayInUseByNDPProxy(n_exc.Conflict):"}],"source_content_type":"text/x-python","patch_set":30,"id":"16fa73c6_d7193058","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":43},"in_reply_to":"a17c2242_b07d1b18","updated":"2021-12-05 03:26:23.000000000","message":"Done","commit_id":"527ab2bdf7994d16d84ee2f2f41b03db85e8e302"}],"neutron/services/ndp_proxy/plugin.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"034ea7f482b27837a51ba18118fcc7cc50097c8a","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from neutron_lib.exceptions import l3 as lib_l3_exc"},{"line_number":26,"context_line":"from neutron_lib.plugins import constants"},{"line_number":27,"context_line":"from neutron_lib.plugins import directory"},{"line_number":28,"context_line":"from oslo_log import log as logging"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from neutron._i18n import _"},{"line_number":31,"context_line":"from neutron.api.rpc.callbacks import events as rpc_events"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f560f44_be436b6c","line":28,"updated":"2020-08-29 05:18:42.000000000","message":"pep8: F401 \u0027oslo_log.log as logging\u0027 imported but unused","commit_id":"f3e352117ca9bacb2d013166b3643e11794218e7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"bd53d91bfb5223da2f3d6fc877d40b8ea321a389","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from neutron_lib.exceptions import l3 as lib_l3_exc"},{"line_number":26,"context_line":"from neutron_lib.plugins import constants"},{"line_number":27,"context_line":"from neutron_lib.plugins import directory"},{"line_number":28,"context_line":"from oslo_log import log as logging"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from neutron._i18n import _"},{"line_number":31,"context_line":"from neutron.api.rpc.callbacks import events as rpc_events"}],"source_content_type":"text/x-python","patch_set":10,"id":"1f621f24_db007e04","line":28,"updated":"2020-11-08 10:37:38.000000000","message":"pep8: F401 \u0027oslo_log.log as logging\u0027 imported but unused","commit_id":"53c0496aa137b2d8b173fdeee4fc479273abd2e8"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"4ecfd7531de83fccca01089feb2424e5a7dabfa6","unresolved":true,"context_lines":[{"line_number":165,"context_line":"            context.elevated(), filters\u003d{\u0027network_id\u0027: network_id})"},{"line_number":166,"context_line":"        has_ipv6_subnet \u003d False"},{"line_number":167,"context_line":"        for subnet in ext_subnets:"},{"line_number":168,"context_line":"            if subnet[\u0027ip_version\u0027] \u003d\u003d lib_consts.IP_VERSION_6:"},{"line_number":169,"context_line":"                has_ipv6_subnet \u003d True"},{"line_number":170,"context_line":"        if has_ipv6_subnet or cfg.CONF.use_lla_address:"},{"line_number":171,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":38,"id":"b2298036_8c24cc41","line":168,"range":{"start_line":168,"start_character":39,"end_line":168,"end_character":62},"updated":"2022-01-20 07:54:45.000000000","message":"nit: You can use Your \"shortcut\" V6 everywhere in that file if You already did it :)","commit_id":"8ebe45e2e2e551aa33b59beb0df81b295ccd0221"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"955c5b2691acebb4f742f8df3ba5843e3ed793e5","unresolved":true,"context_lines":[{"line_number":165,"context_line":"            context.elevated(), filters\u003d{\u0027network_id\u0027: network_id})"},{"line_number":166,"context_line":"        has_ipv6_subnet \u003d False"},{"line_number":167,"context_line":"        for subnet in ext_subnets:"},{"line_number":168,"context_line":"            if subnet[\u0027ip_version\u0027] \u003d\u003d lib_consts.IP_VERSION_6:"},{"line_number":169,"context_line":"                has_ipv6_subnet \u003d True"},{"line_number":170,"context_line":"        if has_ipv6_subnet or cfg.CONF.use_lla_address:"},{"line_number":171,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":38,"id":"cc7b5c2a_4fa20e66","line":168,"range":{"start_line":168,"start_character":39,"end_line":168,"end_character":62},"in_reply_to":"b2298036_8c24cc41","updated":"2022-01-25 06:39:39.000000000","message":"Yep, thanks for your reminder.","commit_id":"8ebe45e2e2e551aa33b59beb0df81b295ccd0221"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"4ecfd7531de83fccca01089feb2424e5a7dabfa6","unresolved":true,"context_lines":[{"line_number":167,"context_line":"        for subnet in ext_subnets:"},{"line_number":168,"context_line":"            if subnet[\u0027ip_version\u0027] \u003d\u003d lib_consts.IP_VERSION_6:"},{"line_number":169,"context_line":"                has_ipv6_subnet \u003d True"},{"line_number":170,"context_line":"        if has_ipv6_subnet or cfg.CONF.use_lla_address:"},{"line_number":171,"context_line":"            return True"},{"line_number":172,"context_line":"        return False"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"0ae611e5_66e4cf13","line":170,"range":{"start_line":170,"start_character":30,"end_line":170,"end_character":54},"updated":"2022-01-20 07:54:45.000000000","message":"You can move this check above L164 - that way if use_lla_address is True, You will save getting subnets from the db","commit_id":"8ebe45e2e2e551aa33b59beb0df81b295ccd0221"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"955c5b2691acebb4f742f8df3ba5843e3ed793e5","unresolved":true,"context_lines":[{"line_number":167,"context_line":"        for subnet in ext_subnets:"},{"line_number":168,"context_line":"            if subnet[\u0027ip_version\u0027] \u003d\u003d lib_consts.IP_VERSION_6:"},{"line_number":169,"context_line":"                has_ipv6_subnet \u003d True"},{"line_number":170,"context_line":"        if has_ipv6_subnet or cfg.CONF.use_lla_address:"},{"line_number":171,"context_line":"            return True"},{"line_number":172,"context_line":"        return False"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"b5cd4856_6a39f0ad","line":170,"range":{"start_line":170,"start_character":30,"end_line":170,"end_character":54},"in_reply_to":"0ae611e5_66e4cf13","updated":"2022-01-25 06:39:39.000000000","message":"ths, good suggestion.","commit_id":"8ebe45e2e2e551aa33b59beb0df81b295ccd0221"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"92db84fbd586759c7fb6b66d881d4841cfc52981","unresolved":true,"context_lines":[{"line_number":167,"context_line":"        for subnet in ext_subnets:"},{"line_number":168,"context_line":"            if subnet[\u0027ip_version\u0027] \u003d\u003d lib_consts.IP_VERSION_6:"},{"line_number":169,"context_line":"                has_ipv6_subnet \u003d True"},{"line_number":170,"context_line":"        if has_ipv6_subnet or cfg.CONF.use_lla_address:"},{"line_number":171,"context_line":"            return True"},{"line_number":172,"context_line":"        return False"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"0db20892_cda0d91c","line":170,"range":{"start_line":170,"start_character":30,"end_line":170,"end_character":54},"in_reply_to":"8eaa9d75_90888d46","updated":"2022-02-03 02:24:42.000000000","message":"Sorry, this is my fault. But I removed this configuration option temporarily. In subsequent patch, I will pay attention to the issue.","commit_id":"8ebe45e2e2e551aa33b59beb0df81b295ccd0221"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"67fa676c529151879e5a739bbe3354671b24c517","unresolved":true,"context_lines":[{"line_number":167,"context_line":"        for subnet in ext_subnets:"},{"line_number":168,"context_line":"            if subnet[\u0027ip_version\u0027] \u003d\u003d lib_consts.IP_VERSION_6:"},{"line_number":169,"context_line":"                has_ipv6_subnet \u003d True"},{"line_number":170,"context_line":"        if has_ipv6_subnet or cfg.CONF.use_lla_address:"},{"line_number":171,"context_line":"            return True"},{"line_number":172,"context_line":"        return False"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"8eaa9d75_90888d46","line":170,"range":{"start_line":170,"start_character":30,"end_line":170,"end_character":54},"in_reply_to":"b5cd4856_6a39f0ad","updated":"2022-02-02 19:35:33.000000000","message":"I think You forgot to change that in last PS :)","commit_id":"8ebe45e2e2e551aa33b59beb0df81b295ccd0221"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"4ecfd7531de83fccca01089feb2424e5a7dabfa6","unresolved":true,"context_lines":[{"line_number":383,"context_line":"        if not np_obj:"},{"line_number":384,"context_line":"            raise exc.NDPProxyNotFound(id\u003did)"},{"line_number":385,"context_line":"        with db_api.CONTEXT_WRITER.using(context):"},{"line_number":386,"context_line":"            np_obj.delete()"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"        LOG.debug(\"Notify l3-agent to delete ndp proxy rules for \""},{"line_number":389,"context_line":"                  \"ndp proxy: %s\", np_obj.to_dict())"}],"source_content_type":"text/x-python","patch_set":38,"id":"96483c64_52be7fb3","line":386,"updated":"2022-01-20 07:54:45.000000000","message":"shouldn\u0027t get_object be in the same transaction?","commit_id":"8ebe45e2e2e551aa33b59beb0df81b295ccd0221"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"955c5b2691acebb4f742f8df3ba5843e3ed793e5","unresolved":true,"context_lines":[{"line_number":383,"context_line":"        if not np_obj:"},{"line_number":384,"context_line":"            raise exc.NDPProxyNotFound(id\u003did)"},{"line_number":385,"context_line":"        with db_api.CONTEXT_WRITER.using(context):"},{"line_number":386,"context_line":"            np_obj.delete()"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"        LOG.debug(\"Notify l3-agent to delete ndp proxy rules for \""},{"line_number":389,"context_line":"                  \"ndp proxy: %s\", np_obj.to_dict())"}],"source_content_type":"text/x-python","patch_set":38,"id":"3be11ed0_f408cbe4","line":386,"in_reply_to":"96483c64_52be7fb3","updated":"2022-01-25 06:39:39.000000000","message":"Yep, they should in a same transaction. I will fix it.","commit_id":"8ebe45e2e2e551aa33b59beb0df81b295ccd0221"}],"neutron/tests/unit/conf/policies/test_ndp_proxy.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"6eea0857f0c817da24aa3a0033aec8df7b2b236a","unresolved":true,"context_lines":[{"line_number":19,"context_line":"from neutron.tests.unit.conf.policies import base"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class NdpProxyAPITestCase(base.PolicyBaseTestCase):"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def setUp(self):"},{"line_number":25,"context_line":"        super(NdpProxyAPITestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":35,"id":"7668e84a_e739595a","line":22,"range":{"start_line":22,"start_character":14,"end_line":22,"end_character":17},"updated":"2022-01-10 11:18:21.000000000","message":"Policy?","commit_id":"26130295ec4d4b96f79900d6e320f02b57001795"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"0b38a24a21d713bb36d0e5bf09e201f21050f24e","unresolved":true,"context_lines":[{"line_number":19,"context_line":"from neutron.tests.unit.conf.policies import base"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class NdpProxyAPITestCase(base.PolicyBaseTestCase):"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def setUp(self):"},{"line_number":25,"context_line":"        super(NdpProxyAPITestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":35,"id":"ea20c48b_39c0e198","line":22,"range":{"start_line":22,"start_character":14,"end_line":22,"end_character":17},"in_reply_to":"7668e84a_e739595a","updated":"2022-01-18 06:21:24.000000000","message":"I will rewrite it according to the new policy guidelines","commit_id":"26130295ec4d4b96f79900d6e320f02b57001795"}],"neutron/tests/unit/extensions/test_l3_ndp_proxy.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"6eea0857f0c817da24aa3a0033aec8df7b2b236a","unresolved":true,"context_lines":[{"line_number":78,"context_line":"              ext_mgr\u003dext_mgr, service_plugins\u003dsvc_plugins, plugin\u003dplugin)"},{"line_number":79,"context_line":"        self.ext_api \u003d test_extensions.setup_extensions_middleware(ext_mgr)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        self.ext_net \u003d self._make_network(self.fmt, \u0027ext-net\u0027, True)"},{"line_number":82,"context_line":"        self.ext_net_id \u003d self.ext_net[\u0027network\u0027][\u0027id\u0027]"},{"line_number":83,"context_line":"        self._set_net_external(self.ext_net_id)"},{"line_number":84,"context_line":"        self._ext_subnet_v4 \u003d self._make_subnet("},{"line_number":85,"context_line":"            self.fmt, self.ext_net, gateway\u003d\"10.0.0.1\","},{"line_number":86,"context_line":"            cidr\u003d\"10.0.0.0/24\")"},{"line_number":87,"context_line":"        self._ext_subnet_v4_id \u003d self._ext_subnet_v4[\u0027subnet\u0027][\u0027id\u0027]"},{"line_number":88,"context_line":"        self._ext_subnet_v6 \u003d self._make_subnet("},{"line_number":89,"context_line":"            self.fmt, self.ext_net, gateway\u003d\"2001::1:1\","},{"line_number":90,"context_line":"            cidr\u003d\"2001::1:0/112\","},{"line_number":91,"context_line":"            ip_version\u003dconstants.IP_VERSION_6,"},{"line_number":92,"context_line":"            ipv6_ra_mode\u003dconstants.DHCPV6_STATEFUL,"},{"line_number":93,"context_line":"            ipv6_address_mode\u003dconstants.DHCPV6_STATEFUL)"},{"line_number":94,"context_line":"        self._ext_subnet_v6_id \u003d self._ext_subnet_v6[\u0027subnet\u0027][\u0027id\u0027]"},{"line_number":95,"context_line":"        self.router1 \u003d self._make_router(self.fmt, self.tenant_id)"},{"line_number":96,"context_line":"        self.router1_id \u003d self.router1[\u0027router\u0027][\u0027id\u0027]"},{"line_number":97,"context_line":"        self.private_net \u003d self._make_network(self.fmt, \u0027private-net\u0027, True)"},{"line_number":98,"context_line":"        self.private_subnet \u003d self._make_subnet("},{"line_number":99,"context_line":"            self.fmt, self.private_net, gateway\u003d\"2001::2:1\","},{"line_number":100,"context_line":"            cidr\u003d\"2001::2:0/112\","},{"line_number":101,"context_line":"            ip_version\u003dconstants.IP_VERSION_6,"},{"line_number":102,"context_line":"            ipv6_ra_mode\u003dconstants.DHCPV6_STATEFUL,"},{"line_number":103,"context_line":"            ipv6_address_mode\u003dconstants.DHCPV6_STATEFUL)"},{"line_number":104,"context_line":"        self._update_router("},{"line_number":105,"context_line":"            self.router1_id,"},{"line_number":106,"context_line":"            {\u0027external_gateway_info\u0027: {\u0027network_id\u0027: self.ext_net_id},"},{"line_number":107,"context_line":"             \u0027enable_ndp_proxy\u0027: True})"},{"line_number":108,"context_line":"        self._router_interface_action("},{"line_number":109,"context_line":"            \u0027add\u0027, self.router1_id,"},{"line_number":110,"context_line":"            self.private_subnet[\u0027subnet\u0027][\u0027id\u0027], None)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def _create_ndp_proxy(self, router_id, port_id, ip_address\u003dNone,"},{"line_number":113,"context_line":"                          description\u003dNone, fmt\u003dNone, tenant_id\u003dNone,"},{"line_number":114,"context_line":"                          expected_code\u003dexc.HTTPCreated.code,"}],"source_content_type":"text/x-python","patch_set":35,"id":"c22596b8_e6be59e2","line":111,"range":{"start_line":81,"start_character":8,"end_line":111,"end_character":0},"updated":"2022-01-10 11:18:21.000000000","message":"Is _each_ resource here required for _each_ testcase below?","commit_id":"26130295ec4d4b96f79900d6e320f02b57001795"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"0b38a24a21d713bb36d0e5bf09e201f21050f24e","unresolved":true,"context_lines":[{"line_number":78,"context_line":"              ext_mgr\u003dext_mgr, service_plugins\u003dsvc_plugins, plugin\u003dplugin)"},{"line_number":79,"context_line":"        self.ext_api \u003d test_extensions.setup_extensions_middleware(ext_mgr)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        self.ext_net \u003d self._make_network(self.fmt, \u0027ext-net\u0027, True)"},{"line_number":82,"context_line":"        self.ext_net_id \u003d self.ext_net[\u0027network\u0027][\u0027id\u0027]"},{"line_number":83,"context_line":"        self._set_net_external(self.ext_net_id)"},{"line_number":84,"context_line":"        self._ext_subnet_v4 \u003d self._make_subnet("},{"line_number":85,"context_line":"            self.fmt, self.ext_net, gateway\u003d\"10.0.0.1\","},{"line_number":86,"context_line":"            cidr\u003d\"10.0.0.0/24\")"},{"line_number":87,"context_line":"        self._ext_subnet_v4_id \u003d self._ext_subnet_v4[\u0027subnet\u0027][\u0027id\u0027]"},{"line_number":88,"context_line":"        self._ext_subnet_v6 \u003d self._make_subnet("},{"line_number":89,"context_line":"            self.fmt, self.ext_net, gateway\u003d\"2001::1:1\","},{"line_number":90,"context_line":"            cidr\u003d\"2001::1:0/112\","},{"line_number":91,"context_line":"            ip_version\u003dconstants.IP_VERSION_6,"},{"line_number":92,"context_line":"            ipv6_ra_mode\u003dconstants.DHCPV6_STATEFUL,"},{"line_number":93,"context_line":"            ipv6_address_mode\u003dconstants.DHCPV6_STATEFUL)"},{"line_number":94,"context_line":"        self._ext_subnet_v6_id \u003d self._ext_subnet_v6[\u0027subnet\u0027][\u0027id\u0027]"},{"line_number":95,"context_line":"        self.router1 \u003d self._make_router(self.fmt, self.tenant_id)"},{"line_number":96,"context_line":"        self.router1_id \u003d self.router1[\u0027router\u0027][\u0027id\u0027]"},{"line_number":97,"context_line":"        self.private_net \u003d self._make_network(self.fmt, \u0027private-net\u0027, True)"},{"line_number":98,"context_line":"        self.private_subnet \u003d self._make_subnet("},{"line_number":99,"context_line":"            self.fmt, self.private_net, gateway\u003d\"2001::2:1\","},{"line_number":100,"context_line":"            cidr\u003d\"2001::2:0/112\","},{"line_number":101,"context_line":"            ip_version\u003dconstants.IP_VERSION_6,"},{"line_number":102,"context_line":"            ipv6_ra_mode\u003dconstants.DHCPV6_STATEFUL,"},{"line_number":103,"context_line":"            ipv6_address_mode\u003dconstants.DHCPV6_STATEFUL)"},{"line_number":104,"context_line":"        self._update_router("},{"line_number":105,"context_line":"            self.router1_id,"},{"line_number":106,"context_line":"            {\u0027external_gateway_info\u0027: {\u0027network_id\u0027: self.ext_net_id},"},{"line_number":107,"context_line":"             \u0027enable_ndp_proxy\u0027: True})"},{"line_number":108,"context_line":"        self._router_interface_action("},{"line_number":109,"context_line":"            \u0027add\u0027, self.router1_id,"},{"line_number":110,"context_line":"            self.private_subnet[\u0027subnet\u0027][\u0027id\u0027], None)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def _create_ndp_proxy(self, router_id, port_id, ip_address\u003dNone,"},{"line_number":113,"context_line":"                          description\u003dNone, fmt\u003dNone, tenant_id\u003dNone,"},{"line_number":114,"context_line":"                          expected_code\u003dexc.HTTPCreated.code,"}],"source_content_type":"text/x-python","patch_set":35,"id":"6d054bbd_a0a10537","line":111,"range":{"start_line":81,"start_character":8,"end_line":111,"end_character":0},"in_reply_to":"c22596b8_e6be59e2","updated":"2022-01-18 06:21:24.000000000","message":"Not all data is used by each test case, but every case used a part of them.","commit_id":"26130295ec4d4b96f79900d6e320f02b57001795"}],"setup.cfg":[{"author":{"_account_id":32667,"name":"Mamatisa Nurmatov","email":"nurmatov.mamatisa@huawei.com","username":"isabek"},"change_message_id":"2028c7c8654d5a17cca3a0d4bc3d1a0fd588e0cd","unresolved":true,"context_lines":[{"line_number":221,"context_line":"    L3HARouterVRIdAllocation \u003d neutron.objects.l3_hamode:L3HARouterVRIdAllocation"},{"line_number":222,"context_line":"    MeteringLabel \u003d neutron.objects.metering:MeteringLabel"},{"line_number":223,"context_line":"    MeteringLabelRule \u003d neutron.objects.metering:MeteringLabelRule"},{"line_number":224,"context_line":"    NDPProxy \u003d neutron.objects.ndp_proxy:NDPProxy"},{"line_number":225,"context_line":"    Network \u003d neutron.objects.network:Network"},{"line_number":226,"context_line":"    NetworkDNSDomain \u003d neutron.objects.network:NetworkDNSDomain"},{"line_number":227,"context_line":"    NetworkDhcpAgentBinding \u003d neutron.objects.network:NetworkDhcpAgentBinding"}],"source_content_type":"text/x-ttcn-cfg","patch_set":40,"id":"2408edf3_f027bafd","line":224,"updated":"2022-02-03 09:15:26.000000000","message":"Just wondering: why is this needed?","commit_id":"a0a25cb15c4f04baeed7319b7cdaea328d043388"}]}
