)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"843b53d84c1cc3aa8b1a9ab57113b52d869ade2e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"0565e07b_28d13e0f","updated":"2023-04-26 04:09:54.000000000","message":"Not sure why the topic is not work: https://review.opendev.org/q/topic:distributed_metadata_data_path","commit_id":"eae7a33c1234ec472e93202cf28fad728d61023d"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"1a0955d4ab21be8d2d96c307e434cef9a84fd35e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"cbe80e7e_79dab2ae","updated":"2023-04-27 00:15:26.000000000","message":"recheck","commit_id":"6daaa4c6e8b28805e3606b6cc398a3149f21fb4e"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"28c7ce3d10ded5e1370095ef046a3cd1b2b52e17","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"5149a34e_ce15f5a3","updated":"2023-05-05 09:25:26.000000000","message":"I have not fully reviewed this yet, figured I\u0027d wait until the next PS as there are a number of comments.","commit_id":"1ad817ab21aafa3d4cc8c5a5f136edccd21d2fb9"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"19a5d79b478abfde5cd36c03de085202227bc2d5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"ce06cb50_f4dc42cc","updated":"2023-05-08 08:29:57.000000000","message":"recheck","commit_id":"d97073b8c6859fb1d9afb2cb099e5e7474ccf86f"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"f26078112e0760df71960460deca1d05758996c0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"4e468ec6_718977ba","updated":"2023-05-23 07:40:53.000000000","message":"recheck","commit_id":"edf594a5e54c8c8ed0db3327595a611920d3cb44"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"5a8b94cc9fc824df3714d5e39f533488bac51c72","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"8c90f649_4865b2aa","updated":"2023-09-07 12:53:10.000000000","message":"You should rebase to have green run, the functional failure was fixed by ralonsoh","commit_id":"113cc810bdee0a1b3709112f129eda671ecf0407"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"a115bc8e704baafcfee101849701836810d31ecd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"58cd4598_47b899fd","updated":"2023-09-11 07:15:14.000000000","message":"recheck","commit_id":"c4a968505c86d20658acf283855d65a88edd3dcb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"0f52a9b25d1bf90ac084d008b0fea5ea6ad66409","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"8e44e2fd_0621bb51","updated":"2023-09-14 10:00:20.000000000","message":"recheck","commit_id":"c4a968505c86d20658acf283855d65a88edd3dcb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"46114930a6f59594ef04f0d1f692606d948ab227","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"d7b56524_bede30a2","updated":"2024-02-01 04:02:33.000000000","message":"Long time no progress. Since this is configurable, no harm to main functionalities. IMO, maybe we can move forward now. So, maybe we can end this cycle?","commit_id":"6e38e84985b9331fb9ebd2ac30aa13006b41ab24"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c5818d80a195ee2c606d789eddba4997d0a3ebbe","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"9fe3fa55_e5594b1e","updated":"2024-03-28 22:11:22.000000000","message":"Sorry I\u0027m so slow between reviews.","commit_id":"4d31e6afecc69503b64d24d767dcac03bd5ac180"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"ee070777409a1efd9ce94468f76e471211de32ae","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"7adcad0a_fb800b64","updated":"2024-08-14 11:03:57.000000000","message":"I started this patch series in devstack, but without success (I had flows on br-meta, but I can\u0027t reach 169.254.169.254 from the test vm)\nml2_conf.ini:\n[agent]\nextensions \u003d metadata_path\n[METADATA]\nmetadata_proxy_shared_secret \u003d secret\nnova_metadata_host \u003d \u003clocal_ip with nova behind it\u003e\nnova_metadata_port \u003d 8775\n\nCould you please provide some basic documentation, perhaps with devstack plugin patch or instructions how to test this feature?","commit_id":"2438334cf4718a7b9e4cc534c6d8ebf056de25a0"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"68427bb7ffce32f3349f4a333dd62afeecafe195","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"da8d451f_84b6105f","updated":"2024-09-23 04:06:39.000000000","message":"There is no \"openstack\" in the result of \"curl http://169.254.169.254:808\". You should call next path with like this:\n\"curl http://169.254.169.254:808/1.0\"\n\"curl http://169.254.169.254:808/2007-01-19\"\n...","commit_id":"2438334cf4718a7b9e4cc534c6d8ebf056de25a0"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"6c4e8592a9388eb929d6bbeefab1a8587c4e7bc5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"3247f241_b6614a80","updated":"2024-06-21 09:04:47.000000000","message":"recheck","commit_id":"2438334cf4718a7b9e4cc534c6d8ebf056de25a0"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"778baa61e52699ecb80c82a9f57743192aa4f038","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"a6e47ecc_5b7964df","updated":"2024-06-24 06:26:44.000000000","message":"recheck","commit_id":"2438334cf4718a7b9e4cc534c6d8ebf056de25a0"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"21db7512b2ee1529937324aaa7193b385928235d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"71008c2f_abebfd9b","updated":"2024-10-08 02:08:29.000000000","message":"test","commit_id":"2438334cf4718a7b9e4cc534c6d8ebf056de25a0"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"9198010aa64a365f1264395706ec4a5f7351d851","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"bd381397_1b9c2fed","updated":"2024-09-06 13:52:56.000000000","message":"thanks Liu for your efforts by adding these features to OVS agent","commit_id":"2438334cf4718a7b9e4cc534c6d8ebf056de25a0"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"1c50c34f5b9420d4c4497f4faa77f2fe424b28bd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"cfe2a80f_10b1f5bb","in_reply_to":"101e7239_30a2077a","updated":"2024-08-22 11:53:47.000000000","message":"Please check the paste which I used:\nhttps://paste.openstack.org/show/bFZEtSGgywZjRhDl7gZS/\n\nI tried ovs-tcpdump on br-meta but no packets were captured","commit_id":"2438334cf4718a7b9e4cc534c6d8ebf056de25a0"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"b459f5fc428eadc601737e6cf15789687b6e1f4a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"b00fd092_51e4bd48","in_reply_to":"20a7b4f5_0c1ebccb","updated":"2024-09-09 08:43:14.000000000","message":"The OVS flows pipeline can be found here: \nhttps://review.opendev.org/c/openstack/neutron-specs/+/802854/9/specs/yoga/distributed-metadata-data-path.rst","commit_id":"2438334cf4718a7b9e4cc534c6d8ebf056de25a0"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"81fe44c8be5620efee5f5a7f750fd6a4f63ae34d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"2b20a2f0_60f6cae9","in_reply_to":"266033aa_d15a6938","updated":"2024-10-08 02:09:32.000000000","message":"There is no \\\"openstack\\\" in the result of \\\"curl http://169.254.169.254:808\\\". You should call next path with like this:\n\\\"curl http://169.254.169.254:808/1.0\\\"\n\\\"curl http://169.254.169.254:808/2007-01-19\\\"","commit_id":"2438334cf4718a7b9e4cc534c6d8ebf056de25a0"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"1f51f4b9ed6344a8909a39d34a7647ca8dd33eb8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"e437aa04_2033eddf","in_reply_to":"2b20a2f0_60f6cae9","updated":"2024-10-08 14:17:57.000000000","message":"I used the links from https://docs.openstack.org/nova/latest/user/metadata.html as most users will do first I suppose.\nWhat is the most important thing is to come over the thing with haproxy using port80, the same what is used by apache in my devstack, so that should be configurable or similar I suppose","commit_id":"2438334cf4718a7b9e4cc534c6d8ebf056de25a0"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"051e960b7491c82ea18481ef71aa21b2fa21f072","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"f384a0dd_f278a195","in_reply_to":"322bea31_6167aeef","updated":"2024-08-26 09:31:48.000000000","message":"Or directly add an ARP entry for 169.254.169.254 by \"ip neigh\" to aviod the ARP.","commit_id":"2438334cf4718a7b9e4cc534c6d8ebf056de25a0"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"2b767a1f36229fdce59a723218c6440f5425be87","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"266033aa_d15a6938","in_reply_to":"4f281ab2_d9eb1b78","updated":"2024-09-27 10:23:04.000000000","message":":( I don\u0027t know what happened to gerrit, perhaps you can send an email, or we can open an etherpad which we can both edit. What do you think?","commit_id":"2438334cf4718a7b9e4cc534c6d8ebf056de25a0"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"09f5863ff09e161b7f7e0be9366fcdf120d6dda7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"e8a21aa6_fb93fcc5","in_reply_to":"660c6fe6_12cf503c","updated":"2024-09-20 14:37:17.000000000","message":"Hi, To bypass the apache issue in devstack I modified the haproxy to use another port (here: https://opendev.org/openstack/neutron/src/branch/master/neutron/agent/l2/extensions/metadata/host_metadata_proxy.py#L47 and here: https://review.opendev.org/c/openstack/neutron/+/888097/10/neutron/agent/l2/extensions/metadata/metadata_flows_process.py @l98) and I was able to reach the metadata serve (nova) without any additional arp or neighbor setting :-)\n\nThe bad thing is that I can\u0027t reach the openstack specific versions, see my results in the following paste:\nhttps://paste.openstack.org/show/bSv4lOLxxoPBJKLCYEyZ/","commit_id":"2438334cf4718a7b9e4cc534c6d8ebf056de25a0"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"38057b893aa00e7e47bacadf2f2b41bb068017d4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"101e7239_30a2077a","in_reply_to":"7adcad0a_fb800b64","updated":"2024-08-16 06:04:22.000000000","message":"Hmm, your config options are correct. So looks more likely related to baiscal networking settings, you can try:\n1. add a your test VM\u0027s subnet to a router, because traffic to 169.254.169.254 may need the default route. So you must have a valid gateway.\n2. Or, you can add a direct link route for 169.254.169.254, and this agent extension will proxy the ARP for it.\n\nAnyway check the `ip route` first, and then `ip neigh`. And try to tcpdump on `tap-meta` as well.","commit_id":"2438334cf4718a7b9e4cc534c6d8ebf056de25a0"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"fc83e43a4557deae5712b6dd99787c53bb05f823","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"4f281ab2_d9eb1b78","in_reply_to":"864ea4be_75b07556","updated":"2024-09-23 04:07:05.000000000","message":"gerrit bug...","commit_id":"2438334cf4718a7b9e4cc534c6d8ebf056de25a0"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"56da690b62d32d814746a4d496939e99337b9541","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"fffbb424_7f98c987","in_reply_to":"aaace889_61880653","updated":"2024-09-02 00:50:55.000000000","message":"Thank you for testing this.\n\n1. Yes, add arp entry inside the VM.\n2. No, they are not related, you can mix all these: dhcp-agent, distributed-dhcp and metadata-datapath.","commit_id":"2438334cf4718a7b9e4cc534c6d8ebf056de25a0"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"c99a011f6cfd3daf03e2a1802cf6db658a021bc6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"c83f18a9_0415516b","in_reply_to":"b00fd092_51e4bd48","updated":"2024-09-09 08:50:58.000000000","message":"Regards to the devstack install, please try to start a multi-node installation with these configurations:\nhttps://review.opendev.org/c/openstack/neutron/+/799159\n\nAnd change the [AGENT] extensions\u003d... \nhttps://github.com/openstack/neutron/blob/master/devstack/ml2-ovs-compute-local.conf.sample#L56\n\nand [METEDATA] sections for compute node only.","commit_id":"2438334cf4718a7b9e4cc534c6d8ebf056de25a0"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"68427bb7ffce32f3349f4a333dd62afeecafe195","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"864ea4be_75b07556","in_reply_to":"b7504745_f27c9c0c","updated":"2024-09-23 04:06:39.000000000","message":"There is no \"openstack\" in the result of \"curl http://169.254.169.254:808\". You should call next path with like this:\n\"curl http://169.254.169.254:808/1.0\"\n\"curl http://169.254.169.254:808/2007-01-19\"\n...","commit_id":"2438334cf4718a7b9e4cc534c6d8ebf056de25a0"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"f94b839e8802a7f76bfb18b6418f8e9968a6e005","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"e0b83518_cb79e20f","in_reply_to":"c83f18a9_0415516b","updated":"2024-09-09 09:23:26.000000000","message":"https://review.opendev.org/c/openstack/neutron/+/928586\nAdding the new devstack scripts, but I have not tested it yet. You may change it as needed.","commit_id":"2438334cf4718a7b9e4cc534c6d8ebf056de25a0"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"1ac124c33844788ce2c44a32c5577e6adddf5f84","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"20a7b4f5_0c1ebccb","in_reply_to":"cb3194e6_c0768098","updated":"2024-09-09 08:37:18.000000000","message":"Hmmm, did you added the real flow install patch ?\nhttps://review.opendev.org/c/openstack/neutron/+/888097/9\n\nPlease try to:\n1. ovs-appctl ofproto/trace br-int ... to see the real ovs flow pipeline, or could you dump all the br-int and br-meta flows in your environemnt.\n2. tcpdump on the vm tap port and tap-meta port to see the real packets\n3. the host haproxy is really started? sometimes the all-in-one installation, the 80 port may be used by other processes, we have encountered this in zuul fullstack test case.","commit_id":"2438334cf4718a7b9e4cc534c6d8ebf056de25a0"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"a1f703d4aae9d9e7e784cddfe8b6dbcf40f58bca","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"322bea31_6167aeef","in_reply_to":"cfe2a80f_10b1f5bb","updated":"2024-08-26 09:29:43.000000000","message":"Try to trace or dump the flows for arpresponder installed by this:\nhttps://review.opendev.org/c/openstack/neutron/+/888097/9/neutron/agent/l2/extensions/metadata/metadata_flows_process.py#147\n\nAnd tcpdump inside the VM.\n\nAnd ensure that the VM NIC or port is really up, active or binding succeed.","commit_id":"2438334cf4718a7b9e4cc534c6d8ebf056de25a0"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"fea3fdb4522fa7c204c6881c0fb53b55b6f87b6c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"660c6fe6_12cf503c","in_reply_to":"db4f025b_40cfcf03","updated":"2024-09-13 11:01:24.000000000","message":"I tried again.\nAs I see your question was a hit with the host haproxy.\nIn the ovs-agent logs I see traceback:\nStarting frontend public: cannot bind socket (Address already in use) [0.0.0.0:80]\n\nApache is using port 80:\n$ sudo netstat -tulpn |grep -i apach\ntcp6       0      0 :::443                  :::*                    LISTEN      347069/apache2      \ntcp6       0      0 :::80                   :::*                    LISTEN      347069/apache2      \n\nI try to get over it.","commit_id":"2438334cf4718a7b9e4cc534c6d8ebf056de25a0"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"326da700d236471f1bf2f53db49a459253ac1b25","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"db4f025b_40cfcf03","in_reply_to":"e0b83518_cb79e20f","updated":"2024-09-12 08:05:55.000000000","message":"Test again with these series patch sets, everything works fine to me:\nhttps://paste.openstack.org/show/bCAAvALfVNIW9xGM58mz/\n\nMy test env is devstack master and centos stream 9.\n\nBut according to my experiences of devstack progress, devstack seems not friendly, many errors encountered. You may need to change some settings correspondingly","commit_id":"2438334cf4718a7b9e4cc534c6d8ebf056de25a0"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"c6ef4d5146502a6d299c6a95bc9916bc449e7dd1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"b7504745_f27c9c0c","in_reply_to":"e8a21aa6_fb93fcc5","updated":"2024-09-23 04:06:18.000000000","message":"There is no \"openstack\" in the result of \"curl http://169.254.169.254:808\". You should call next path with like this:\n\"curl http://169.254.169.254:808/1.0\"\n\"curl http://169.254.169.254:808/2007-01-19\"\n...","commit_id":"2438334cf4718a7b9e4cc534c6d8ebf056de25a0"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"122964e01a390859bc4a45234a54ac7d6cb0d55f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"aaace889_61880653","in_reply_to":"f384a0dd_f278a195","updated":"2024-08-30 13:11:44.000000000","message":"Early next week I try to allocate time again for this feature Liu.\nBy adding arp entry you mean inside the VM?\nBy the way, just occured to me is this feature works only with the distributed DHCP feature (https://review.opendev.org/q/topic:%22bp/distributed-dhcp-for-ml2-ovs%22) ?","commit_id":"2438334cf4718a7b9e4cc534c6d8ebf056de25a0"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"9198010aa64a365f1264395706ec4a5f7351d851","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"cb3194e6_c0768098","in_reply_to":"fffbb424_7f98c987","updated":"2024-09-06 13:52:56.000000000","message":"Ack, I tried it with DHCP agent.\nI added arp entry:\n$ ip neig\n169.254.169.254 dev eth0 lladdr fa:16:3e:4c:7f:2f used 0/0/0 probes 6 PERMANENT\n\nbut no success.\nI suggest to add a doc patch on top of the series, perhaps together with a devstack plugin  (i.e.: https://review.opendev.org/c/openstack/neutron/+/803469 ) for this feature with step by step cfg, what to check, what you can wait points.","commit_id":"2438334cf4718a7b9e4cc534c6d8ebf056de25a0"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"a5b5de7203b5cb06e93557b3088d343053e60cba","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"5bceb96f_9a097714","updated":"2024-10-14 03:07:33.000000000","message":"recheck","commit_id":"dcdfbf010c812ceb28630b0354bf22ab6f05fcf8"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"a800999cd0ce5dcb80529f15c025d404354bddb8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"66dbf4db_a0bdb2f7","updated":"2024-10-12 00:57:09.000000000","message":"recheck","commit_id":"dcdfbf010c812ceb28630b0354bf22ab6f05fcf8"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"607d3de30c57c100f344af4bb07817d4493ddfad","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"3cc95a23_c25cb2b3","updated":"2024-11-06 22:24:22.000000000","message":"Just some nits, but it seems to address to issue Lajos found with port 80","commit_id":"4479c058d213dc3febf8d47120961a9856f485c6"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"1a916a17ffe8de3cbb95eac5ea8971038b9ac93c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"b6704633_9b338894","updated":"2024-11-11 11:09:17.000000000","message":"I tested the whole chain with adding the host_proxy_listen_port \u003d xyz in ml2_conf.ini, and it works as expected, thanks Liu.\nI review in detail the series I hope today","commit_id":"3bcf8395166b20e28fea92a126af25dc6901bfd8"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"1d5ab8be5bffa379909740db2792f07f62ffd577","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"2ece6e4c_bf8234ec","updated":"2024-11-12 02:13:23.000000000","message":"recheck","commit_id":"3bcf8395166b20e28fea92a126af25dc6901bfd8"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"2f157ea14fdf92b32f97c066913f60b523f05701","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"2f4a1e0c_c232dc4e","updated":"2024-11-11 03:57:07.000000000","message":"recheck","commit_id":"3bcf8395166b20e28fea92a126af25dc6901bfd8"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"9f71efb152c321afd570820bde4b2457a744d2b9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"51d7adb7_efc3df10","updated":"2024-11-11 00:57:44.000000000","message":"recheck","commit_id":"3bcf8395166b20e28fea92a126af25dc6901bfd8"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"1d41e7841807302dd4257d66ccec409ac2f4b9c6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"552e8504_28a28dee","updated":"2024-11-07 06:52:35.000000000","message":"recheck","commit_id":"3bcf8395166b20e28fea92a126af25dc6901bfd8"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"08fce5ae37c2e4b47a0a59fea161e169f1b07dba","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"a0d1f247_736e535d","updated":"2024-11-08 01:06:30.000000000","message":"recheck","commit_id":"3bcf8395166b20e28fea92a126af25dc6901bfd8"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"68c2b9595b245171dbe990f5434f158a70f859b1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"b7c82274_d63769be","in_reply_to":"b6704633_9b338894","updated":"2024-11-12 02:14:06.000000000","message":"Ack, thank you for testing this.","commit_id":"3bcf8395166b20e28fea92a126af25dc6901bfd8"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"f47f5a197dd11cc5bac55e200ad37dc5b8c80327","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"1855e858_a9df0b7f","updated":"2024-12-11 03:35:38.000000000","message":"recheck","commit_id":"95e7874d4c03fd11013009c3a0d4b3d6460583a1"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"3699a161ca4715bb7e3ddd15b13e75146279c66f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"384ac5cb_3353d56d","updated":"2024-12-12 03:46:40.000000000","message":"recheck","commit_id":"95e7874d4c03fd11013009c3a0d4b3d6460583a1"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"d2ce1d18d2279aff67afa280866593c44c82a2ea","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"82b8ebe4_690852ef","updated":"2024-12-11 00:53:41.000000000","message":"recheck","commit_id":"95e7874d4c03fd11013009c3a0d4b3d6460583a1"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"6d89802c3f8fa6b80cc4911c4ae84b2a2c818e45","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"ad99637f_061a1b57","updated":"2024-12-10 09:13:47.000000000","message":"recheck","commit_id":"95e7874d4c03fd11013009c3a0d4b3d6460583a1"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"24dcce8bf57ba90e51ece6b604a790a984e4f764","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"d2e0917b_c2e5a2bc","updated":"2024-12-10 09:14:04.000000000","message":"recheck","commit_id":"95e7874d4c03fd11013009c3a0d4b3d6460583a1"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"dc97c2d0e9bd957a2744ca0e383cd781f68f5778","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"ba2594e7_56e9a215","updated":"2024-12-14 23:29:16.000000000","message":"recheck neutron functional","commit_id":"95e7874d4c03fd11013009c3a0d4b3d6460583a1"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"aa61480bea4b7f962d85c3afae755bfba4eeda1b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"28992edd_3d5ba431","updated":"2024-12-17 12:49:22.000000000","message":"recheck","commit_id":"4b6f6c94a4a731bf2bfc2232ecac17d15b252f71"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"1a23c1c1cc8cc8d85ce9dbe78a2b2673b8d87f95","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"c615db32_72594baa","updated":"2024-12-18 03:27:55.000000000","message":"recheck","commit_id":"4b6f6c94a4a731bf2bfc2232ecac17d15b252f71"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"203d2d4007ba82d44544fa5b5fdf943584c763f7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":22,"id":"9498b83e_dd62acb3","updated":"2025-01-02 14:08:51.000000000","message":"I have a nit in the re-no otherwise looks ok","commit_id":"a1e163d301ce45aa0cba4cc3d0e1c63deea5c3dd"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"12ab5cf87c994d249e8e2db7f744e5d601c51bbf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":22,"id":"06a0c859_f7f1aa08","updated":"2024-12-20 13:28:52.000000000","message":"recheck","commit_id":"a1e163d301ce45aa0cba4cc3d0e1c63deea5c3dd"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"4f0fe0452c6cd34892a92b75131ad90642fe5755","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":22,"id":"5b0d98b5_13b0178e","updated":"2024-12-23 03:38:24.000000000","message":"recheck","commit_id":"a1e163d301ce45aa0cba4cc3d0e1c63deea5c3dd"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"b591ba5557c5489d755b2910a81fb72a916e0e64","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":22,"id":"628d6796_800cc17d","updated":"2024-12-20 08:54:35.000000000","message":"recheck","commit_id":"a1e163d301ce45aa0cba4cc3d0e1c63deea5c3dd"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"2353501696eb4997e7b24b3c2f29b0cefb81a81c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":22,"id":"2091c719_63aa6660","in_reply_to":"9498b83e_dd62acb3","updated":"2025-01-02 14:09:55.000000000","message":"if you need to push a new patchset, the reno can be updated, but anyway in a doc it can be later cleaned.","commit_id":"a1e163d301ce45aa0cba4cc3d0e1c63deea5c3dd"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"8c50b39ff6bae568597426bcd71342f63e308dc5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"3ddc1582_d20c82fb","updated":"2025-02-07 05:40:08.000000000","message":"recheck","commit_id":"bbdad54d31b4c014af10b052f035bad2eac33bfb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c5d37891fd29dee8d3a4387d4bb130789f7278fd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"b32dc5fc_e1c9707c","updated":"2025-02-07 21:37:15.000000000","message":"I just fixed the release note based on Lajos\u0027 comment since it was missing a new option.","commit_id":"02ccb78803e54709c661c11614f4b0d12f48e791"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"88c94f4a838cc337c682e3dd4ff2abae6ce20c25","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"1c2c61a6_0a35b17b","updated":"2025-02-12 01:07:24.000000000","message":"recheck","commit_id":"455a8a2224fbeeb62a6308879e15d8109d4a445d"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"005da7d6dafbe6abe675631d3514ee2536be3bac","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"4b303c9e_b9eecaf6","updated":"2025-02-13 00:59:01.000000000","message":"recheck","commit_id":"455a8a2224fbeeb62a6308879e15d8109d4a445d"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"1f5b14a56c50518080df5c2db8e3c26f84633d52","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"d902d752_9c6ab543","updated":"2025-02-11 08:17:24.000000000","message":"recheck\nipv6 tempest test failure is not related","commit_id":"455a8a2224fbeeb62a6308879e15d8109d4a445d"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"34a2d819bbec94ac9c4cad945ce8d2820a28970e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"69801cfe_f21f748a","updated":"2025-02-11 13:55:38.000000000","message":"thanks","commit_id":"455a8a2224fbeeb62a6308879e15d8109d4a445d"}],"neutron/agent/l2/extensions/metadata/metadata_path.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"28c7ce3d10ded5e1370095ef046a3cd1b2b52e17","unresolved":true,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"DEFAULT_META_GATEWAY_MAC \u003d \"fa:16:ee:00:00:01\""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class InvalidProviderCIDR(n_exc.NeutronException):"}],"source_content_type":"text/x-python","patch_set":4,"id":"366235ca_bf9aeaf0","line":39,"updated":"2023-05-05 09:25:26.000000000","message":"Should this be built based on the config setting?","commit_id":"1ad817ab21aafa3d4cc8c5a5f136edccd21d2fb9"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"7b1a81b5a9a9633a8eaa65fb45a8b679ae11c199","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"DEFAULT_META_GATEWAY_MAC \u003d \"fa:16:ee:00:00:01\""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class InvalidProviderCIDR(n_exc.NeutronException):"}],"source_content_type":"text/x-python","patch_set":4,"id":"a0db9b2c_a18dec2e","line":39,"in_reply_to":"366235ca_bf9aeaf0","updated":"2023-05-08 00:59:42.000000000","message":"IMO, this is simple, intuitive and efficient.","commit_id":"1ad817ab21aafa3d4cc8c5a5f136edccd21d2fb9"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"28c7ce3d10ded5e1370095ef046a3cd1b2b52e17","unresolved":true,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class InvalidProviderCIDR(n_exc.NeutronException):"},{"line_number":43,"context_line":"    message \u003d _(\"No enough Meta IPs of /32 CIDR.\")"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"class NoMoreProviderRes(n_exc.NeutronException):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ba06d8b_d2c612fb","line":43,"range":{"start_line":43,"start_character":17,"end_line":43,"end_character":26},"updated":"2023-05-05 09:25:26.000000000","message":"s/Not enough Metadata IPs in /32 CIDR\n\nAlso see my question below.","commit_id":"1ad817ab21aafa3d4cc8c5a5f136edccd21d2fb9"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"7b1a81b5a9a9633a8eaa65fb45a8b679ae11c199","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class InvalidProviderCIDR(n_exc.NeutronException):"},{"line_number":43,"context_line":"    message \u003d _(\"No enough Meta IPs of /32 CIDR.\")"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"class NoMoreProviderRes(n_exc.NeutronException):"}],"source_content_type":"text/x-python","patch_set":4,"id":"03d3674f_b9e113ea","line":43,"range":{"start_line":43,"start_character":17,"end_line":43,"end_character":26},"in_reply_to":"3ba06d8b_d2c612fb","updated":"2023-05-08 00:59:42.000000000","message":"Done","commit_id":"1ad817ab21aafa3d4cc8c5a5f136edccd21d2fb9"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"28c7ce3d10ded5e1370095ef046a3cd1b2b52e17","unresolved":true,"context_lines":[{"line_number":63,"context_line":"        for ip in port.fixed_ips:"},{"line_number":64,"context_line":"            ip_addr \u003d netaddr.IPAddress(str(ip.ip_address))"},{"line_number":65,"context_line":"            if ip_addr.version \u003d\u003d 4:"},{"line_number":66,"context_line":"                return str(ip.ip_address)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def remove_allocated_ip(self, ip):"},{"line_number":69,"context_line":"        self.allocated_ips.remove(ip)"}],"source_content_type":"text/x-python","patch_set":4,"id":"736c293a_16370049","line":66,"updated":"2023-05-05 09:25:26.000000000","message":"What about IPv6? We do support metadata over IPv6 now. Should also use the constant for \u00274\u0027 as well.","commit_id":"1ad817ab21aafa3d4cc8c5a5f136edccd21d2fb9"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"7b1a81b5a9a9633a8eaa65fb45a8b679ae11c199","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        for ip in port.fixed_ips:"},{"line_number":64,"context_line":"            ip_addr \u003d netaddr.IPAddress(str(ip.ip_address))"},{"line_number":65,"context_line":"            if ip_addr.version \u003d\u003d 4:"},{"line_number":66,"context_line":"                return str(ip.ip_address)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def remove_allocated_ip(self, ip):"},{"line_number":69,"context_line":"        self.allocated_ips.remove(ip)"}],"source_content_type":"text/x-python","patch_set":4,"id":"b5785a8d_1ef72c22","line":66,"in_reply_to":"736c293a_16370049","updated":"2023-05-08 00:59:42.000000000","message":"IPv6 metadata will be added in separated patches.","commit_id":"1ad817ab21aafa3d4cc8c5a5f136edccd21d2fb9"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"28c7ce3d10ded5e1370095ef046a3cd1b2b52e17","unresolved":true,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        def generate_local_ip(cidr):"},{"line_number":77,"context_line":"            network \u003d netaddr.IPNetwork(cidr)"},{"line_number":78,"context_line":"            if network.prefixlen \u003d\u003d 32:"},{"line_number":79,"context_line":"                raise InvalidProviderCIDR()"},{"line_number":80,"context_line":"            index \u003d random.randint(1, network.size - 1)"},{"line_number":81,"context_line":"            return str(network[index])"}],"source_content_type":"text/x-python","patch_set":4,"id":"d938f021_27fdb1ae","line":78,"updated":"2023-05-05 09:25:26.000000000","message":"If a /32 is invalid it should be mentioned in the config option, and maybe fail early? And maybe recommend what the recommended value should be.","commit_id":"1ad817ab21aafa3d4cc8c5a5f136edccd21d2fb9"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"7b1a81b5a9a9633a8eaa65fb45a8b679ae11c199","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        def generate_local_ip(cidr):"},{"line_number":77,"context_line":"            network \u003d netaddr.IPNetwork(cidr)"},{"line_number":78,"context_line":"            if network.prefixlen \u003d\u003d 32:"},{"line_number":79,"context_line":"                raise InvalidProviderCIDR()"},{"line_number":80,"context_line":"            index \u003d random.randint(1, network.size - 1)"},{"line_number":81,"context_line":"            return str(network[index])"}],"source_content_type":"text/x-python","patch_set":4,"id":"35dd78b5_9da51e3d","line":78,"in_reply_to":"d938f021_27fdb1ae","updated":"2023-05-08 00:59:42.000000000","message":"Sure, maybe we should add a CIDROpt in oslo_config. Something like this:\n\n    class IPOpt(Opt):\n\n        def __init__(self, name, prefix_len\u003d24, min_len\u003d24, max_len\u003d24, **kwargs):","commit_id":"1ad817ab21aafa3d4cc8c5a5f136edccd21d2fb9"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"28c7ce3d10ded5e1370095ef046a3cd1b2b52e17","unresolved":true,"context_lines":[{"line_number":84,"context_line":"        for _i in range(1, 100):"},{"line_number":85,"context_line":"            if ip not in self.allocated_ips:"},{"line_number":86,"context_line":"                return ip"},{"line_number":87,"context_line":"        raise NoMoreProviderRes(res\u003d\"provider IP\")"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def _get_one_mac(self):"},{"line_number":90,"context_line":"        for _i in range(1, 1000):"}],"source_content_type":"text/x-python","patch_set":4,"id":"265c2d38_e9bca15d","line":87,"range":{"start_line":87,"start_character":46,"end_line":87,"end_character":48},"updated":"2023-05-05 09:25:26.000000000","message":"s/IP addresses","commit_id":"1ad817ab21aafa3d4cc8c5a5f136edccd21d2fb9"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"7b1a81b5a9a9633a8eaa65fb45a8b679ae11c199","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        for _i in range(1, 100):"},{"line_number":85,"context_line":"            if ip not in self.allocated_ips:"},{"line_number":86,"context_line":"                return ip"},{"line_number":87,"context_line":"        raise NoMoreProviderRes(res\u003d\"provider IP\")"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def _get_one_mac(self):"},{"line_number":90,"context_line":"        for _i in range(1, 1000):"}],"source_content_type":"text/x-python","patch_set":4,"id":"e60db990_8408b372","line":87,"range":{"start_line":87,"start_character":46,"end_line":87,"end_character":48},"in_reply_to":"265c2d38_e9bca15d","updated":"2023-05-08 00:59:42.000000000","message":"Done","commit_id":"1ad817ab21aafa3d4cc8c5a5f136edccd21d2fb9"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"28c7ce3d10ded5e1370095ef046a3cd1b2b52e17","unresolved":true,"context_lines":[{"line_number":92,"context_line":"            mac \u003d net_lib.get_random_mac(base_mac.split(\u0027:\u0027))"},{"line_number":93,"context_line":"            if mac not in self.allocated_macs:"},{"line_number":94,"context_line":"                return mac"},{"line_number":95,"context_line":"        raise NoMoreProviderRes(res\u003d\"provider MAC address\")"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def get_provider_ip_info(self, port_id,"},{"line_number":98,"context_line":"                             provider_ip\u003dNone,"}],"source_content_type":"text/x-python","patch_set":4,"id":"8a2f7e8d_414b15f7","line":95,"range":{"start_line":95,"start_character":50,"end_line":95,"end_character":57},"updated":"2023-05-05 09:25:26.000000000","message":"s/addresses","commit_id":"1ad817ab21aafa3d4cc8c5a5f136edccd21d2fb9"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"7b1a81b5a9a9633a8eaa65fb45a8b679ae11c199","unresolved":false,"context_lines":[{"line_number":92,"context_line":"            mac \u003d net_lib.get_random_mac(base_mac.split(\u0027:\u0027))"},{"line_number":93,"context_line":"            if mac not in self.allocated_macs:"},{"line_number":94,"context_line":"                return mac"},{"line_number":95,"context_line":"        raise NoMoreProviderRes(res\u003d\"provider MAC address\")"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def get_provider_ip_info(self, port_id,"},{"line_number":98,"context_line":"                             provider_ip\u003dNone,"}],"source_content_type":"text/x-python","patch_set":4,"id":"19907a36_aace0666","line":95,"range":{"start_line":95,"start_character":50,"end_line":95,"end_character":57},"in_reply_to":"8a2f7e8d_414b15f7","updated":"2023-05-08 00:59:42.000000000","message":"Done","commit_id":"1ad817ab21aafa3d4cc8c5a5f136edccd21d2fb9"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"28c7ce3d10ded5e1370095ef046a3cd1b2b52e17","unresolved":true,"context_lines":[{"line_number":128,"context_line":"class MetadataPathAgentExtension(l2_agent_extension.L2AgentExtension):"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    PORT_INFO_CACHE \u003d {}"},{"line_number":131,"context_line":"    META_DEV_NAME \u003d \"tap-meta\""},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    @lockutils.synchronized(\u0027networking-path-ofport-cache\u0027)"},{"line_number":134,"context_line":"    def set_port_info_cache(self, port_id, port_info):"}],"source_content_type":"text/x-python","patch_set":4,"id":"b6b0bf55_5ee241a9","line":131,"updated":"2023-05-05 09:25:26.000000000","message":"I\u0027m a little worried about hard-coding all these device names here, like this and br-meta.","commit_id":"1ad817ab21aafa3d4cc8c5a5f136edccd21d2fb9"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"7b1a81b5a9a9633a8eaa65fb45a8b679ae11c199","unresolved":false,"context_lines":[{"line_number":128,"context_line":"class MetadataPathAgentExtension(l2_agent_extension.L2AgentExtension):"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    PORT_INFO_CACHE \u003d {}"},{"line_number":131,"context_line":"    META_DEV_NAME \u003d \"tap-meta\""},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    @lockutils.synchronized(\u0027networking-path-ofport-cache\u0027)"},{"line_number":134,"context_line":"    def set_port_info_cache(self, port_id, port_info):"}],"source_content_type":"text/x-python","patch_set":4,"id":"f2849bf5_16226834","line":131,"in_reply_to":"b6b0bf55_5ee241a9","updated":"2023-05-08 00:59:42.000000000","message":"This is automatically created by this extension. My idea is to make the name simple for operators to tcpdump it easily.","commit_id":"1ad817ab21aafa3d4cc8c5a5f136edccd21d2fb9"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"28c7ce3d10ded5e1370095ef046a3cd1b2b52e17","unresolved":true,"context_lines":[{"line_number":142,"context_line":"        if not all([agent_api.br_phys.get(\"meta\"), agent_api.phys_ofports,"},{"line_number":143,"context_line":"                    agent_api.bridge_mappings.get(\u0027meta\u0027)]):"},{"line_number":144,"context_line":"            raise FailedToInitMetadataPathExtension("},{"line_number":145,"context_line":"                msg\u003d\"br-meta may not exist.\")"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        self.agent_api \u003d agent_api"},{"line_number":148,"context_line":"        self.rcache_api \u003d agent_api.plugin_rpc.remote_resource_cache"}],"source_content_type":"text/x-python","patch_set":4,"id":"0807a9e1_656d6289","line":145,"range":{"start_line":145,"start_character":21,"end_line":145,"end_character":28},"updated":"2023-05-05 09:25:26.000000000","message":"So is it \u0027br-meta\u0027 or an item with a \u0027meta\u0027 tag in the config?","commit_id":"1ad817ab21aafa3d4cc8c5a5f136edccd21d2fb9"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"7b1a81b5a9a9633a8eaa65fb45a8b679ae11c199","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        if not all([agent_api.br_phys.get(\"meta\"), agent_api.phys_ofports,"},{"line_number":143,"context_line":"                    agent_api.bridge_mappings.get(\u0027meta\u0027)]):"},{"line_number":144,"context_line":"            raise FailedToInitMetadataPathExtension("},{"line_number":145,"context_line":"                msg\u003d\"br-meta may not exist.\")"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        self.agent_api \u003d agent_api"},{"line_number":148,"context_line":"        self.rcache_api \u003d agent_api.plugin_rpc.remote_resource_cache"}],"source_content_type":"text/x-python","patch_set":4,"id":"380703f3_9676f072","line":145,"range":{"start_line":145,"start_character":21,"end_line":145,"end_character":28},"in_reply_to":"0807a9e1_656d6289","updated":"2023-05-08 00:59:42.000000000","message":"So, changed to \"the metadata bridge device\".","commit_id":"1ad817ab21aafa3d4cc8c5a5f136edccd21d2fb9"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"090fcbe11f8096ce2f60d7917cf47fcfe77c6945","unresolved":true,"context_lines":[{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        self.provider_vlan_id \u003d cfg.CONF.METADATA.provider_vlan_id"},{"line_number":179,"context_line":"        self.provider_cidr \u003d cfg.CONF.METADATA.provider_cidr"},{"line_number":180,"context_line":"        # TODO(liuyulong): init related flows"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        self.provider_gateway_ip \u003d str(netaddr.IPAddress("},{"line_number":183,"context_line":"            netaddr.IPNetwork(cfg.CONF.METADATA.provider_cidr).first + 1))"}],"source_content_type":"text/x-python","patch_set":4,"id":"65b20de5_fdc791cf","line":180,"range":{"start_line":180,"start_character":8,"end_line":180,"end_character":45},"updated":"2023-05-02 21:35:05.000000000","message":"As of this review, this patch is at the top of the the patches relationship chain. Is the code to add flows going to be added to this patch or is there an upcoming patch?","commit_id":"1ad817ab21aafa3d4cc8c5a5f136edccd21d2fb9"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"7b1a81b5a9a9633a8eaa65fb45a8b679ae11c199","unresolved":false,"context_lines":[{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        self.provider_vlan_id \u003d cfg.CONF.METADATA.provider_vlan_id"},{"line_number":179,"context_line":"        self.provider_cidr \u003d cfg.CONF.METADATA.provider_cidr"},{"line_number":180,"context_line":"        # TODO(liuyulong): init related flows"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        self.provider_gateway_ip \u003d str(netaddr.IPAddress("},{"line_number":183,"context_line":"            netaddr.IPNetwork(cfg.CONF.METADATA.provider_cidr).first + 1))"}],"source_content_type":"text/x-python","patch_set":4,"id":"a4505c1d_3b21a258","line":180,"range":{"start_line":180,"start_character":8,"end_line":180,"end_character":45},"in_reply_to":"65b20de5_fdc791cf","updated":"2023-05-08 00:59:42.000000000","message":"Yes, flow works will be added in next patch.","commit_id":"1ad817ab21aafa3d4cc8c5a5f136edccd21d2fb9"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"090fcbe11f8096ce2f60d7917cf47fcfe77c6945","unresolved":true,"context_lines":[{"line_number":204,"context_line":"        ip \u003d ip_lib.IPWrapper()"},{"line_number":205,"context_line":"        ns_dev \u003d ip.device(self.META_DEV_NAME)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        for _i in range(9):"},{"line_number":208,"context_line":"            try:"},{"line_number":209,"context_line":"                ns_dev.link.set_address(DEFAULT_META_GATEWAY_MAC)"},{"line_number":210,"context_line":"                break"}],"source_content_type":"text/x-python","patch_set":4,"id":"d5cc040a_2fc2ac52","line":207,"range":{"start_line":207,"start_character":12,"end_line":207,"end_character":14},"updated":"2023-05-02 21:35:05.000000000","message":"why not just _?","commit_id":"1ad817ab21aafa3d4cc8c5a5f136edccd21d2fb9"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"2a95e77301777d22ef860877ebe2c21d859dff7c","unresolved":false,"context_lines":[{"line_number":204,"context_line":"        ip \u003d ip_lib.IPWrapper()"},{"line_number":205,"context_line":"        ns_dev \u003d ip.device(self.META_DEV_NAME)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        for _i in range(9):"},{"line_number":208,"context_line":"            try:"},{"line_number":209,"context_line":"                ns_dev.link.set_address(DEFAULT_META_GATEWAY_MAC)"},{"line_number":210,"context_line":"                break"}],"source_content_type":"text/x-python","patch_set":4,"id":"426aa949_adec1b68","line":207,"range":{"start_line":207,"start_character":12,"end_line":207,"end_character":14},"in_reply_to":"c44bf38e_3ca2fc90","updated":"2023-05-08 01:09:20.000000000","message":"\"_\" is not work.\n\n./neutron/agent/l2/extensions/metadata/metadata_path.py:207:13: F402 import \u0027_\u0027 from line 31 shadowed by loop variable\n        for _ in range(9):","commit_id":"1ad817ab21aafa3d4cc8c5a5f136edccd21d2fb9"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"7b1a81b5a9a9633a8eaa65fb45a8b679ae11c199","unresolved":false,"context_lines":[{"line_number":204,"context_line":"        ip \u003d ip_lib.IPWrapper()"},{"line_number":205,"context_line":"        ns_dev \u003d ip.device(self.META_DEV_NAME)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        for _i in range(9):"},{"line_number":208,"context_line":"            try:"},{"line_number":209,"context_line":"                ns_dev.link.set_address(DEFAULT_META_GATEWAY_MAC)"},{"line_number":210,"context_line":"                break"}],"source_content_type":"text/x-python","patch_set":4,"id":"c44bf38e_3ca2fc90","line":207,"range":{"start_line":207,"start_character":12,"end_line":207,"end_character":14},"in_reply_to":"d5cc040a_2fc2ac52","updated":"2023-05-08 00:59:42.000000000","message":"Done","commit_id":"1ad817ab21aafa3d4cc8c5a5f136edccd21d2fb9"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"090fcbe11f8096ce2f60d7917cf47fcfe77c6945","unresolved":true,"context_lines":[{"line_number":224,"context_line":"            self.provider_vlan_id)"},{"line_number":225,"context_line":"        self._set_port_vlan()"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    def reload_host_metadata_proxy(self, force_reload\u003dFalse):"},{"line_number":228,"context_line":"        if (not cfg.CONF.METADATA.nova_metadata_port or"},{"line_number":229,"context_line":"                not cfg.CONF.METADATA.nova_metadata_port):"},{"line_number":230,"context_line":"            LOG.warning(\"Nova metadata API servers are not set. \""}],"source_content_type":"text/x-python","patch_set":4,"id":"4a295b2b_73ac2d77","line":227,"range":{"start_line":227,"start_character":8,"end_line":227,"end_character":34},"updated":"2023-05-02 21:35:05.000000000","message":"Looking at https://github.com/openstack/neutron-lib/blob/master/neutron_lib/agent/l2_extension.py, this method doesn\u0027t form part of a L2 extension. Shouldn\u0027t this method be private?","commit_id":"1ad817ab21aafa3d4cc8c5a5f136edccd21d2fb9"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"7b1a81b5a9a9633a8eaa65fb45a8b679ae11c199","unresolved":false,"context_lines":[{"line_number":224,"context_line":"            self.provider_vlan_id)"},{"line_number":225,"context_line":"        self._set_port_vlan()"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    def reload_host_metadata_proxy(self, force_reload\u003dFalse):"},{"line_number":228,"context_line":"        if (not cfg.CONF.METADATA.nova_metadata_port or"},{"line_number":229,"context_line":"                not cfg.CONF.METADATA.nova_metadata_port):"},{"line_number":230,"context_line":"            LOG.warning(\"Nova metadata API servers are not set. \""}],"source_content_type":"text/x-python","patch_set":4,"id":"9c5dda1c_03e5db42","line":227,"range":{"start_line":227,"start_character":8,"end_line":227,"end_character":34},"in_reply_to":"4a295b2b_73ac2d77","updated":"2023-05-08 00:59:42.000000000","message":"Done","commit_id":"1ad817ab21aafa3d4cc8c5a5f136edccd21d2fb9"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"090fcbe11f8096ce2f60d7917cf47fcfe77c6945","unresolved":true,"context_lines":[{"line_number":239,"context_line":"        if self.instance_infos:"},{"line_number":240,"context_line":"            self.meta_daemon.enable()"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    def get_port_info(self, port_detail):"},{"line_number":243,"context_line":"        device_owner \u003d port_detail[\u0027device_owner\u0027]"},{"line_number":244,"context_line":"        if not device_owner.startswith(constants.DEVICE_OWNER_COMPUTE_PREFIX):"},{"line_number":245,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":4,"id":"b4959c8b_91ab4d4d","line":242,"range":{"start_line":242,"start_character":8,"end_line":242,"end_character":22},"updated":"2023-05-02 21:35:05.000000000","message":"Same question as line 227","commit_id":"1ad817ab21aafa3d4cc8c5a5f136edccd21d2fb9"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"7b1a81b5a9a9633a8eaa65fb45a8b679ae11c199","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        if self.instance_infos:"},{"line_number":240,"context_line":"            self.meta_daemon.enable()"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    def get_port_info(self, port_detail):"},{"line_number":243,"context_line":"        device_owner \u003d port_detail[\u0027device_owner\u0027]"},{"line_number":244,"context_line":"        if not device_owner.startswith(constants.DEVICE_OWNER_COMPUTE_PREFIX):"},{"line_number":245,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":4,"id":"6ffd8487_75b4264a","line":242,"range":{"start_line":242,"start_character":8,"end_line":242,"end_character":22},"in_reply_to":"b4959c8b_91ab4d4d","updated":"2023-05-08 00:59:42.000000000","message":"Done","commit_id":"1ad817ab21aafa3d4cc8c5a5f136edccd21d2fb9"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"090fcbe11f8096ce2f60d7917cf47fcfe77c6945","unresolved":true,"context_lines":[{"line_number":254,"context_line":"                                                     provider_ip,"},{"line_number":255,"context_line":"                                                     provider_mac)"},{"line_number":256,"context_line":"        if not ins_info:"},{"line_number":257,"context_line":"            LOG.info(\"Failed to get port %s instance provider IP info.\","},{"line_number":258,"context_line":"                     port_detail[\u0027port_id\u0027])"},{"line_number":259,"context_line":"            return"},{"line_number":260,"context_line":"        self.instance_infos[port_detail[\u0027port_id\u0027]] \u003d ins_info"}],"source_content_type":"text/x-python","patch_set":4,"id":"8d9a72f9_a0c73a62","line":257,"range":{"start_line":257,"start_character":16,"end_line":257,"end_character":20},"updated":"2023-05-02 21:35:05.000000000","message":"should this be error?","commit_id":"1ad817ab21aafa3d4cc8c5a5f136edccd21d2fb9"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"7b1a81b5a9a9633a8eaa65fb45a8b679ae11c199","unresolved":false,"context_lines":[{"line_number":254,"context_line":"                                                     provider_ip,"},{"line_number":255,"context_line":"                                                     provider_mac)"},{"line_number":256,"context_line":"        if not ins_info:"},{"line_number":257,"context_line":"            LOG.info(\"Failed to get port %s instance provider IP info.\","},{"line_number":258,"context_line":"                     port_detail[\u0027port_id\u0027])"},{"line_number":259,"context_line":"            return"},{"line_number":260,"context_line":"        self.instance_infos[port_detail[\u0027port_id\u0027]] \u003d ins_info"}],"source_content_type":"text/x-python","patch_set":4,"id":"8b2831dd_2ce1a0d0","line":257,"range":{"start_line":257,"start_character":16,"end_line":257,"end_character":20},"in_reply_to":"8d9a72f9_a0c73a62","updated":"2023-05-08 00:59:42.000000000","message":"Sure, make sense after some deeply thinking. My original idea is that if port does not have provider IP/mac, or the IP/MAC is run out, just result a simply INFO log. Their metedata datapath will no be available.\nAn ERROR log may give users more information about the metadata datapath configuration status.","commit_id":"1ad817ab21aafa3d4cc8c5a5f136edccd21d2fb9"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"090fcbe11f8096ce2f60d7917cf47fcfe77c6945","unresolved":true,"context_lines":[{"line_number":295,"context_line":"            LOG.info(\"Failed to get or set port %s info, error: %s\","},{"line_number":296,"context_line":"                     port_detail[\u0027port_id\u0027], err)"},{"line_number":297,"context_line":"        else:"},{"line_number":298,"context_line":"            # TODO(liuyulong): Add flows for metadata"},{"line_number":299,"context_line":"            self.reload_host_metadata_proxy()"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"    def _get_fixed_ip(self, port_info):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1b3edebd_fc41d67a","line":298,"updated":"2023-05-02 21:35:05.000000000","message":"Same question as L180","commit_id":"1ad817ab21aafa3d4cc8c5a5f136edccd21d2fb9"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"7b1a81b5a9a9633a8eaa65fb45a8b679ae11c199","unresolved":false,"context_lines":[{"line_number":295,"context_line":"            LOG.info(\"Failed to get or set port %s info, error: %s\","},{"line_number":296,"context_line":"                     port_detail[\u0027port_id\u0027], err)"},{"line_number":297,"context_line":"        else:"},{"line_number":298,"context_line":"            # TODO(liuyulong): Add flows for metadata"},{"line_number":299,"context_line":"            self.reload_host_metadata_proxy()"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"    def _get_fixed_ip(self, port_info):"}],"source_content_type":"text/x-python","patch_set":4,"id":"f98b6b60_e2ccfaad","line":298,"in_reply_to":"1b3edebd_fc41d67a","updated":"2023-05-08 00:59:42.000000000","message":"ditto","commit_id":"1ad817ab21aafa3d4cc8c5a5f136edccd21d2fb9"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"090fcbe11f8096ce2f60d7917cf47fcfe77c6945","unresolved":true,"context_lines":[{"line_number":320,"context_line":"        if not port_fixed_ip:"},{"line_number":321,"context_line":"            return"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"        # TODO(liuyulong): Remove flows for metadata"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"        self.ext_api.remove_allocated_ip(ins_info[\u0027provider_ip\u0027])"},{"line_number":326,"context_line":"        self.ext_api.remove_allocated_mac(ins_info[\u0027provider_port_mac\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"54f9e30c_020abdbf","line":323,"updated":"2023-05-02 21:35:05.000000000","message":"Same question as L180","commit_id":"1ad817ab21aafa3d4cc8c5a5f136edccd21d2fb9"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"7b1a81b5a9a9633a8eaa65fb45a8b679ae11c199","unresolved":false,"context_lines":[{"line_number":320,"context_line":"        if not port_fixed_ip:"},{"line_number":321,"context_line":"            return"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"        # TODO(liuyulong): Remove flows for metadata"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"        self.ext_api.remove_allocated_ip(ins_info[\u0027provider_ip\u0027])"},{"line_number":326,"context_line":"        self.ext_api.remove_allocated_mac(ins_info[\u0027provider_port_mac\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a686b81_1f58fe8b","line":323,"in_reply_to":"54f9e30c_020abdbf","updated":"2023-05-08 00:59:42.000000000","message":"ditto","commit_id":"1ad817ab21aafa3d4cc8c5a5f136edccd21d2fb9"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"107b76fc4c9cf4d66b3dfa0b697f9bdfb2430b78","unresolved":true,"context_lines":[{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    def _reload_host_metadata_proxy(self, force_reload\u003dFalse):"},{"line_number":228,"context_line":"        if (not cfg.CONF.METADATA.nova_metadata_port or"},{"line_number":229,"context_line":"                not cfg.CONF.METADATA.nova_metadata_port):"},{"line_number":230,"context_line":"            LOG.warning(\"Nova metadata API servers are not set. \""},{"line_number":231,"context_line":"                        \"Host metadata haproxy will not start.\")"},{"line_number":232,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":5,"id":"7114c1c0_c538fd43","line":229,"updated":"2023-05-08 17:08:01.000000000","message":"These two config values are the same.","commit_id":"d97073b8c6859fb1d9afb2cb099e5e7474ccf86f"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"bbc55481f90494bada2dbf967ec79d977dc2ada7","unresolved":false,"context_lines":[{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    def _reload_host_metadata_proxy(self, force_reload\u003dFalse):"},{"line_number":228,"context_line":"        if (not cfg.CONF.METADATA.nova_metadata_port or"},{"line_number":229,"context_line":"                not cfg.CONF.METADATA.nova_metadata_port):"},{"line_number":230,"context_line":"            LOG.warning(\"Nova metadata API servers are not set. \""},{"line_number":231,"context_line":"                        \"Host metadata haproxy will not start.\")"},{"line_number":232,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fe1c6e7_ac0d261f","line":229,"in_reply_to":"7114c1c0_c538fd43","updated":"2023-05-25 05:00:47.000000000","message":"Done","commit_id":"d97073b8c6859fb1d9afb2cb099e5e7474ccf86f"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"107b76fc4c9cf4d66b3dfa0b697f9bdfb2430b78","unresolved":true,"context_lines":[{"line_number":290,"context_line":"            port_info \u003d self._get_port_info(port_detail)"},{"line_number":291,"context_line":"            if not port_info:"},{"line_number":292,"context_line":"                return"},{"line_number":293,"context_line":"            self.set_port_info_cache(port_detail[\u0027port_id\u0027], port_info)"},{"line_number":294,"context_line":"        except Exception as err:"},{"line_number":295,"context_line":"            LOG.info(\"Failed to get or set port %s info, error: %s\","},{"line_number":296,"context_line":"                     port_detail[\u0027port_id\u0027], err)"}],"source_content_type":"text/x-python","patch_set":5,"id":"2ff04de6_15dfc3b8","line":293,"updated":"2023-05-08 17:08:01.000000000","message":"It\u0027s not clear from looking at the code above that either _get_port_info() or set_port_info_cache() can fail. Unless I\u0027m missing where.","commit_id":"d97073b8c6859fb1d9afb2cb099e5e7474ccf86f"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"66d6e40e175d12c17b8211a191bd997ba2a3d067","unresolved":true,"context_lines":[{"line_number":290,"context_line":"            port_info \u003d self._get_port_info(port_detail)"},{"line_number":291,"context_line":"            if not port_info:"},{"line_number":292,"context_line":"                return"},{"line_number":293,"context_line":"            self.set_port_info_cache(port_detail[\u0027port_id\u0027], port_info)"},{"line_number":294,"context_line":"        except Exception as err:"},{"line_number":295,"context_line":"            LOG.info(\"Failed to get or set port %s info, error: %s\","},{"line_number":296,"context_line":"                     port_detail[\u0027port_id\u0027], err)"}],"source_content_type":"text/x-python","patch_set":5,"id":"64304356_94e1b599","line":293,"in_reply_to":"2ff04de6_15dfc3b8","updated":"2023-05-09 03:49:14.000000000","message":"Reading/Writing the ovsdb and retrieving port details from resource RPC can get failed.","commit_id":"d97073b8c6859fb1d9afb2cb099e5e7474ccf86f"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"bbc55481f90494bada2dbf967ec79d977dc2ada7","unresolved":false,"context_lines":[{"line_number":290,"context_line":"            port_info \u003d self._get_port_info(port_detail)"},{"line_number":291,"context_line":"            if not port_info:"},{"line_number":292,"context_line":"                return"},{"line_number":293,"context_line":"            self.set_port_info_cache(port_detail[\u0027port_id\u0027], port_info)"},{"line_number":294,"context_line":"        except Exception as err:"},{"line_number":295,"context_line":"            LOG.info(\"Failed to get or set port %s info, error: %s\","},{"line_number":296,"context_line":"                     port_detail[\u0027port_id\u0027], err)"}],"source_content_type":"text/x-python","patch_set":5,"id":"c416d2e0_12919c78","line":293,"in_reply_to":"64304356_94e1b599","updated":"2023-05-25 05:00:47.000000000","message":"Ack","commit_id":"d97073b8c6859fb1d9afb2cb099e5e7474ccf86f"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"107b76fc4c9cf4d66b3dfa0b697f9bdfb2430b78","unresolved":true,"context_lines":[{"line_number":315,"context_line":"            return"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        if not ins_info:"},{"line_number":318,"context_line":"            return"},{"line_number":319,"context_line":"        port_fixed_ip \u003d self._get_fixed_ip(port_info)"},{"line_number":320,"context_line":"        if not port_fixed_ip:"},{"line_number":321,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":5,"id":"726f6195_1a41c3c9","line":318,"updated":"2023-05-08 17:08:01.000000000","message":"Technically this check could be moved above with an appropriate info message.","commit_id":"d97073b8c6859fb1d9afb2cb099e5e7474ccf86f"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"cbe37d53f61f7e13cd39e024595a2e5e2bf6e1ed","unresolved":true,"context_lines":[{"line_number":315,"context_line":"            return"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        if not ins_info:"},{"line_number":318,"context_line":"            return"},{"line_number":319,"context_line":"        port_fixed_ip \u003d self._get_fixed_ip(port_info)"},{"line_number":320,"context_line":"        if not port_fixed_ip:"},{"line_number":321,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":5,"id":"f7842b39_77a67c9f","line":318,"in_reply_to":"726f6195_1a41c3c9","updated":"2023-05-09 08:07:57.000000000","message":"There are some flow clean work after this. And the cleanup needs some params from both port_info and ins_onfo. In next patch, this will be more clear. Maybe I should remove this in this patch.","commit_id":"d97073b8c6859fb1d9afb2cb099e5e7474ccf86f"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"bbc55481f90494bada2dbf967ec79d977dc2ada7","unresolved":false,"context_lines":[{"line_number":315,"context_line":"            return"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        if not ins_info:"},{"line_number":318,"context_line":"            return"},{"line_number":319,"context_line":"        port_fixed_ip \u003d self._get_fixed_ip(port_info)"},{"line_number":320,"context_line":"        if not port_fixed_ip:"},{"line_number":321,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":5,"id":"68d90faa_16d368dc","line":318,"in_reply_to":"f7842b39_77a67c9f","updated":"2023-05-25 05:00:47.000000000","message":"Ack","commit_id":"d97073b8c6859fb1d9afb2cb099e5e7474ccf86f"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7d79d476e54f309e335efedf02e701767ea3a7da","unresolved":true,"context_lines":[{"line_number":120,"context_line":"            info[\"provider_port_mac\"] \u003d meta_mac_address"},{"line_number":121,"context_line":"        else:"},{"line_number":122,"context_line":"            self.allocated_macs.add(provider_mac)"},{"line_number":123,"context_line":"            info[\"provider_port_mac\"] \u003d provider_mac"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        return info"},{"line_number":126,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"deb65bda_61d9a090","line":123,"updated":"2023-07-11 20:38:29.000000000","message":"nit: this and the block above could be simplified like below to remove the if/else\n\nprovider_mac \u003d provider_mac or self._get_one_mac()\nself.allocated_macs.add(provider_mac)\ninfo[\"provider_port_mac\"] \u003d provider_mac","commit_id":"2c7cd8c54e892f89c332b5d10c6e292d83fb1feb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"2db04c490bec16cda9e99a7ed9e8f540bb88145a","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            info[\"provider_port_mac\"] \u003d meta_mac_address"},{"line_number":121,"context_line":"        else:"},{"line_number":122,"context_line":"            self.allocated_macs.add(provider_mac)"},{"line_number":123,"context_line":"            info[\"provider_port_mac\"] \u003d provider_mac"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        return info"},{"line_number":126,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"a481979e_2caa8acf","line":123,"in_reply_to":"deb65bda_61d9a090","updated":"2023-09-04 01:11:39.000000000","message":"Done","commit_id":"2c7cd8c54e892f89c332b5d10c6e292d83fb1feb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7d79d476e54f309e335efedf02e701767ea3a7da","unresolved":true,"context_lines":[{"line_number":139,"context_line":"        return self.PORT_INFO_CACHE.pop(port_id, None)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def consume_api(self, agent_api):"},{"line_number":142,"context_line":"        if not all([agent_api.br_phys.get(\"meta\"), agent_api.phys_ofports,"},{"line_number":143,"context_line":"                    agent_api.bridge_mappings.get(\u0027meta\u0027)]):"},{"line_number":144,"context_line":"            raise FailedToInitMetadataPathExtension("},{"line_number":145,"context_line":"                msg\u003d\"The metadata bridge device may not exist.\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"31d59b88_55414092","line":142,"range":{"start_line":142,"start_character":42,"end_line":142,"end_character":48},"updated":"2023-07-11 20:38:29.000000000","message":"super nit: others are \u0027meta\u0027","commit_id":"2c7cd8c54e892f89c332b5d10c6e292d83fb1feb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"2db04c490bec16cda9e99a7ed9e8f540bb88145a","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        return self.PORT_INFO_CACHE.pop(port_id, None)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def consume_api(self, agent_api):"},{"line_number":142,"context_line":"        if not all([agent_api.br_phys.get(\"meta\"), agent_api.phys_ofports,"},{"line_number":143,"context_line":"                    agent_api.bridge_mappings.get(\u0027meta\u0027)]):"},{"line_number":144,"context_line":"            raise FailedToInitMetadataPathExtension("},{"line_number":145,"context_line":"                msg\u003d\"The metadata bridge device may not exist.\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"9d9293bf_cd604e10","line":142,"range":{"start_line":142,"start_character":42,"end_line":142,"end_character":48},"in_reply_to":"31d59b88_55414092","updated":"2023-09-04 01:11:39.000000000","message":"Done","commit_id":"2c7cd8c54e892f89c332b5d10c6e292d83fb1feb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7d79d476e54f309e335efedf02e701767ea3a7da","unresolved":true,"context_lines":[{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        if (not cfg.CONF.METADATA.nova_metadata_host or"},{"line_number":164,"context_line":"                not cfg.CONF.METADATA.nova_metadata_port):"},{"line_number":165,"context_line":"            LOG.warning(\"Nova metadata API servers are not set. \""},{"line_number":166,"context_line":"                        \"Host metadata haproxy will not start. \""},{"line_number":167,"context_line":"                        \"Please check the config option of \""},{"line_number":168,"context_line":"                        \"\u0027nova_metadata_*\u0027 in [METADATA] section.\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"55f42aba_1f2110cb","line":165,"range":{"start_line":165,"start_character":43,"end_line":165,"end_character":50},"updated":"2023-07-11 20:38:29.000000000","message":"s/values ?","commit_id":"2c7cd8c54e892f89c332b5d10c6e292d83fb1feb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"2db04c490bec16cda9e99a7ed9e8f540bb88145a","unresolved":false,"context_lines":[{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        if (not cfg.CONF.METADATA.nova_metadata_host or"},{"line_number":164,"context_line":"                not cfg.CONF.METADATA.nova_metadata_port):"},{"line_number":165,"context_line":"            LOG.warning(\"Nova metadata API servers are not set. \""},{"line_number":166,"context_line":"                        \"Host metadata haproxy will not start. \""},{"line_number":167,"context_line":"                        \"Please check the config option of \""},{"line_number":168,"context_line":"                        \"\u0027nova_metadata_*\u0027 in [METADATA] section.\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"2519b32d_fe0021f3","line":165,"range":{"start_line":165,"start_character":43,"end_line":165,"end_character":50},"in_reply_to":"55f42aba_1f2110cb","updated":"2023-09-04 01:11:39.000000000","message":"Done","commit_id":"2c7cd8c54e892f89c332b5d10c6e292d83fb1feb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7d79d476e54f309e335efedf02e701767ea3a7da","unresolved":true,"context_lines":[{"line_number":202,"context_line":"        self.meta_br.replace_port(self.META_DEV_NAME, *attrs)"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"        ip \u003d ip_lib.IPWrapper()"},{"line_number":205,"context_line":"        ns_dev \u003d ip.device(self.META_DEV_NAME)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        for _i in range(9):"},{"line_number":208,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"41bb6bea_e63c2925","line":205,"updated":"2023-07-11 20:38:29.000000000","message":"Since \u0027ip\u0027 is only used here, this can just be:\n\nns_dev \u003d ip_lib.IPDevice(self.META_DEV_NAME)","commit_id":"2c7cd8c54e892f89c332b5d10c6e292d83fb1feb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"2db04c490bec16cda9e99a7ed9e8f540bb88145a","unresolved":false,"context_lines":[{"line_number":202,"context_line":"        self.meta_br.replace_port(self.META_DEV_NAME, *attrs)"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"        ip \u003d ip_lib.IPWrapper()"},{"line_number":205,"context_line":"        ns_dev \u003d ip.device(self.META_DEV_NAME)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        for _i in range(9):"},{"line_number":208,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"de295244_97f648da","line":205,"in_reply_to":"41bb6bea_e63c2925","updated":"2023-09-04 01:11:39.000000000","message":"Done","commit_id":"2c7cd8c54e892f89c332b5d10c6e292d83fb1feb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7d79d476e54f309e335efedf02e701767ea3a7da","unresolved":true,"context_lines":[{"line_number":210,"context_line":"                break"},{"line_number":211,"context_line":"            except RuntimeError as e:"},{"line_number":212,"context_line":"                LOG.warning(\"Got error trying to set mac, retrying: %s\", e)"},{"line_number":213,"context_line":"                time.sleep(1)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        cidr \u003d \"%s/%s\" % ("},{"line_number":216,"context_line":"            self.provider_gateway_ip,"}],"source_content_type":"text/x-python","patch_set":7,"id":"781a3eb3_f01265a4","line":213,"updated":"2023-07-11 20:38:29.000000000","message":"If this loop never succeeds this should try one more time outside the loop (and possibly raise), which is what _ensure_device_address() does and what this was based on","commit_id":"2c7cd8c54e892f89c332b5d10c6e292d83fb1feb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"2db04c490bec16cda9e99a7ed9e8f540bb88145a","unresolved":false,"context_lines":[{"line_number":210,"context_line":"                break"},{"line_number":211,"context_line":"            except RuntimeError as e:"},{"line_number":212,"context_line":"                LOG.warning(\"Got error trying to set mac, retrying: %s\", e)"},{"line_number":213,"context_line":"                time.sleep(1)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        cidr \u003d \"%s/%s\" % ("},{"line_number":216,"context_line":"            self.provider_gateway_ip,"}],"source_content_type":"text/x-python","patch_set":7,"id":"bb1c2490_8a31f1ee","line":213,"in_reply_to":"781a3eb3_f01265a4","updated":"2023-09-04 01:11:39.000000000","message":"There a only one device on the host, it usually does not fail. Because this is not executed multiple times.","commit_id":"2c7cd8c54e892f89c332b5d10c6e292d83fb1feb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7d79d476e54f309e335efedf02e701767ea3a7da","unresolved":true,"context_lines":[{"line_number":227,"context_line":"    def _reload_host_metadata_proxy(self, force_reload\u003dFalse):"},{"line_number":228,"context_line":"        if (not cfg.CONF.METADATA.nova_metadata_host or"},{"line_number":229,"context_line":"                not cfg.CONF.METADATA.nova_metadata_port):"},{"line_number":230,"context_line":"            LOG.warning(\"Nova metadata API servers are not set. \""},{"line_number":231,"context_line":"                        \"Host metadata haproxy will not start.\")"},{"line_number":232,"context_line":"            return"},{"line_number":233,"context_line":"        if not force_reload and not self.instance_infos:"}],"source_content_type":"text/x-python","patch_set":7,"id":"a09582f3_69bf0428","line":230,"range":{"start_line":230,"start_character":43,"end_line":230,"end_character":50},"updated":"2023-07-11 20:38:29.000000000","message":"s/values\n\nActually, can this happen since initialize() would have already failed","commit_id":"2c7cd8c54e892f89c332b5d10c6e292d83fb1feb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"2db04c490bec16cda9e99a7ed9e8f540bb88145a","unresolved":false,"context_lines":[{"line_number":227,"context_line":"    def _reload_host_metadata_proxy(self, force_reload\u003dFalse):"},{"line_number":228,"context_line":"        if (not cfg.CONF.METADATA.nova_metadata_host or"},{"line_number":229,"context_line":"                not cfg.CONF.METADATA.nova_metadata_port):"},{"line_number":230,"context_line":"            LOG.warning(\"Nova metadata API servers are not set. \""},{"line_number":231,"context_line":"                        \"Host metadata haproxy will not start.\")"},{"line_number":232,"context_line":"            return"},{"line_number":233,"context_line":"        if not force_reload and not self.instance_infos:"}],"source_content_type":"text/x-python","patch_set":7,"id":"0941fb7c_be1fe432","line":230,"range":{"start_line":230,"start_character":43,"end_line":230,"end_character":50},"in_reply_to":"a09582f3_69bf0428","updated":"2023-09-04 01:11:39.000000000","message":"Done","commit_id":"2c7cd8c54e892f89c332b5d10c6e292d83fb1feb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7d79d476e54f309e335efedf02e701767ea3a7da","unresolved":true,"context_lines":[{"line_number":258,"context_line":"                     port_detail[\u0027port_id\u0027])"},{"line_number":259,"context_line":"            return"},{"line_number":260,"context_line":"        self.instance_infos[port_detail[\u0027port_id\u0027]] \u003d ins_info"},{"line_number":261,"context_line":"        if not provider_ip or provider_ip !\u003d ins_info[\u0027provider_ip\u0027]:"},{"line_number":262,"context_line":"            self.int_br.set_value_to_other_config("},{"line_number":263,"context_line":"                port.port_name,"},{"line_number":264,"context_line":"                \u0027provider_ip\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"193a120c_3493290d","line":261,"updated":"2023-07-11 20:38:29.000000000","message":"If provider_ip (or provider_mac) was None, get_provider_ip_info() will have allocated them, so I\u0027m not sure what this check or below is doing.","commit_id":"2c7cd8c54e892f89c332b5d10c6e292d83fb1feb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"2db04c490bec16cda9e99a7ed9e8f540bb88145a","unresolved":false,"context_lines":[{"line_number":258,"context_line":"                     port_detail[\u0027port_id\u0027])"},{"line_number":259,"context_line":"            return"},{"line_number":260,"context_line":"        self.instance_infos[port_detail[\u0027port_id\u0027]] \u003d ins_info"},{"line_number":261,"context_line":"        if not provider_ip or provider_ip !\u003d ins_info[\u0027provider_ip\u0027]:"},{"line_number":262,"context_line":"            self.int_br.set_value_to_other_config("},{"line_number":263,"context_line":"                port.port_name,"},{"line_number":264,"context_line":"                \u0027provider_ip\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"720d4765_bb52c33a","line":261,"in_reply_to":"193a120c_3493290d","updated":"2023-09-04 01:11:39.000000000","message":"This is in case the OVSDB has removed/changed the provider_ip in the other_config. If provider ip and mac are not changed, can save one OVSDB action.","commit_id":"2c7cd8c54e892f89c332b5d10c6e292d83fb1feb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7d79d476e54f309e335efedf02e701767ea3a7da","unresolved":true,"context_lines":[{"line_number":281,"context_line":"                     \"ofport\": port.ofport,"},{"line_number":282,"context_line":"                     \"network_id\": port_detail[\u0027network_id\u0027]}"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"        LOG.debug(\"Metadata path get the %s port information: %s \","},{"line_number":285,"context_line":"                  port_detail[\u0027port_id\u0027], port_info)"},{"line_number":286,"context_line":"        return port_info"},{"line_number":287,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"0316118b_4af7e272","line":284,"range":{"start_line":284,"start_character":33,"end_line":284,"end_character":36},"updated":"2023-07-11 20:38:29.000000000","message":"s/got","commit_id":"2c7cd8c54e892f89c332b5d10c6e292d83fb1feb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"2db04c490bec16cda9e99a7ed9e8f540bb88145a","unresolved":false,"context_lines":[{"line_number":281,"context_line":"                     \"ofport\": port.ofport,"},{"line_number":282,"context_line":"                     \"network_id\": port_detail[\u0027network_id\u0027]}"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"        LOG.debug(\"Metadata path get the %s port information: %s \","},{"line_number":285,"context_line":"                  port_detail[\u0027port_id\u0027], port_info)"},{"line_number":286,"context_line":"        return port_info"},{"line_number":287,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"e2eda820_540ef551","line":284,"range":{"start_line":284,"start_character":33,"end_line":284,"end_character":36},"in_reply_to":"0316118b_4af7e272","updated":"2023-09-04 01:11:39.000000000","message":"Done","commit_id":"2c7cd8c54e892f89c332b5d10c6e292d83fb1feb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7d79d476e54f309e335efedf02e701767ea3a7da","unresolved":true,"context_lines":[{"line_number":282,"context_line":"                     \"network_id\": port_detail[\u0027network_id\u0027]}"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"        LOG.debug(\"Metadata path get the %s port information: %s \","},{"line_number":285,"context_line":"                  port_detail[\u0027port_id\u0027], port_info)"},{"line_number":286,"context_line":"        return port_info"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"    def handle_port(self, context, port_detail):"}],"source_content_type":"text/x-python","patch_set":7,"id":"f3716dda_7c2f62ff","line":285,"range":{"start_line":285,"start_character":18,"end_line":285,"end_character":40},"updated":"2023-07-11 20:38:29.000000000","message":"This value is in port_info already","commit_id":"2c7cd8c54e892f89c332b5d10c6e292d83fb1feb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"2db04c490bec16cda9e99a7ed9e8f540bb88145a","unresolved":false,"context_lines":[{"line_number":282,"context_line":"                     \"network_id\": port_detail[\u0027network_id\u0027]}"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"        LOG.debug(\"Metadata path get the %s port information: %s \","},{"line_number":285,"context_line":"                  port_detail[\u0027port_id\u0027], port_info)"},{"line_number":286,"context_line":"        return port_info"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"    def handle_port(self, context, port_detail):"}],"source_content_type":"text/x-python","patch_set":7,"id":"36a14246_5d104a75","line":285,"range":{"start_line":285,"start_character":18,"end_line":285,"end_character":40},"in_reply_to":"f3716dda_7c2f62ff","updated":"2023-09-04 01:11:39.000000000","message":"removed","commit_id":"2c7cd8c54e892f89c332b5d10c6e292d83fb1feb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7d79d476e54f309e335efedf02e701767ea3a7da","unresolved":true,"context_lines":[{"line_number":290,"context_line":"            port_info \u003d self._get_port_info(port_detail)"},{"line_number":291,"context_line":"            if not port_info:"},{"line_number":292,"context_line":"                return"},{"line_number":293,"context_line":"            self.set_port_info_cache(port_detail[\u0027port_id\u0027], port_info)"},{"line_number":294,"context_line":"        except Exception as err:"},{"line_number":295,"context_line":"            LOG.info(\"Failed to get or set port %s info, error: %s\","},{"line_number":296,"context_line":"                     port_detail[\u0027port_id\u0027], err)"}],"source_content_type":"text/x-python","patch_set":7,"id":"6f0f09fc_e25243e4","line":293,"range":{"start_line":293,"start_character":37,"end_line":293,"end_character":59},"updated":"2023-07-11 20:38:29.000000000","message":"This value is in port_info","commit_id":"2c7cd8c54e892f89c332b5d10c6e292d83fb1feb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"2db04c490bec16cda9e99a7ed9e8f540bb88145a","unresolved":false,"context_lines":[{"line_number":290,"context_line":"            port_info \u003d self._get_port_info(port_detail)"},{"line_number":291,"context_line":"            if not port_info:"},{"line_number":292,"context_line":"                return"},{"line_number":293,"context_line":"            self.set_port_info_cache(port_detail[\u0027port_id\u0027], port_info)"},{"line_number":294,"context_line":"        except Exception as err:"},{"line_number":295,"context_line":"            LOG.info(\"Failed to get or set port %s info, error: %s\","},{"line_number":296,"context_line":"                     port_detail[\u0027port_id\u0027], err)"}],"source_content_type":"text/x-python","patch_set":7,"id":"00cb0576_9c1ce9be","line":293,"range":{"start_line":293,"start_character":37,"end_line":293,"end_character":59},"in_reply_to":"6f0f09fc_e25243e4","updated":"2023-09-04 01:11:39.000000000","message":"It is a key-value style.","commit_id":"2c7cd8c54e892f89c332b5d10c6e292d83fb1feb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7d79d476e54f309e335efedf02e701767ea3a7da","unresolved":true,"context_lines":[{"line_number":298,"context_line":"            # TODO(liuyulong): Add flows for metadata"},{"line_number":299,"context_line":"            self._reload_host_metadata_proxy()"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"    def _get_fixed_ip(self, port_info):"},{"line_number":302,"context_line":"        for ip in port_info[\u0027fixed_ips\u0027]:"},{"line_number":303,"context_line":"            ip_addr \u003d netaddr.IPAddress(ip[\u0027ip_address\u0027])"},{"line_number":304,"context_line":"            if ip_addr.version \u003d\u003d 4:"}],"source_content_type":"text/x-python","patch_set":7,"id":"09269ddd_70ccdca6","line":301,"updated":"2023-07-11 20:38:29.000000000","message":"Is this called?","commit_id":"2c7cd8c54e892f89c332b5d10c6e292d83fb1feb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"2db04c490bec16cda9e99a7ed9e8f540bb88145a","unresolved":false,"context_lines":[{"line_number":298,"context_line":"            # TODO(liuyulong): Add flows for metadata"},{"line_number":299,"context_line":"            self._reload_host_metadata_proxy()"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"    def _get_fixed_ip(self, port_info):"},{"line_number":302,"context_line":"        for ip in port_info[\u0027fixed_ips\u0027]:"},{"line_number":303,"context_line":"            ip_addr \u003d netaddr.IPAddress(ip[\u0027ip_address\u0027])"},{"line_number":304,"context_line":"            if ip_addr.version \u003d\u003d 4:"}],"source_content_type":"text/x-python","patch_set":7,"id":"1623257a_e825bdb0","line":301,"in_reply_to":"09269ddd_70ccdca6","updated":"2023-09-04 01:11:39.000000000","message":"Yes, I will update the code.","commit_id":"2c7cd8c54e892f89c332b5d10c6e292d83fb1feb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7d79d476e54f309e335efedf02e701767ea3a7da","unresolved":true,"context_lines":[{"line_number":301,"context_line":"    def _get_fixed_ip(self, port_info):"},{"line_number":302,"context_line":"        for ip in port_info[\u0027fixed_ips\u0027]:"},{"line_number":303,"context_line":"            ip_addr \u003d netaddr.IPAddress(ip[\u0027ip_address\u0027])"},{"line_number":304,"context_line":"            if ip_addr.version \u003d\u003d 4:"},{"line_number":305,"context_line":"                return ip[\u0027ip_address\u0027]"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    def delete_port(self, context, port_detail):"}],"source_content_type":"text/x-python","patch_set":7,"id":"7688d4bb_0dd9957c","line":304,"range":{"start_line":304,"start_character":34,"end_line":304,"end_character":35},"updated":"2023-07-11 20:38:29.000000000","message":"can use constant for this","commit_id":"2c7cd8c54e892f89c332b5d10c6e292d83fb1feb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"2db04c490bec16cda9e99a7ed9e8f540bb88145a","unresolved":false,"context_lines":[{"line_number":301,"context_line":"    def _get_fixed_ip(self, port_info):"},{"line_number":302,"context_line":"        for ip in port_info[\u0027fixed_ips\u0027]:"},{"line_number":303,"context_line":"            ip_addr \u003d netaddr.IPAddress(ip[\u0027ip_address\u0027])"},{"line_number":304,"context_line":"            if ip_addr.version \u003d\u003d 4:"},{"line_number":305,"context_line":"                return ip[\u0027ip_address\u0027]"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    def delete_port(self, context, port_detail):"}],"source_content_type":"text/x-python","patch_set":7,"id":"a79e6681_b64bfe9b","line":304,"range":{"start_line":304,"start_character":34,"end_line":304,"end_character":35},"in_reply_to":"7688d4bb_0dd9957c","updated":"2023-09-04 01:11:39.000000000","message":"Done","commit_id":"2c7cd8c54e892f89c332b5d10c6e292d83fb1feb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b95589108ff647e4f5aa8853c2a172bddbc7f850","unresolved":true,"context_lines":[{"line_number":77,"context_line":"            network \u003d netaddr.IPNetwork(cidr)"},{"line_number":78,"context_line":"            if network.prefixlen \u003d\u003d 32:"},{"line_number":79,"context_line":"                raise InvalidProviderCIDR()"},{"line_number":80,"context_line":"            index \u003d random.randint(1, network.size - 1)"},{"line_number":81,"context_line":"            return str(network[index])"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        ip \u003d generate_local_ip(cfg.CONF.METADATA.provider_cidr)"}],"source_content_type":"text/x-python","patch_set":11,"id":"57ae8195_4c73237f","line":80,"updated":"2023-09-18 19:50:09.000000000","message":"The only problem with doing it this way is when the network becomes more full, a random number will conflict with an existing allocation more often, which could lead to a failure even if there are IPs available.\n\nIt might be better storing the provider_cidr as an IPset in init():\n\nnetwork \u003d netaddr.IPNetwork(cfg.CONF.METADATA.provider_cidr)\nif network.prefix_length \u003d\u003d 32:\n    raise\nself.ip_set \u003d netaddr.IPSet()\nself.ip_set.add(netaddr.IPRange(network.first, network.last))\n\nThen the allocator can just look at what\u0027s left:\n\nav_set \u003d self.ip_set.difference(self.allocated_ips)\nif av_set.size \u003d\u003d 0:\n    raise \"no more\"\nip \u003d random.sample(sorted(av_set), 1)","commit_id":"c4a968505c86d20658acf283855d65a88edd3dcb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"c042f7df52db090c72fa7b5489fd6a9ce2921ba6","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            network \u003d netaddr.IPNetwork(cidr)"},{"line_number":78,"context_line":"            if network.prefixlen \u003d\u003d 32:"},{"line_number":79,"context_line":"                raise InvalidProviderCIDR()"},{"line_number":80,"context_line":"            index \u003d random.randint(1, network.size - 1)"},{"line_number":81,"context_line":"            return str(network[index])"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        ip \u003d generate_local_ip(cfg.CONF.METADATA.provider_cidr)"}],"source_content_type":"text/x-python","patch_set":11,"id":"f70ef189_495db858","line":80,"in_reply_to":"57ae8195_4c73237f","updated":"2023-09-20 09:08:23.000000000","message":"I remember IP set related methods have some performance issue. But anyway, I will test these. Thanks.","commit_id":"c4a968505c86d20658acf283855d65a88edd3dcb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b95589108ff647e4f5aa8853c2a172bddbc7f850","unresolved":true,"context_lines":[{"line_number":80,"context_line":"            index \u003d random.randint(1, network.size - 1)"},{"line_number":81,"context_line":"            return str(network[index])"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        ip \u003d generate_local_ip(cfg.CONF.METADATA.provider_cidr)"},{"line_number":84,"context_line":"        for _i in range(1, 100):"},{"line_number":85,"context_line":"            if ip not in self.allocated_ips:"},{"line_number":86,"context_line":"                return ip"}],"source_content_type":"text/x-python","patch_set":11,"id":"9e1862bc_477710ce","line":83,"updated":"2023-09-18 19:50:09.000000000","message":"Shouldn\u0027t this be inside the for() loop?","commit_id":"c4a968505c86d20658acf283855d65a88edd3dcb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"c042f7df52db090c72fa7b5489fd6a9ce2921ba6","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            index \u003d random.randint(1, network.size - 1)"},{"line_number":81,"context_line":"            return str(network[index])"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        ip \u003d generate_local_ip(cfg.CONF.METADATA.provider_cidr)"},{"line_number":84,"context_line":"        for _i in range(1, 100):"},{"line_number":85,"context_line":"            if ip not in self.allocated_ips:"},{"line_number":86,"context_line":"                return ip"}],"source_content_type":"text/x-python","patch_set":11,"id":"7d43a336_1c1c65f6","line":83,"in_reply_to":"9e1862bc_477710ce","updated":"2023-09-20 09:08:23.000000000","message":"Done","commit_id":"c4a968505c86d20658acf283855d65a88edd3dcb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b95589108ff647e4f5aa8853c2a172bddbc7f850","unresolved":true,"context_lines":[{"line_number":81,"context_line":"            return str(network[index])"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        ip \u003d generate_local_ip(cfg.CONF.METADATA.provider_cidr)"},{"line_number":84,"context_line":"        for _i in range(1, 100):"},{"line_number":85,"context_line":"            if ip not in self.allocated_ips:"},{"line_number":86,"context_line":"                return ip"},{"line_number":87,"context_line":"        raise NoMoreProviderRes(res\u003d\"provider IP addresses\")"}],"source_content_type":"text/x-python","patch_set":11,"id":"4afa408a_e2cd0f0b","line":84,"range":{"start_line":84,"start_character":27,"end_line":84,"end_character":30},"updated":"2023-09-18 19:50:09.000000000","message":"Seems like the upper limit for the loop should be (network.size - 1) so it doesn\u0027t loop more times than IP addresses available? Although random.randint() might require more tries, see my other comment.","commit_id":"c4a968505c86d20658acf283855d65a88edd3dcb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"c042f7df52db090c72fa7b5489fd6a9ce2921ba6","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            return str(network[index])"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        ip \u003d generate_local_ip(cfg.CONF.METADATA.provider_cidr)"},{"line_number":84,"context_line":"        for _i in range(1, 100):"},{"line_number":85,"context_line":"            if ip not in self.allocated_ips:"},{"line_number":86,"context_line":"                return ip"},{"line_number":87,"context_line":"        raise NoMoreProviderRes(res\u003d\"provider IP addresses\")"}],"source_content_type":"text/x-python","patch_set":11,"id":"42796f2b_53f9ea02","line":84,"range":{"start_line":84,"start_character":27,"end_line":84,"end_character":30},"in_reply_to":"4afa408a_e2cd0f0b","updated":"2023-09-20 09:08:23.000000000","message":"Done","commit_id":"c4a968505c86d20658acf283855d65a88edd3dcb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c5818d80a195ee2c606d789eddba4997d0a3ebbe","unresolved":true,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"class FailedToInitMetadataPathExtension(n_exc.NeutronException):"},{"line_number":51,"context_line":"    message \u003d _(\"Could not initialize agent extension \""},{"line_number":52,"context_line":"                \"metadata datapath, error: %(msg)s\")"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"class MetadataPathExtensionPortInfoAPI(object):"}],"source_content_type":"text/x-python","patch_set":13,"id":"61952966_c77fd8c0","line":52,"range":{"start_line":52,"start_character":17,"end_line":52,"end_character":34},"updated":"2024-03-28 22:11:22.000000000","message":"s/metadata path\n\nThat matches the extension name","commit_id":"4d31e6afecc69503b64d24d767dcac03bd5ac180"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"bed05ca7ed6150c8abd234e980fb914dbc86c522","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"class FailedToInitMetadataPathExtension(n_exc.NeutronException):"},{"line_number":51,"context_line":"    message \u003d _(\"Could not initialize agent extension \""},{"line_number":52,"context_line":"                \"metadata datapath, error: %(msg)s\")"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"class MetadataPathExtensionPortInfoAPI(object):"}],"source_content_type":"text/x-python","patch_set":13,"id":"c0cb08bd_e7a120c8","line":52,"range":{"start_line":52,"start_character":17,"end_line":52,"end_character":34},"in_reply_to":"61952966_c77fd8c0","updated":"2024-06-24 06:26:03.000000000","message":"Done","commit_id":"4d31e6afecc69503b64d24d767dcac03bd5ac180"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c5818d80a195ee2c606d789eddba4997d0a3ebbe","unresolved":true,"context_lines":[{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        self.provider_vlan_id \u003d cfg.CONF.METADATA.provider_vlan_id"},{"line_number":179,"context_line":"        self.provider_cidr \u003d cfg.CONF.METADATA.provider_cidr"},{"line_number":180,"context_line":"        # TODO(liuyulong): init related flows"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        self.provider_gateway_ip \u003d str(netaddr.IPAddress("},{"line_number":183,"context_line":"            netaddr.IPNetwork(cfg.CONF.METADATA.provider_cidr).first + 1))"}],"source_content_type":"text/x-python","patch_set":13,"id":"7d6a9876_9f9b36e6","line":180,"updated":"2024-03-28 22:11:22.000000000","message":"Still a todo? Although I guess I see similar below.","commit_id":"4d31e6afecc69503b64d24d767dcac03bd5ac180"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"d49df07380861b089d58e6aebe7907cf7efabf59","unresolved":true,"context_lines":[{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        self.provider_vlan_id \u003d cfg.CONF.METADATA.provider_vlan_id"},{"line_number":179,"context_line":"        self.provider_cidr \u003d cfg.CONF.METADATA.provider_cidr"},{"line_number":180,"context_line":"        # TODO(liuyulong): init related flows"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        self.provider_gateway_ip \u003d str(netaddr.IPAddress("},{"line_number":183,"context_line":"            netaddr.IPNetwork(cfg.CONF.METADATA.provider_cidr).first + 1))"}],"source_content_type":"text/x-python","patch_set":13,"id":"e7c2dc37_096a1a78","line":180,"in_reply_to":"7d6a9876_9f9b36e6","updated":"2024-04-02 03:47:14.000000000","message":"All these todoes are addreesed on the follow-up patch:\nhttps://review.opendev.org/c/openstack/neutron/+/888097/","commit_id":"4d31e6afecc69503b64d24d767dcac03bd5ac180"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"203d2d4007ba82d44544fa5b5fdf943584c763f7","unresolved":true,"context_lines":[{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        self.provider_vlan_id \u003d cfg.CONF.METADATA.provider_vlan_id"},{"line_number":179,"context_line":"        self.provider_cidr \u003d cfg.CONF.METADATA.provider_cidr"},{"line_number":180,"context_line":"        # TODO(liuyulong): init related flows"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        self.provider_gateway_ip \u003d str(netaddr.IPAddress("},{"line_number":183,"context_line":"            netaddr.IPNetwork(cfg.CONF.METADATA.provider_cidr).first + 1))"}],"source_content_type":"text/x-python","patch_set":13,"id":"1ebe2114_274bdd37","line":180,"in_reply_to":"e7c2dc37_096a1a78","updated":"2025-01-02 14:08:51.000000000","message":"+1, thanks","commit_id":"4d31e6afecc69503b64d24d767dcac03bd5ac180"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"607d3de30c57c100f344af4bb07817d4493ddfad","unresolved":true,"context_lines":[{"line_number":52,"context_line":"                \"metadata path, error: %(msg)s\")"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"class MetadataPathExtensionPortInfoAPI():"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def __init__(self, cache_api):"},{"line_number":58,"context_line":"        self.cache_api \u003d cache_api"}],"source_content_type":"text/x-python","patch_set":18,"id":"d3f94a5a_f15fd945","line":55,"range":{"start_line":55,"start_character":6,"end_line":55,"end_character":38},"updated":"2024-11-06 22:24:22.000000000","message":"This can just be:\n\nMetadataPathExtensionPortInfoAPI:\n\ni.e. no parens","commit_id":"4479c058d213dc3febf8d47120961a9856f485c6"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"c6df00ada8a62edcb6a6015e9afa3442a48d31cf","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                \"metadata path, error: %(msg)s\")"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"class MetadataPathExtensionPortInfoAPI():"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def __init__(self, cache_api):"},{"line_number":58,"context_line":"        self.cache_api \u003d cache_api"}],"source_content_type":"text/x-python","patch_set":18,"id":"859d2a87_0ef22e35","line":55,"range":{"start_line":55,"start_character":6,"end_line":55,"end_character":38},"in_reply_to":"d3f94a5a_f15fd945","updated":"2024-11-07 01:16:28.000000000","message":"Done","commit_id":"4479c058d213dc3febf8d47120961a9856f485c6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"a88070dcb2265d81d46eaff5b0a43d45bfc3bd4e","unresolved":true,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        if (not provider_ip or netaddr.IPNetwork(provider_ip) not in"},{"line_number":113,"context_line":"                netaddr.IPNetwork(cfg.CONF.METADATA.provider_cidr)):"},{"line_number":114,"context_line":"            meta_ip_addr \u003d self._get_one_ip()"},{"line_number":115,"context_line":"            self.allocated_ips.add(meta_ip_addr)"},{"line_number":116,"context_line":"            info[\"provider_ip\"] \u003d meta_ip_addr"},{"line_number":117,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":23,"id":"aa47e445_728b1ea4","line":114,"updated":"2025-02-04 22:29:13.000000000","message":"nit: this could have been:\n\nprovider_ip \u003d self._get_one_ip()\n\nand then the other two lines could just be the same as the else case.","commit_id":"6e7b61113e44e752375ba5f88054eb8739252092"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"675aa6595cadbe15518a1ed3946ab23cd417238c","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        if (not provider_ip or netaddr.IPNetwork(provider_ip) not in"},{"line_number":113,"context_line":"                netaddr.IPNetwork(cfg.CONF.METADATA.provider_cidr)):"},{"line_number":114,"context_line":"            meta_ip_addr \u003d self._get_one_ip()"},{"line_number":115,"context_line":"            self.allocated_ips.add(meta_ip_addr)"},{"line_number":116,"context_line":"            info[\"provider_ip\"] \u003d meta_ip_addr"},{"line_number":117,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":23,"id":"fcd8b306_be37de7a","line":114,"in_reply_to":"aa47e445_728b1ea4","updated":"2025-02-06 02:43:56.000000000","message":"Done","commit_id":"6e7b61113e44e752375ba5f88054eb8739252092"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"a88070dcb2265d81d46eaff5b0a43d45bfc3bd4e","unresolved":true,"context_lines":[{"line_number":119,"context_line":"            info[\"provider_ip\"] \u003d provider_ip"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        if not provider_mac:"},{"line_number":122,"context_line":"            meta_mac_address \u003d self._get_one_mac()"},{"line_number":123,"context_line":"            self.allocated_macs.add(meta_mac_address)"},{"line_number":124,"context_line":"            info[\"provider_port_mac\"] \u003d meta_mac_address"},{"line_number":125,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":23,"id":"fd32a6c5_785a55b4","line":122,"updated":"2025-02-04 22:29:13.000000000","message":"nit: this could have been:\n\n  provider_mac \u003d self._get_one_mac()\n\nand then the other two lines could just be the same as the else case.","commit_id":"6e7b61113e44e752375ba5f88054eb8739252092"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"675aa6595cadbe15518a1ed3946ab23cd417238c","unresolved":false,"context_lines":[{"line_number":119,"context_line":"            info[\"provider_ip\"] \u003d provider_ip"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        if not provider_mac:"},{"line_number":122,"context_line":"            meta_mac_address \u003d self._get_one_mac()"},{"line_number":123,"context_line":"            self.allocated_macs.add(meta_mac_address)"},{"line_number":124,"context_line":"            info[\"provider_port_mac\"] \u003d meta_mac_address"},{"line_number":125,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":23,"id":"9639f567_ea79ae6d","line":122,"in_reply_to":"fd32a6c5_785a55b4","updated":"2025-02-06 02:43:56.000000000","message":"Done","commit_id":"6e7b61113e44e752375ba5f88054eb8739252092"}],"neutron/conf/plugins/ml2/drivers/ovs_conf.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"607d3de30c57c100f344af4bb07817d4493ddfad","unresolved":true,"context_lines":[{"line_number":266,"context_line":"    cfg.IntOpt(\u0027host_proxy_listen_port\u0027, default\u003d80,"},{"line_number":267,"context_line":"               help\u003d_(\"Host haproxy listen port for metadata path. This \""},{"line_number":268,"context_line":"                      \"is transparent for metadata traffic, VMs still try to\""},{"line_number":269,"context_line":"                      \"access the 169.254.169.254:80 for metadata. But in \""},{"line_number":270,"context_line":"                      \"the metadata datapath flow pipeline, the destination \""},{"line_number":271,"context_line":"                      \"TCP port 80 will be changed the value of \""},{"line_number":272,"context_line":"                      \"`host_proxy_listen_port` which the host haproxy \""}],"source_content_type":"text/x-python","patch_set":18,"id":"4eb6cc9b_a1d04036","line":269,"range":{"start_line":269,"start_character":23,"end_line":269,"end_character":33},"updated":"2024-11-06 22:24:22.000000000","message":"s/access (remove \u0027the\u0027)","commit_id":"4479c058d213dc3febf8d47120961a9856f485c6"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"c6df00ada8a62edcb6a6015e9afa3442a48d31cf","unresolved":false,"context_lines":[{"line_number":266,"context_line":"    cfg.IntOpt(\u0027host_proxy_listen_port\u0027, default\u003d80,"},{"line_number":267,"context_line":"               help\u003d_(\"Host haproxy listen port for metadata path. This \""},{"line_number":268,"context_line":"                      \"is transparent for metadata traffic, VMs still try to\""},{"line_number":269,"context_line":"                      \"access the 169.254.169.254:80 for metadata. But in \""},{"line_number":270,"context_line":"                      \"the metadata datapath flow pipeline, the destination \""},{"line_number":271,"context_line":"                      \"TCP port 80 will be changed the value of \""},{"line_number":272,"context_line":"                      \"`host_proxy_listen_port` which the host haproxy \""}],"source_content_type":"text/x-python","patch_set":18,"id":"8a4d87e5_c54ee31e","line":269,"range":{"start_line":269,"start_character":23,"end_line":269,"end_character":33},"in_reply_to":"4eb6cc9b_a1d04036","updated":"2024-11-07 01:16:28.000000000","message":"Done","commit_id":"4479c058d213dc3febf8d47120961a9856f485c6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"607d3de30c57c100f344af4bb07817d4493ddfad","unresolved":true,"context_lines":[{"line_number":268,"context_line":"                      \"is transparent for metadata traffic, VMs still try to\""},{"line_number":269,"context_line":"                      \"access the 169.254.169.254:80 for metadata. But in \""},{"line_number":270,"context_line":"                      \"the metadata datapath flow pipeline, the destination \""},{"line_number":271,"context_line":"                      \"TCP port 80 will be changed the value of \""},{"line_number":272,"context_line":"                      \"`host_proxy_listen_port` which the host haproxy \""},{"line_number":273,"context_line":"                      \"listen on. And for traffic return, change the TCP \""},{"line_number":274,"context_line":"                      \"source port to 80.\")),"}],"source_content_type":"text/x-python","patch_set":18,"id":"8afa399d_cfa515d6","line":271,"range":{"start_line":271,"start_character":43,"end_line":271,"end_character":54},"updated":"2024-11-06 22:24:22.000000000","message":"s/changed to the","commit_id":"4479c058d213dc3febf8d47120961a9856f485c6"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"c6df00ada8a62edcb6a6015e9afa3442a48d31cf","unresolved":false,"context_lines":[{"line_number":268,"context_line":"                      \"is transparent for metadata traffic, VMs still try to\""},{"line_number":269,"context_line":"                      \"access the 169.254.169.254:80 for metadata. But in \""},{"line_number":270,"context_line":"                      \"the metadata datapath flow pipeline, the destination \""},{"line_number":271,"context_line":"                      \"TCP port 80 will be changed the value of \""},{"line_number":272,"context_line":"                      \"`host_proxy_listen_port` which the host haproxy \""},{"line_number":273,"context_line":"                      \"listen on. And for traffic return, change the TCP \""},{"line_number":274,"context_line":"                      \"source port to 80.\")),"}],"source_content_type":"text/x-python","patch_set":18,"id":"5207cf54_62cae910","line":271,"range":{"start_line":271,"start_character":43,"end_line":271,"end_character":54},"in_reply_to":"8afa399d_cfa515d6","updated":"2024-11-07 01:16:28.000000000","message":"Done","commit_id":"4479c058d213dc3febf8d47120961a9856f485c6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"607d3de30c57c100f344af4bb07817d4493ddfad","unresolved":true,"context_lines":[{"line_number":270,"context_line":"                      \"the metadata datapath flow pipeline, the destination \""},{"line_number":271,"context_line":"                      \"TCP port 80 will be changed the value of \""},{"line_number":272,"context_line":"                      \"`host_proxy_listen_port` which the host haproxy \""},{"line_number":273,"context_line":"                      \"listen on. And for traffic return, change the TCP \""},{"line_number":274,"context_line":"                      \"source port to 80.\")),"},{"line_number":275,"context_line":"]"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"265eeca5_d4ae440b","line":274,"range":{"start_line":273,"start_character":23,"end_line":274,"end_character":40},"updated":"2024-11-06 22:24:22.000000000","message":"s/will listen on. For return traffic, the TCP source port will be changed back to 80","commit_id":"4479c058d213dc3febf8d47120961a9856f485c6"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"c6df00ada8a62edcb6a6015e9afa3442a48d31cf","unresolved":false,"context_lines":[{"line_number":270,"context_line":"                      \"the metadata datapath flow pipeline, the destination \""},{"line_number":271,"context_line":"                      \"TCP port 80 will be changed the value of \""},{"line_number":272,"context_line":"                      \"`host_proxy_listen_port` which the host haproxy \""},{"line_number":273,"context_line":"                      \"listen on. And for traffic return, change the TCP \""},{"line_number":274,"context_line":"                      \"source port to 80.\")),"},{"line_number":275,"context_line":"]"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"dcbf399a_a0e8628d","line":274,"range":{"start_line":273,"start_character":23,"end_line":274,"end_character":40},"in_reply_to":"265eeca5_d4ae440b","updated":"2024-11-07 01:16:28.000000000","message":"Done","commit_id":"4479c058d213dc3febf8d47120961a9856f485c6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"a88070dcb2265d81d46eaff5b0a43d45bfc3bd4e","unresolved":true,"context_lines":[{"line_number":265,"context_line":"                      \"will use for metadata traffic.\")),"},{"line_number":266,"context_line":"    cfg.IntOpt(\u0027host_proxy_listen_port\u0027, default\u003d80,"},{"line_number":267,"context_line":"               help\u003d_(\"Host haproxy listen port for metadata path. This \""},{"line_number":268,"context_line":"                      \"is transparent for metadata traffic, VMs still try to\""},{"line_number":269,"context_line":"                      \"access 169.254.169.254:80 for metadata. But in \""},{"line_number":270,"context_line":"                      \"the metadata datapath flow pipeline, the destination \""},{"line_number":271,"context_line":"                      \"TCP port 80 will be changed to the value of \""}],"source_content_type":"text/x-python","patch_set":23,"id":"a9949b01_8d77e276","line":268,"range":{"start_line":268,"start_character":74,"end_line":268,"end_character":76},"updated":"2025-02-04 22:29:13.000000000","message":"missing trailing space","commit_id":"6e7b61113e44e752375ba5f88054eb8739252092"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"675aa6595cadbe15518a1ed3946ab23cd417238c","unresolved":false,"context_lines":[{"line_number":265,"context_line":"                      \"will use for metadata traffic.\")),"},{"line_number":266,"context_line":"    cfg.IntOpt(\u0027host_proxy_listen_port\u0027, default\u003d80,"},{"line_number":267,"context_line":"               help\u003d_(\"Host haproxy listen port for metadata path. This \""},{"line_number":268,"context_line":"                      \"is transparent for metadata traffic, VMs still try to\""},{"line_number":269,"context_line":"                      \"access 169.254.169.254:80 for metadata. But in \""},{"line_number":270,"context_line":"                      \"the metadata datapath flow pipeline, the destination \""},{"line_number":271,"context_line":"                      \"TCP port 80 will be changed to the value of \""}],"source_content_type":"text/x-python","patch_set":23,"id":"69fbb7ca_625c55af","line":268,"range":{"start_line":268,"start_character":74,"end_line":268,"end_character":76},"in_reply_to":"a9949b01_8d77e276","updated":"2025-02-06 02:43:56.000000000","message":"Done","commit_id":"6e7b61113e44e752375ba5f88054eb8739252092"}],"neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"1a36707083945e05fa72978fb02739e0502e746d","unresolved":true,"context_lines":[{"line_number":235,"context_line":"            self.host)"},{"line_number":236,"context_line":"        self._validate_rp_pkt_processing_cfg()"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"        br_set \u003d set(self.bridge_mappings.values())"},{"line_number":239,"context_line":"        n_utils.validate_rp_bandwidth("},{"line_number":240,"context_line":"            self.rp_bandwidths, br_set,"},{"line_number":241,"context_line":"            tunnelled_network_rp_name\u003dself.conf.ml2.tunnelled_network_rp_name)"}],"source_content_type":"text/x-python","patch_set":4,"id":"a9eb53bb_cdc318ef","line":238,"updated":"2023-05-03 09:37:39.000000000","message":"Here, br-meta will be considered, is that an expected behavior? I guess that should not be an issue, but prefer to double check.","commit_id":"1ad817ab21aafa3d4cc8c5a5f136edccd21d2fb9"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"4bc810ea2d3d734ebea1db04aab7b1b2ec6f37ee","unresolved":true,"context_lines":[{"line_number":235,"context_line":"            self.host)"},{"line_number":236,"context_line":"        self._validate_rp_pkt_processing_cfg()"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"        br_set \u003d set(self.bridge_mappings.values())"},{"line_number":239,"context_line":"        n_utils.validate_rp_bandwidth("},{"line_number":240,"context_line":"            self.rp_bandwidths, br_set,"},{"line_number":241,"context_line":"            tunnelled_network_rp_name\u003dself.conf.ml2.tunnelled_network_rp_name)"}],"source_content_type":"text/x-python","patch_set":4,"id":"38cd4420_817e591d","line":238,"in_reply_to":"a9eb53bb_cdc318ef","updated":"2023-05-08 01:13:11.000000000","message":"I\u0027m not sure the behavior of this and the following validation. Maybe skipping it is the simple way.","commit_id":"1ad817ab21aafa3d4cc8c5a5f136edccd21d2fb9"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"1a36707083945e05fa72978fb02739e0502e746d","unresolved":true,"context_lines":[{"line_number":263,"context_line":"        self.phys_ofports \u003d {}"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        if (self.enable_openflow_metadata and"},{"line_number":266,"context_line":"                \u0027meta\u0027 not in self.bridge_mappings):"},{"line_number":267,"context_line":"            self.bridge_mappings[\u0027meta\u0027] \u003d \u0027br-meta\u0027"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        self.setup_physical_bridges(self.bridge_mappings)"}],"source_content_type":"text/x-python","patch_set":4,"id":"6a622c57_30c109f4","line":266,"updated":"2023-05-03 09:37:39.000000000","message":"Why are you defining this silently here, the bridge mapping should be defined by operator. I think we should just stop the agent to start if enable_openflow_metadata is activated and bridge_mappings not well configured, no?","commit_id":"1ad817ab21aafa3d4cc8c5a5f136edccd21d2fb9"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"4bc810ea2d3d734ebea1db04aab7b1b2ec6f37ee","unresolved":true,"context_lines":[{"line_number":263,"context_line":"        self.phys_ofports \u003d {}"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        if (self.enable_openflow_metadata and"},{"line_number":266,"context_line":"                \u0027meta\u0027 not in self.bridge_mappings):"},{"line_number":267,"context_line":"            self.bridge_mappings[\u0027meta\u0027] \u003d \u0027br-meta\u0027"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        self.setup_physical_bridges(self.bridge_mappings)"}],"source_content_type":"text/x-python","patch_set":4,"id":"f6f20608_0c7f8256","line":266,"in_reply_to":"6a622c57_30c109f4","updated":"2023-05-08 01:13:11.000000000","message":"You may consider this is a one implied configuration. Operators just set one agent extension is enough. And for some complex cloud, the bridge mapping may be too long or large for users to add more entries. It will be not human readable.","commit_id":"1ad817ab21aafa3d4cc8c5a5f136edccd21d2fb9"}],"neutron/tests/unit/agent/l2/extensions/metadata/test_metadata_path.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b95589108ff647e4f5aa8853c2a172bddbc7f850","unresolved":true,"context_lines":[{"line_number":119,"context_line":"                self.port_provider_ip,"},{"line_number":120,"context_line":"                self.port_provider_mac)"},{"line_number":121,"context_line":"            h_config.assert_called_once_with("},{"line_number":122,"context_line":"                list(self.meta_ext.instance_infos.values()))"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def test_delete_port(self):"},{"line_number":125,"context_line":"        port_mac_address \u003d \"aa:aa:aa:aa:aa:aa\""}],"source_content_type":"text/x-python","patch_set":11,"id":"59887f5b_efca6454","line":122,"updated":"2023-09-18 19:50:09.000000000","message":"There should be tests for the new exceptions you added, at least for the \"no more IPs\" case.","commit_id":"c4a968505c86d20658acf283855d65a88edd3dcb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"c042f7df52db090c72fa7b5489fd6a9ce2921ba6","unresolved":false,"context_lines":[{"line_number":119,"context_line":"                self.port_provider_ip,"},{"line_number":120,"context_line":"                self.port_provider_mac)"},{"line_number":121,"context_line":"            h_config.assert_called_once_with("},{"line_number":122,"context_line":"                list(self.meta_ext.instance_infos.values()))"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def test_delete_port(self):"},{"line_number":125,"context_line":"        port_mac_address \u003d \"aa:aa:aa:aa:aa:aa\""}],"source_content_type":"text/x-python","patch_set":11,"id":"c78e1881_d6a66d26","line":122,"in_reply_to":"59887f5b_efca6454","updated":"2023-09-20 09:08:23.000000000","message":"Done","commit_id":"c4a968505c86d20658acf283855d65a88edd3dcb"}],"releasenotes/notes/distributed-metadata-data-path-79d5c1295977379f.yaml":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"107b76fc4c9cf4d66b3dfa0b697f9bdfb2430b78","unresolved":true,"context_lines":[{"line_number":7,"context_line":"    router or DHCP namespaces."},{"line_number":8,"context_line":"    For new running host, users need to practically create the OVS bridge"},{"line_number":9,"context_line":"    named ``br-meta``. The OVS-agent will implicitly add an entry"},{"line_number":10,"context_line":"    ``meta:br-meta`` to the list of ``bridge_mappings``."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"51a9909f_ad05a798","line":10,"updated":"2023-05-08 17:08:01.000000000","message":"Can you just mention the new config options here as well? Don\u0027t have to define what they are I think.","commit_id":"d97073b8c6859fb1d9afb2cb099e5e7474ccf86f"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"2db04c490bec16cda9e99a7ed9e8f540bb88145a","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    router or DHCP namespaces."},{"line_number":8,"context_line":"    For new running host, users need to practically create the OVS bridge"},{"line_number":9,"context_line":"    named ``br-meta``. The OVS-agent will implicitly add an entry"},{"line_number":10,"context_line":"    ``meta:br-meta`` to the list of ``bridge_mappings``."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"52411928_6be343f2","line":10,"in_reply_to":"51a9909f_ad05a798","updated":"2023-09-04 01:11:39.000000000","message":"Done","commit_id":"d97073b8c6859fb1d9afb2cb099e5e7474ccf86f"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b95589108ff647e4f5aa8853c2a172bddbc7f850","unresolved":true,"context_lines":[{"line_number":5,"context_line":"    a distribtued approach for virtual machines to retrieve metadata in"},{"line_number":6,"context_line":"    each running host without traditional metadata-agent and its dependent"},{"line_number":7,"context_line":"    router or DHCP namespaces."},{"line_number":8,"context_line":"    For new running host, users need to practically create the OVS bridge"},{"line_number":9,"context_line":"    named ``br-meta``. The OVS-agent will implicitly add an entry"},{"line_number":10,"context_line":"    ``meta:br-meta`` to the list of ``bridge_mappings``."},{"line_number":11,"context_line":"    New config options ``provider_cidr``, ``provider_vlan_id`` and"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"1a51a157_71fda1b2","line":8,"range":{"start_line":8,"start_character":4,"end_line":8,"end_character":58},"updated":"2023-09-18 19:50:09.000000000","message":"s/For a new host, users need to create","commit_id":"c4a968505c86d20658acf283855d65a88edd3dcb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"c042f7df52db090c72fa7b5489fd6a9ce2921ba6","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    a distribtued approach for virtual machines to retrieve metadata in"},{"line_number":6,"context_line":"    each running host without traditional metadata-agent and its dependent"},{"line_number":7,"context_line":"    router or DHCP namespaces."},{"line_number":8,"context_line":"    For new running host, users need to practically create the OVS bridge"},{"line_number":9,"context_line":"    named ``br-meta``. The OVS-agent will implicitly add an entry"},{"line_number":10,"context_line":"    ``meta:br-meta`` to the list of ``bridge_mappings``."},{"line_number":11,"context_line":"    New config options ``provider_cidr``, ``provider_vlan_id`` and"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"86fb7527_4ee3508b","line":8,"range":{"start_line":8,"start_character":4,"end_line":8,"end_character":58},"in_reply_to":"1a51a157_71fda1b2","updated":"2023-09-20 09:08:23.000000000","message":"Done","commit_id":"c4a968505c86d20658acf283855d65a88edd3dcb"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"203d2d4007ba82d44544fa5b5fdf943584c763f7","unresolved":true,"context_lines":[{"line_number":9,"context_line":"    named ``br-meta``. The OVS-agent will implicitly add an entry"},{"line_number":10,"context_line":"    ``meta:br-meta`` to the list of ``bridge_mappings``."},{"line_number":11,"context_line":"    New config options ``provider_cidr``, ``provider_vlan_id`` and"},{"line_number":12,"context_line":"    ``provider_base_mac``  are added to openvswitch agent ``[METADATA]``"},{"line_number":13,"context_line":"    section."}],"source_content_type":"text/x-yaml","patch_set":22,"id":"f0380105_3ddd3d72","line":12,"updated":"2025-01-02 14:08:51.000000000","message":"and ``host_proxy_listen_port``","commit_id":"a1e163d301ce45aa0cba4cc3d0e1c63deea5c3dd"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"a88070dcb2265d81d46eaff5b0a43d45bfc3bd4e","unresolved":true,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A new openvswitch agent extension ``metadata_path`` was added to implement"},{"line_number":5,"context_line":"    a distribtued approach for virtual machines to retrieve metadata in"},{"line_number":6,"context_line":"    each running host without traditional metadata-agent and its dependent"},{"line_number":7,"context_line":"    router or DHCP namespaces."},{"line_number":8,"context_line":"    For a new host, users need to create the OVS bridge"}],"source_content_type":"text/x-yaml","patch_set":23,"id":"53c3d78a_ea0da82d","line":5,"range":{"start_line":5,"start_character":31,"end_line":5,"end_character":47},"updated":"2025-02-04 22:29:13.000000000","message":"nit: s/instances","commit_id":"6e7b61113e44e752375ba5f88054eb8739252092"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"a88070dcb2265d81d46eaff5b0a43d45bfc3bd4e","unresolved":true,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A new openvswitch agent extension ``metadata_path`` was added to implement"},{"line_number":5,"context_line":"    a distribtued approach for virtual machines to retrieve metadata in"},{"line_number":6,"context_line":"    each running host without traditional metadata-agent and its dependent"},{"line_number":7,"context_line":"    router or DHCP namespaces."},{"line_number":8,"context_line":"    For a new host, users need to create the OVS bridge"}],"source_content_type":"text/x-yaml","patch_set":23,"id":"d9630dcb_e4f8a836","line":5,"range":{"start_line":5,"start_character":6,"end_line":5,"end_character":17},"updated":"2025-02-04 22:29:13.000000000","message":"s/distributed","commit_id":"6e7b61113e44e752375ba5f88054eb8739252092"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"675aa6595cadbe15518a1ed3946ab23cd417238c","unresolved":true,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A new openvswitch agent extension ``metadata_path`` was added to implement"},{"line_number":5,"context_line":"    a distribtued approach for virtual machines to retrieve metadata in"},{"line_number":6,"context_line":"    each running host without traditional metadata-agent and its dependent"},{"line_number":7,"context_line":"    router or DHCP namespaces."},{"line_number":8,"context_line":"    For a new host, users need to create the OVS bridge"}],"source_content_type":"text/x-yaml","patch_set":23,"id":"a98a9594_425cb3dd","line":5,"range":{"start_line":5,"start_character":31,"end_line":5,"end_character":47},"in_reply_to":"53c3d78a_ea0da82d","updated":"2025-02-06 02:43:56.000000000","message":"Hmm, I think \"virtual machines\" are more appropriate here. Whether you are a senior person or a newcomer to openstack, you can clearly understand what it is. \"Instances\" are more like a special name in OpenStack scope.","commit_id":"6e7b61113e44e752375ba5f88054eb8739252092"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"675aa6595cadbe15518a1ed3946ab23cd417238c","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A new openvswitch agent extension ``metadata_path`` was added to implement"},{"line_number":5,"context_line":"    a distribtued approach for virtual machines to retrieve metadata in"},{"line_number":6,"context_line":"    each running host without traditional metadata-agent and its dependent"},{"line_number":7,"context_line":"    router or DHCP namespaces."},{"line_number":8,"context_line":"    For a new host, users need to create the OVS bridge"}],"source_content_type":"text/x-yaml","patch_set":23,"id":"ff990ba4_43740713","line":5,"range":{"start_line":5,"start_character":6,"end_line":5,"end_character":17},"in_reply_to":"d9630dcb_e4f8a836","updated":"2025-02-06 02:43:56.000000000","message":"Done","commit_id":"6e7b61113e44e752375ba5f88054eb8739252092"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"a88070dcb2265d81d46eaff5b0a43d45bfc3bd4e","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A new openvswitch agent extension ``metadata_path`` was added to implement"},{"line_number":5,"context_line":"    a distribtued approach for virtual machines to retrieve metadata in"},{"line_number":6,"context_line":"    each running host without traditional metadata-agent and its dependent"},{"line_number":7,"context_line":"    router or DHCP namespaces."},{"line_number":8,"context_line":"    For a new host, users need to create the OVS bridge"},{"line_number":9,"context_line":"    named ``br-meta``. The OVS-agent will implicitly add an entry"}],"source_content_type":"text/x-yaml","patch_set":23,"id":"cb311796_f5697d90","line":6,"range":{"start_line":6,"start_character":22,"end_line":6,"end_character":29},"updated":"2025-02-04 22:29:13.000000000","message":"s/without a","commit_id":"6e7b61113e44e752375ba5f88054eb8739252092"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"675aa6595cadbe15518a1ed3946ab23cd417238c","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A new openvswitch agent extension ``metadata_path`` was added to implement"},{"line_number":5,"context_line":"    a distribtued approach for virtual machines to retrieve metadata in"},{"line_number":6,"context_line":"    each running host without traditional metadata-agent and its dependent"},{"line_number":7,"context_line":"    router or DHCP namespaces."},{"line_number":8,"context_line":"    For a new host, users need to create the OVS bridge"},{"line_number":9,"context_line":"    named ``br-meta``. The OVS-agent will implicitly add an entry"}],"source_content_type":"text/x-yaml","patch_set":23,"id":"2ebe1546_e1c9eebf","line":6,"range":{"start_line":6,"start_character":22,"end_line":6,"end_character":29},"in_reply_to":"cb311796_f5697d90","updated":"2025-02-06 02:43:56.000000000","message":"Done","commit_id":"6e7b61113e44e752375ba5f88054eb8739252092"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"a88070dcb2265d81d46eaff5b0a43d45bfc3bd4e","unresolved":true,"context_lines":[{"line_number":4,"context_line":"    A new openvswitch agent extension ``metadata_path`` was added to implement"},{"line_number":5,"context_line":"    a distribtued approach for virtual machines to retrieve metadata in"},{"line_number":6,"context_line":"    each running host without traditional metadata-agent and its dependent"},{"line_number":7,"context_line":"    router or DHCP namespaces."},{"line_number":8,"context_line":"    For a new host, users need to create the OVS bridge"},{"line_number":9,"context_line":"    named ``br-meta``. The OVS-agent will implicitly add an entry"},{"line_number":10,"context_line":"    ``meta:br-meta`` to the list of ``bridge_mappings``."}],"source_content_type":"text/x-yaml","patch_set":23,"id":"47238ca8_d55a91aa","line":7,"range":{"start_line":7,"start_character":19,"end_line":7,"end_character":29},"updated":"2025-02-04 22:29:13.000000000","message":"nit: s/namespace","commit_id":"6e7b61113e44e752375ba5f88054eb8739252092"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"675aa6595cadbe15518a1ed3946ab23cd417238c","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    A new openvswitch agent extension ``metadata_path`` was added to implement"},{"line_number":5,"context_line":"    a distribtued approach for virtual machines to retrieve metadata in"},{"line_number":6,"context_line":"    each running host without traditional metadata-agent and its dependent"},{"line_number":7,"context_line":"    router or DHCP namespaces."},{"line_number":8,"context_line":"    For a new host, users need to create the OVS bridge"},{"line_number":9,"context_line":"    named ``br-meta``. The OVS-agent will implicitly add an entry"},{"line_number":10,"context_line":"    ``meta:br-meta`` to the list of ``bridge_mappings``."}],"source_content_type":"text/x-yaml","patch_set":23,"id":"49936d4c_2df1f876","line":7,"range":{"start_line":7,"start_character":19,"end_line":7,"end_character":29},"in_reply_to":"47238ca8_d55a91aa","updated":"2025-02-06 02:43:56.000000000","message":"Done","commit_id":"6e7b61113e44e752375ba5f88054eb8739252092"}]}
