)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"38603d058217180df1ac536d013962a96c9ec382","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"0938db1c_9a0b670b","updated":"2022-04-27 07:44:50.000000000","message":"Current Patch Set doesn\u0027t handle the Project Filter, Please fix it.\n\nIf I Select Project filter for backup Panel under admin dashboard, It doesn\u0027t works for now.","commit_id":"ea957072cc9b895ba893481829411b7795ecfc0d"},{"author":{"_account_id":29260,"name":"Jesper Schmitz Mouridsen","email":"jesper@schmitz.computer","username":"jsmdk"},"change_message_id":"4f2df67b2f0f3b246517c8000f00cc93846be852","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":14,"id":"5eb02280_8abad002","updated":"2022-05-20 16:14:12.000000000","message":"Hi, perhaps you can add search_opts in some more places,like I do in the conflicting change here https://review.opendev.org/c/openstack/horizon/+/842696/1/openstack_dashboard/api/cinder.py\nThen I can revert the filter part of my change and only add the incremental option in create backup form. Otherwise I can merge when this is committed, but the former might be easier...","commit_id":"bb7829eaefff798f7cb376f63d8e2495740e759a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"bf7d0517f07bf79465a255190b110965693612c3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"b6164a52_95086d48","updated":"2022-05-24 12:20:28.000000000","message":"I have a question inline. Perhaps this is just because I have not checked the cinder API behavior in detail, but any feedbacks are really appreciated.","commit_id":"bb7829eaefff798f7cb376f63d8e2495740e759a"},{"author":{"_account_id":1004,"name":"Mohammed Naser","email":"mnaser@vexxhost.com","username":"mnaser"},"change_message_id":"855f86be3ae5ee26c03d00869bfc6dc13bc480b4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"d67ff670_74e0d265","updated":"2022-05-13 19:23:37.000000000","message":"Thanks for the review Vishal!","commit_id":"bb7829eaefff798f7cb376f63d8e2495740e759a"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"786eb683805373d2ad9d614f89852b27244fa274","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"c9e60048_c4f894a3","updated":"2022-05-13 08:46:36.000000000","message":"Thanks, for updating.\nLGTM, tested with devstack.","commit_id":"bb7829eaefff798f7cb376f63d8e2495740e759a"},{"author":{"_account_id":1004,"name":"Mohammed Naser","email":"mnaser@vexxhost.com","username":"mnaser"},"change_message_id":"029b66404350c09a08b3d37ca623b7447a2e48c1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"6b3e7eb3_5560c2f4","updated":"2022-04-29 20:15:49.000000000","message":"nice","commit_id":"bb7829eaefff798f7cb376f63d8e2495740e759a"},{"author":{"_account_id":29260,"name":"Jesper Schmitz Mouridsen","email":"jesper@schmitz.computer","username":"jsmdk"},"change_message_id":"f5cce3dd86ce9ac2f7944abe1fd7621009d58429","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":14,"id":"6e5ce800_b2dbe135","in_reply_to":"5eb02280_8abad002","updated":"2022-05-23 12:21:30.000000000","message":"Never mind, I resolved the conflict. Hope this will get merged soon.","commit_id":"bb7829eaefff798f7cb376f63d8e2495740e759a"},{"author":{"_account_id":31746,"name":"Oleksandr Kozachenko","email":"okozachenko1203@gmail.com","username":"okozachenko"},"change_message_id":"cd56803d748464e50a9efa6d47a945147733a792","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"588561cc_5e784dcd","in_reply_to":"6e5ce800_b2dbe135","updated":"2022-06-24 13:49:41.000000000","message":"Ack","commit_id":"bb7829eaefff798f7cb376f63d8e2495740e759a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"7975d72e48cd9a7e540e8f75e2174bffa7d4d9ef","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"d3cf2113_6a45cdb0","updated":"2022-06-24 15:14:55.000000000","message":"What is our next step?\n\nDo we want to land this as is? If so, some filters might not work depending on cinder configuration.\nIdeally, it is better to check what filters are available depending on cinder API result.\n\nI would like to know our next step before voting.","commit_id":"da40e34af9ac8ba5c5da2f95cbc9dbdc93453f75"},{"author":{"_account_id":31746,"name":"Oleksandr Kozachenko","email":"okozachenko1203@gmail.com","username":"okozachenko"},"change_message_id":"274fac0bb76ab8b62a2a9d5ca37639b3ffced919","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"1aaeb05e_3885c5f8","in_reply_to":"d3cf2113_6a45cdb0","updated":"2022-06-30 15:32:28.000000000","message":"https://opendev.org/openstack/horizon/src/branch/master/openstack_dashboard/api/cinder.py#L601\nI can see that it already uses client 3.45 for backup list.","commit_id":"da40e34af9ac8ba5c5da2f95cbc9dbdc93453f75"},{"author":{"_account_id":31746,"name":"Oleksandr Kozachenko","email":"okozachenko1203@gmail.com","username":"okozachenko"},"change_message_id":"ba17c1f1ff0f530d54a89a4a7c119a6001c4f8b1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"16ad062f_18553cef","updated":"2022-07-07 10:20:08.000000000","message":"Vishal Manchanda: Can you review again?","commit_id":"145722518f79791e2ee29ccef639ddfaf3f32ddb"},{"author":{"_account_id":31746,"name":"Oleksandr Kozachenko","email":"okozachenko1203@gmail.com","username":"okozachenko"},"change_message_id":"900dd6c6b3c0fac54bbaba3f95c27e134fde8ba4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"339981f5_88d04050","updated":"2022-08-31 10:08:29.000000000","message":"recheck","commit_id":"3020cf5e5c9ff00b2c9c07fa2984980fe21321a9"}],"openstack_dashboard/api/cinder.py":[{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"6ee007904bd52829c185d97ad323e0105c6c0fbf","unresolved":true,"context_lines":[{"line_number":596,"context_line":""},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"@profiler.trace"},{"line_number":599,"context_line":"def volume_backup_list_paged_with_page_menu(request, search_opts\u003dNone,"},{"line_number":600,"context_line":"                                            page_number\u003d1,"},{"line_number":601,"context_line":"                                            sort_dir\u003d\"desc\","},{"line_number":602,"context_line":"                                            all_tenants\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7dd595a7_36c3df79","line":599,"updated":"2021-06-04 21:32:07.000000000","message":"Why don\u0027t just use \"search_opts\u003d{}\"?","commit_id":"8c7020b49a34f4e81726a718bf14f6e66ad0f1ab"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"83e27eb515a78dca3c96760cc2d2ac42f08539e3","unresolved":true,"context_lines":[{"line_number":596,"context_line":""},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"@profiler.trace"},{"line_number":599,"context_line":"def volume_backup_list_paged_with_page_menu(request, search_opts\u003dNone,"},{"line_number":600,"context_line":"                                            page_number\u003d1,"},{"line_number":601,"context_line":"                                            sort_dir\u003d\"desc\","},{"line_number":602,"context_line":"                                            all_tenants\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":4,"id":"d592f0f4_25a3a9bc","line":599,"in_reply_to":"7dd595a7_36c3df79","updated":"2021-06-04 23:13:28.000000000","message":"Oops, please ignore :)","commit_id":"8c7020b49a34f4e81726a718bf14f6e66ad0f1ab"},{"author":{"_account_id":31746,"name":"Oleksandr Kozachenko","email":"okozachenko1203@gmail.com","username":"okozachenko"},"change_message_id":"86b54ca5cf629ba0a5e5e2780cd046b3f6d53081","unresolved":false,"context_lines":[{"line_number":596,"context_line":""},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"@profiler.trace"},{"line_number":599,"context_line":"def volume_backup_list_paged_with_page_menu(request, search_opts\u003dNone,"},{"line_number":600,"context_line":"                                            page_number\u003d1,"},{"line_number":601,"context_line":"                                            sort_dir\u003d\"desc\","},{"line_number":602,"context_line":"                                            all_tenants\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f3eced1_bda8b6f4","line":599,"in_reply_to":"d592f0f4_25a3a9bc","updated":"2022-04-19 08:59:32.000000000","message":"Done","commit_id":"8c7020b49a34f4e81726a718bf14f6e66ad0f1ab"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"38603d058217180df1ac536d013962a96c9ec382","unresolved":true,"context_lines":[{"line_number":608,"context_line":""},{"line_number":609,"context_line":"    offset \u003d (page_number - 1) * page_size"},{"line_number":610,"context_line":"    sort \u003d \u0027created_at:\u0027 + sort_dir"},{"line_number":611,"context_line":"    search_opts[\u0027all_tenants\u0027] \u003d all_tenants"},{"line_number":612,"context_line":"    search_opts[\u0027offset\u0027] \u003d offset"},{"line_number":613,"context_line":"    search_opts[\u0027with_count\u0027] \u003d True"},{"line_number":614,"context_line":"    bkps, count \u003d c_client.backups.list(limit\u003dpage_size,"},{"line_number":615,"context_line":"                                        sort\u003dsort,"},{"line_number":616,"context_line":"                                        search_opts\u003dsearch_opts)"}],"source_content_type":"text/x-python","patch_set":12,"id":"e99a7ea3_2aadd2b0","line":613,"range":{"start_line":611,"start_character":3,"end_line":613,"end_character":36},"updated":"2022-04-27 07:44:50.000000000","message":"why did you remove it from Line.611 and define it here separately?\nany reason for that? Otherwise, let\u0027s keep it as it is.","commit_id":"ea957072cc9b895ba893481829411b7795ecfc0d"},{"author":{"_account_id":31746,"name":"Oleksandr Kozachenko","email":"okozachenko1203@gmail.com","username":"okozachenko"},"change_message_id":"e12d235b545a5d8b9ac64dfb54cf828f29b771da","unresolved":false,"context_lines":[{"line_number":608,"context_line":""},{"line_number":609,"context_line":"    offset \u003d (page_number - 1) * page_size"},{"line_number":610,"context_line":"    sort \u003d \u0027created_at:\u0027 + sort_dir"},{"line_number":611,"context_line":"    search_opts[\u0027all_tenants\u0027] \u003d all_tenants"},{"line_number":612,"context_line":"    search_opts[\u0027offset\u0027] \u003d offset"},{"line_number":613,"context_line":"    search_opts[\u0027with_count\u0027] \u003d True"},{"line_number":614,"context_line":"    bkps, count \u003d c_client.backups.list(limit\u003dpage_size,"},{"line_number":615,"context_line":"                                        sort\u003dsort,"},{"line_number":616,"context_line":"                                        search_opts\u003dsearch_opts)"}],"source_content_type":"text/x-python","patch_set":12,"id":"d1c89df6_8852f16e","line":613,"range":{"start_line":611,"start_character":3,"end_line":613,"end_character":36},"in_reply_to":"e99a7ea3_2aadd2b0","updated":"2022-04-29 14:02:37.000000000","message":"search_opts is an input parameter.\nWe need to append these to the dict object, not replace.","commit_id":"ea957072cc9b895ba893481829411b7795ecfc0d"}],"openstack_dashboard/dashboards/admin/backups/tables.py":[{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"be45e71c4e7300263d0b6348fe1df139bb24768f","unresolved":true,"context_lines":[{"line_number":99,"context_line":"    filter_type \u003d \u0027server\u0027"},{"line_number":100,"context_line":"    filter_choices \u003d ("},{"line_number":101,"context_line":"        (\u0027name\u0027, _(\"Backup Name \u003d\"), True),"},{"line_number":102,"context_line":"        (\u0027size\u0027, _(\"Size \u003d\"), True),"},{"line_number":103,"context_line":"        (\u0027status\u0027, _(\"Status \u003d\"), True),"},{"line_number":104,"context_line":"        (\u0027volume_id\u0027, _(\"Volume ID \u003d\"), True,),"},{"line_number":105,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":4,"id":"e8ffb9c2_16dbf726","line":102,"updated":"2021-06-04 19:25:21.000000000","message":"Add Size Unit here i.e. GiB like below:\n-\u003e(\u0027size\u0027, _(\u0027Size(GiB) \u003d\u0027), True)","commit_id":"8c7020b49a34f4e81726a718bf14f6e66ad0f1ab"},{"author":{"_account_id":31746,"name":"Oleksandr Kozachenko","email":"okozachenko1203@gmail.com","username":"okozachenko"},"change_message_id":"86b54ca5cf629ba0a5e5e2780cd046b3f6d53081","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    filter_type \u003d \u0027server\u0027"},{"line_number":100,"context_line":"    filter_choices \u003d ("},{"line_number":101,"context_line":"        (\u0027name\u0027, _(\"Backup Name \u003d\"), True),"},{"line_number":102,"context_line":"        (\u0027size\u0027, _(\"Size \u003d\"), True),"},{"line_number":103,"context_line":"        (\u0027status\u0027, _(\"Status \u003d\"), True),"},{"line_number":104,"context_line":"        (\u0027volume_id\u0027, _(\"Volume ID \u003d\"), True,),"},{"line_number":105,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":4,"id":"32060bdc_faecaf2c","line":102,"in_reply_to":"e8ffb9c2_16dbf726","updated":"2022-04-19 08:59:32.000000000","message":"Done","commit_id":"8c7020b49a34f4e81726a718bf14f6e66ad0f1ab"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"dae06570d5542612d486e7ef41575c0e9840b48c","unresolved":true,"context_lines":[{"line_number":101,"context_line":"        (\u0027name\u0027, _(\"Backup Name \u003d\"), True),"},{"line_number":102,"context_line":"        (\u0027size\u0027, _(\"Size(GiB) \u003d\"), True),"},{"line_number":103,"context_line":"        (\u0027status\u0027, _(\"Status \u003d\"), True),"},{"line_number":104,"context_line":"        (\u0027volume_id\u0027, _(\"Volume ID \u003d\"), True,),"},{"line_number":105,"context_line":"    )"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"007641b6_25941ed5","line":104,"range":{"start_line":104,"start_character":10,"end_line":104,"end_character":19},"updated":"2021-06-09 14:35:44.000000000","message":"nit: Could you also add a filter for \u0027Volume Name\u0027 field.","commit_id":"6c3a82159267598230b7de2be2a7fdb6a68ed0c7"},{"author":{"_account_id":31746,"name":"Oleksandr Kozachenko","email":"okozachenko1203@gmail.com","username":"okozachenko"},"change_message_id":"86b54ca5cf629ba0a5e5e2780cd046b3f6d53081","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        (\u0027name\u0027, _(\"Backup Name \u003d\"), True),"},{"line_number":102,"context_line":"        (\u0027size\u0027, _(\"Size(GiB) \u003d\"), True),"},{"line_number":103,"context_line":"        (\u0027status\u0027, _(\"Status \u003d\"), True),"},{"line_number":104,"context_line":"        (\u0027volume_id\u0027, _(\"Volume ID \u003d\"), True,),"},{"line_number":105,"context_line":"    )"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"0cca404e_0e2ba1af","line":104,"range":{"start_line":104,"start_character":10,"end_line":104,"end_character":19},"in_reply_to":"007641b6_25941ed5","updated":"2022-04-19 08:59:32.000000000","message":"Now this filter depends on block storage api and it doesn\u0027t provide backup filter using volume name.","commit_id":"6c3a82159267598230b7de2be2a7fdb6a68ed0c7"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"df3787e24088c9785e285625167b4da56d8207dd","unresolved":true,"context_lines":[{"line_number":102,"context_line":"        (\u0027size\u0027, _(\"Size(GiB) \u003d\"), True),"},{"line_number":103,"context_line":"        (\u0027status\u0027, _(\"Status \u003d\"), True),"},{"line_number":104,"context_line":"        (\u0027volume_id\u0027, _(\"Volume ID \u003d\"), True,),"},{"line_number":105,"context_line":"    )"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"class AdminBackupsTable(project_tables.BackupsTable):"}],"source_content_type":"text/x-python","patch_set":8,"id":"bab6f427_260123b0","line":105,"updated":"2021-08-25 08:47:09.000000000","message":"Could you also \u0027Project\u0027 Filter here like done for router and network table.\n[1] https://github.com/openstack/horizon/blob/master/openstack_dashboard/dashboards/admin/networks/tables.py#L90","commit_id":"734eff29402ae2c4da6dbb968cbb998f92b7532a"},{"author":{"_account_id":31746,"name":"Oleksandr Kozachenko","email":"okozachenko1203@gmail.com","username":"okozachenko"},"change_message_id":"86b54ca5cf629ba0a5e5e2780cd046b3f6d53081","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        (\u0027size\u0027, _(\"Size(GiB) \u003d\"), True),"},{"line_number":103,"context_line":"        (\u0027status\u0027, _(\"Status \u003d\"), True),"},{"line_number":104,"context_line":"        (\u0027volume_id\u0027, _(\"Volume ID \u003d\"), True,),"},{"line_number":105,"context_line":"    )"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"class AdminBackupsTable(project_tables.BackupsTable):"}],"source_content_type":"text/x-python","patch_set":8,"id":"26a90325_59db8dd9","line":105,"in_reply_to":"bab6f427_260123b0","updated":"2022-04-19 08:59:32.000000000","message":"Done","commit_id":"734eff29402ae2c4da6dbb968cbb998f92b7532a"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"08308d8bdbd4608fdd96b180e24cd75a92039008","unresolved":true,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    filter_type \u003d \u0027server\u0027"},{"line_number":100,"context_line":"    filter_choices \u003d ("},{"line_number":101,"context_line":"        (\u0027project\u0027, _(\"Project \u003d\"), True),"},{"line_number":102,"context_line":"        (\u0027name\u0027, _(\"Backup Name \u003d\"), True),"},{"line_number":103,"context_line":"        (\u0027size\u0027, _(\"Size(GiB) \u003d\"), True),"},{"line_number":104,"context_line":"        (\u0027status\u0027, _(\"Status \u003d\"), True),"}],"source_content_type":"text/x-python","patch_set":10,"id":"b5b3474c_c0051bdf","line":101,"range":{"start_line":101,"start_character":8,"end_line":101,"end_character":41},"updated":"2021-09-07 11:00:05.000000000","message":"You have just added Project filter but logic to fetch data on basis of this filter is missing,\nso this filter is not going to work.","commit_id":"c3d53f40147f41c67bc823905ddb44216a256773"},{"author":{"_account_id":31746,"name":"Oleksandr Kozachenko","email":"okozachenko1203@gmail.com","username":"okozachenko"},"change_message_id":"85ed21ce679b1cfc9d0f9c5457ac0c0b60e7b67f","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    filter_type \u003d \u0027server\u0027"},{"line_number":100,"context_line":"    filter_choices \u003d ("},{"line_number":101,"context_line":"        (\u0027project\u0027, _(\"Project \u003d\"), True),"},{"line_number":102,"context_line":"        (\u0027name\u0027, _(\"Backup Name \u003d\"), True),"},{"line_number":103,"context_line":"        (\u0027size\u0027, _(\"Size(GiB) \u003d\"), True),"},{"line_number":104,"context_line":"        (\u0027status\u0027, _(\"Status \u003d\"), True),"}],"source_content_type":"text/x-python","patch_set":10,"id":"30ac1098_7e3f2925","line":101,"range":{"start_line":101,"start_character":8,"end_line":101,"end_character":41},"in_reply_to":"b5b3474c_c0051bdf","updated":"2022-04-20 05:42:02.000000000","message":"Done","commit_id":"c3d53f40147f41c67bc823905ddb44216a256773"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"bf7d0517f07bf79465a255190b110965693612c3","unresolved":true,"context_lines":[{"line_number":103,"context_line":"        (\u0027size\u0027, _(\"Size(GiB) \u003d\"), True),"},{"line_number":104,"context_line":"        (\u0027status\u0027, _(\"Status \u003d\"), True),"},{"line_number":105,"context_line":"        (\u0027volume_id\u0027, _(\"Volume ID \u003d\"), True,),"},{"line_number":106,"context_line":"    )"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"class AdminBackupsTable(project_tables.BackupsTable):"}],"source_content_type":"text/x-python","patch_set":14,"id":"a53376b6_a21880d5","line":106,"updated":"2022-05-24 12:20:28.000000000","message":"question: Which API version supports \"size\" filter?\nAccording to the result of \"cinder --os-volume-api-version\u003d3.68 list-filters\", the supported fields are name, status and volume_id as of Cinder APi version 3.68.\n\nI just checked the backup-list and backup-list with detail APIs in the block-storage API ref [1]. The API ref does not cover any specific fields we can use as a filter, so I just depend on the result of \"cinder list-filters\" command.\n\nI am not sure about \"project\" too, but \"project\" is handled differently, so it should work.\n\nmore inputs would be really appreciated.\n\n[1] https://docs.openstack.org/api-ref/block-storage/v3/index.html?expanded\u003d#backups-backups","commit_id":"bb7829eaefff798f7cb376f63d8e2495740e759a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3c79f16caf9ecd1dd457cf9df8638c5fbab74b6f","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        (\u0027size\u0027, _(\"Size(GiB) \u003d\"), True),"},{"line_number":104,"context_line":"        (\u0027status\u0027, _(\"Status \u003d\"), True),"},{"line_number":105,"context_line":"        (\u0027volume_id\u0027, _(\"Volume ID \u003d\"), True,),"},{"line_number":106,"context_line":"    )"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"class AdminBackupsTable(project_tables.BackupsTable):"}],"source_content_type":"text/x-python","patch_set":14,"id":"4b96e54b_5a35ae14","line":106,"in_reply_to":"2efaf3a3_e4e0ecd3","updated":"2022-07-15 17:59:39.000000000","message":"This is not a point I mentioned. My point is that available filtering parameters vary via the cinder config by the generalized filters feature. In the default configuration, only name, status and volume_id are enabled for listing backups.\nYour patch always makes \"size\" filter available. Does it work even when only the default filter parameters are enabled?","commit_id":"bb7829eaefff798f7cb376f63d8e2495740e759a"},{"author":{"_account_id":31746,"name":"Oleksandr Kozachenko","email":"okozachenko1203@gmail.com","username":"okozachenko"},"change_message_id":"274fac0bb76ab8b62a2a9d5ca37639b3ffced919","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        (\u0027size\u0027, _(\"Size(GiB) \u003d\"), True),"},{"line_number":104,"context_line":"        (\u0027status\u0027, _(\"Status \u003d\"), True),"},{"line_number":105,"context_line":"        (\u0027volume_id\u0027, _(\"Volume ID \u003d\"), True,),"},{"line_number":106,"context_line":"    )"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"class AdminBackupsTable(project_tables.BackupsTable):"}],"source_content_type":"text/x-python","patch_set":14,"id":"2efaf3a3_e4e0ecd3","line":106,"in_reply_to":"400c05b4_337730c4","updated":"2022-06-30 15:32:28.000000000","message":"https://opendev.org/openstack/horizon/src/branch/master/openstack_dashboard/api/cinder.py#L601\nI can see that it already uses client 3.45 for backup list.","commit_id":"bb7829eaefff798f7cb376f63d8e2495740e759a"},{"author":{"_account_id":31746,"name":"Oleksandr Kozachenko","email":"okozachenko1203@gmail.com","username":"okozachenko"},"change_message_id":"63ccdf40164730e3a1978b4f4b45783732d61483","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        (\u0027size\u0027, _(\"Size(GiB) \u003d\"), True),"},{"line_number":104,"context_line":"        (\u0027status\u0027, _(\"Status \u003d\"), True),"},{"line_number":105,"context_line":"        (\u0027volume_id\u0027, _(\"Volume ID \u003d\"), True,),"},{"line_number":106,"context_line":"    )"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"class AdminBackupsTable(project_tables.BackupsTable):"}],"source_content_type":"text/x-python","patch_set":14,"id":"6692262d_6eba3789","line":106,"in_reply_to":"4b96e54b_5a35ae14","updated":"2022-08-25 14:49:05.000000000","message":"Filtering by size field is always working.\nGeneralized filters just control the allowed filter keys for non-admin users.\nThis filter config doesn\u0027t affect admin user\u0027s filtering.","commit_id":"bb7829eaefff798f7cb376f63d8e2495740e759a"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"06055abc3801e600623a7004b7c48dadf24f65c8","unresolved":true,"context_lines":[{"line_number":103,"context_line":"        (\u0027size\u0027, _(\"Size(GiB) \u003d\"), True),"},{"line_number":104,"context_line":"        (\u0027status\u0027, _(\"Status \u003d\"), True),"},{"line_number":105,"context_line":"        (\u0027volume_id\u0027, _(\"Volume ID \u003d\"), True,),"},{"line_number":106,"context_line":"    )"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"class AdminBackupsTable(project_tables.BackupsTable):"}],"source_content_type":"text/x-python","patch_set":14,"id":"ae8e2435_f6092a6d","line":106,"in_reply_to":"a53376b6_a21880d5","updated":"2022-05-25 10:20:39.000000000","message":"In Cinder, we introduced the concept of generalized resource filters[1] from microversion 3.33[2] (and extended features in 3.34) instead of defining filters separately for each resource GET operation. Basically, we make the filters admin \nconfigurable with the resource_filters.json file[3] where the backup filters are defaulted to name, status and volume_id as you have mentioned. Operators can extend these filters to any field that the DB can query in the backup table[4].\n\nIf you also follow the example in the generalized filters doc[1], you will see \"size\" as a valid field for list backups.\n\nlist backup*\tid, name, status, container, availability_zone, description, volume_id, is_incremental, size, host, parent_id\n\nNOTE: All this will only work if you specify MV\u003e\u003d3.33.\n\n[1] https://docs.openstack.org/cinder/queens/admin/generalized_filters.html\n[2] https://github.com/openstack/cinder/blob/master/cinder/api/openstack/api_version_request.py#L86-L90\n[3] https://github.com/openstack/cinder/blob/master/etc/cinder/resource_filters.json#L6\n[4] https://github.com/openstack/cinder/blob/master/cinder/db/sqlalchemy/models.py#L1002-L1024","commit_id":"bb7829eaefff798f7cb376f63d8e2495740e759a"},{"author":{"_account_id":31746,"name":"Oleksandr Kozachenko","email":"okozachenko1203@gmail.com","username":"okozachenko"},"change_message_id":"cd56803d748464e50a9efa6d47a945147733a792","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        (\u0027size\u0027, _(\"Size(GiB) \u003d\"), True),"},{"line_number":104,"context_line":"        (\u0027status\u0027, _(\"Status \u003d\"), True),"},{"line_number":105,"context_line":"        (\u0027volume_id\u0027, _(\"Volume ID \u003d\"), True,),"},{"line_number":106,"context_line":"    )"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"class AdminBackupsTable(project_tables.BackupsTable):"}],"source_content_type":"text/x-python","patch_set":14,"id":"400c05b4_337730c4","line":106,"in_reply_to":"ae8e2435_f6092a6d","updated":"2022-06-24 13:49:41.000000000","message":"Ack","commit_id":"bb7829eaefff798f7cb376f63d8e2495740e759a"}],"openstack_dashboard/dashboards/admin/backups/tests.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3c79f16caf9ecd1dd457cf9df8638c5fbab74b6f","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":16,"id":"529102f1_2ddd78f2","updated":"2022-07-15 17:59:39.000000000","message":"Could you add test coverage corresponding to the proposed feature?","commit_id":"145722518f79791e2ee29ccef639ddfaf3f32ddb"},{"author":{"_account_id":31746,"name":"Oleksandr Kozachenko","email":"okozachenko1203@gmail.com","username":"okozachenko"},"change_message_id":"32d3c0032983eb42be234ce03388c0108e468671","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"be5de135_615ad75f","in_reply_to":"529102f1_2ddd78f2","updated":"2022-08-29 12:38:55.000000000","message":"Done","commit_id":"145722518f79791e2ee29ccef639ddfaf3f32ddb"}],"openstack_dashboard/dashboards/admin/backups/views.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3064af1ffc100ca0232beba627c3a1932da94b72","unresolved":true,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def get_data(self):"},{"line_number":49,"context_line":"        default_filters \u003d {}"},{"line_number":50,"context_line":"        filters \u003d self.get_filters(default_filters.copy())"},{"line_number":51,"context_line":"        try:"},{"line_number":52,"context_line":"            self._current_page \u003d self._get_page_number()"},{"line_number":53,"context_line":"            (backups, self._page_size, self._total_of_entries,"}],"source_content_type":"text/x-python","patch_set":7,"id":"c49e293b_db98ee0c","line":50,"range":{"start_line":50,"start_character":35,"end_line":50,"end_character":57},"updated":"2021-08-02 10:10:35.000000000","message":"Why do you need .copy()? default_filters is initialized at the previous line and it is not used later, so I don\u0027t think you need to create a copy of \"default_filters\".\n\nIn addition, the first argument of get_filters defaults to None and it is converted into {}, so there is no need to pass the value here.\n\nAs summary, consider just using self.get_filters().","commit_id":"6c3a82159267598230b7de2be2a7fdb6a68ed0c7"},{"author":{"_account_id":31746,"name":"Oleksandr Kozachenko","email":"okozachenko1203@gmail.com","username":"okozachenko"},"change_message_id":"86b54ca5cf629ba0a5e5e2780cd046b3f6d53081","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def get_data(self):"},{"line_number":49,"context_line":"        default_filters \u003d {}"},{"line_number":50,"context_line":"        filters \u003d self.get_filters(default_filters.copy())"},{"line_number":51,"context_line":"        try:"},{"line_number":52,"context_line":"            self._current_page \u003d self._get_page_number()"},{"line_number":53,"context_line":"            (backups, self._page_size, self._total_of_entries,"}],"source_content_type":"text/x-python","patch_set":7,"id":"0469f418_8d543b26","line":50,"range":{"start_line":50,"start_character":35,"end_line":50,"end_character":57},"in_reply_to":"c49e293b_db98ee0c","updated":"2022-04-19 08:59:32.000000000","message":"Done","commit_id":"6c3a82159267598230b7de2be2a7fdb6a68ed0c7"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3064af1ffc100ca0232beba627c3a1932da94b72","unresolved":true,"context_lines":[{"line_number":89,"context_line":"            backup.tenant_name \u003d getattr(tenant, \"name\", None)"},{"line_number":90,"context_line":"        return backups"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def get_filters(self, filters):"},{"line_number":93,"context_line":"        self.table \u003d self._tables[\u0027volume_backups\u0027]"},{"line_number":94,"context_line":"        self.handle_server_filter(self.request, table\u003dself.table)"},{"line_number":95,"context_line":"        self.update_server_filter_action(self.request, table\u003dself.table)"}],"source_content_type":"text/x-python","patch_set":7,"id":"940614fe_8e9e67ab","line":92,"range":{"start_line":92,"start_character":8,"end_line":92,"end_character":34},"updated":"2021-08-02 10:10:35.000000000","message":"Consider using the same signature as get_filters() in horizon/tables/views.py.\nIt is not a good idea to change the method signature in a child class.","commit_id":"6c3a82159267598230b7de2be2a7fdb6a68ed0c7"},{"author":{"_account_id":31746,"name":"Oleksandr Kozachenko","email":"okozachenko1203@gmail.com","username":"okozachenko"},"change_message_id":"86b54ca5cf629ba0a5e5e2780cd046b3f6d53081","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            backup.tenant_name \u003d getattr(tenant, \"name\", None)"},{"line_number":90,"context_line":"        return backups"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def get_filters(self, filters):"},{"line_number":93,"context_line":"        self.table \u003d self._tables[\u0027volume_backups\u0027]"},{"line_number":94,"context_line":"        self.handle_server_filter(self.request, table\u003dself.table)"},{"line_number":95,"context_line":"        self.update_server_filter_action(self.request, table\u003dself.table)"}],"source_content_type":"text/x-python","patch_set":7,"id":"293a584c_71781d79","line":92,"range":{"start_line":92,"start_character":8,"end_line":92,"end_character":34},"in_reply_to":"940614fe_8e9e67ab","updated":"2022-04-19 08:59:32.000000000","message":"Done","commit_id":"6c3a82159267598230b7de2be2a7fdb6a68ed0c7"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"38603d058217180df1ac536d013962a96c9ec382","unresolved":true,"context_lines":[{"line_number":49,"context_line":"        filters \u003d self.get_filters()"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        # If the tenant filter selected and the tenant does not exist."},{"line_number":52,"context_line":"        # We do not need to retrieve the list from neutron,just return"},{"line_number":53,"context_line":"        # an empty list."},{"line_number":54,"context_line":"        if \u0027tenant_id\u0027 in filters and not filters[\u0027tenant_id\u0027]:"},{"line_number":55,"context_line":"            return []"}],"source_content_type":"text/x-python","patch_set":12,"id":"b1188d1b_8a8e27e6","line":52,"range":{"start_line":52,"start_character":51,"end_line":52,"end_character":58},"updated":"2022-04-27 07:44:50.000000000","message":"-1, you mean volume backup here?","commit_id":"ea957072cc9b895ba893481829411b7795ecfc0d"},{"author":{"_account_id":31746,"name":"Oleksandr Kozachenko","email":"okozachenko1203@gmail.com","username":"okozachenko"},"change_message_id":"e12d235b545a5d8b9ac64dfb54cf828f29b771da","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        filters \u003d self.get_filters()"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        # If the tenant filter selected and the tenant does not exist."},{"line_number":52,"context_line":"        # We do not need to retrieve the list from neutron,just return"},{"line_number":53,"context_line":"        # an empty list."},{"line_number":54,"context_line":"        if \u0027tenant_id\u0027 in filters and not filters[\u0027tenant_id\u0027]:"},{"line_number":55,"context_line":"            return []"}],"source_content_type":"text/x-python","patch_set":12,"id":"29eca7a9_e90f1887","line":52,"range":{"start_line":52,"start_character":51,"end_line":52,"end_character":58},"in_reply_to":"b1188d1b_8a8e27e6","updated":"2022-04-29 14:02:37.000000000","message":"Done","commit_id":"ea957072cc9b895ba893481829411b7795ecfc0d"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3c79f16caf9ecd1dd457cf9df8638c5fbab74b6f","unresolved":true,"context_lines":[{"line_number":107,"context_line":"            if tenant_filter_ids:"},{"line_number":108,"context_line":"                filters[\u0027project_id\u0027] \u003d tenant_filter_ids[0]"},{"line_number":109,"context_line":"            else:"},{"line_number":110,"context_line":"                filters[\u0027project_id\u0027] \u003d tenant_filter_ids"},{"line_number":111,"context_line":"            del filters[\u0027project\u0027]"},{"line_number":112,"context_line":"        return filters"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"c60b2589_df4463f4","line":110,"range":{"start_line":110,"start_character":40,"end_line":110,"end_character":57},"updated":"2022-07-15 17:59:39.000000000","message":"tenant_filters_ids will be [] here. On the other hand, filters[\u0027project_id\u0027] is not expected to be a list. It is expected to be a single value.\nPerhaps you would like to use \"\" (empty string) or None instead of [].","commit_id":"145722518f79791e2ee29ccef639ddfaf3f32ddb"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"7d2e644f774d333e9abddc858515c1dd2ea7ab1b","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            if tenant_filter_ids:"},{"line_number":108,"context_line":"                filters[\u0027project_id\u0027] \u003d tenant_filter_ids[0]"},{"line_number":109,"context_line":"            else:"},{"line_number":110,"context_line":"                filters[\u0027project_id\u0027] \u003d tenant_filter_ids"},{"line_number":111,"context_line":"            del filters[\u0027project\u0027]"},{"line_number":112,"context_line":"        return filters"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"5cc8aeb8_5ffcdf96","line":110,"range":{"start_line":110,"start_character":40,"end_line":110,"end_character":57},"in_reply_to":"68716964_a13a1862","updated":"2022-10-30 15:52:23.000000000","message":"+1. agreed.","commit_id":"145722518f79791e2ee29ccef639ddfaf3f32ddb"},{"author":{"_account_id":31746,"name":"Oleksandr Kozachenko","email":"okozachenko1203@gmail.com","username":"okozachenko"},"change_message_id":"472a24ed003be91fd7e26157c2848d7511bf2aec","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            if tenant_filter_ids:"},{"line_number":108,"context_line":"                filters[\u0027project_id\u0027] \u003d tenant_filter_ids[0]"},{"line_number":109,"context_line":"            else:"},{"line_number":110,"context_line":"                filters[\u0027project_id\u0027] \u003d tenant_filter_ids"},{"line_number":111,"context_line":"            del filters[\u0027project\u0027]"},{"line_number":112,"context_line":"        return filters"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"68716964_a13a1862","line":110,"range":{"start_line":110,"start_character":40,"end_line":110,"end_character":57},"in_reply_to":"c60b2589_df4463f4","updated":"2022-08-25 14:59:38.000000000","message":"In this condition, [] works correctly.\nhttps://review.opendev.org/c/openstack/horizon/+/791532/16/openstack_dashboard/dashboards/admin/backups/views.py#54\n\n`not ([])` returns true.","commit_id":"145722518f79791e2ee29ccef639ddfaf3f32ddb"}],"openstack_dashboard/dashboards/project/backups/tables.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"bf7d0517f07bf79465a255190b110965693612c3","unresolved":true,"context_lines":[{"line_number":203,"context_line":"        pagination_param \u003d \u0027page\u0027"},{"line_number":204,"context_line":"        status_columns \u003d (\"status\",)"},{"line_number":205,"context_line":"        row_class \u003d UpdateRow"},{"line_number":206,"context_line":"        table_actions \u003d (DeleteBackup, BackupsFilterAction,)"},{"line_number":207,"context_line":"        row_actions \u003d (RestoreBackup, DeleteBackup)"}],"source_content_type":"text/x-python","patch_set":14,"id":"472629a3_a2069042","line":206,"range":{"start_line":206,"start_character":58,"end_line":206,"end_character":59},"updated":"2022-05-24 12:20:28.000000000","message":"super nit (update if there is any chance to update a patch set): we usually don\u0027t add a comma when a tuple has multiple entries and it fits one line.","commit_id":"bb7829eaefff798f7cb376f63d8e2495740e759a"},{"author":{"_account_id":31746,"name":"Oleksandr Kozachenko","email":"okozachenko1203@gmail.com","username":"okozachenko"},"change_message_id":"cd56803d748464e50a9efa6d47a945147733a792","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        pagination_param \u003d \u0027page\u0027"},{"line_number":204,"context_line":"        status_columns \u003d (\"status\",)"},{"line_number":205,"context_line":"        row_class \u003d UpdateRow"},{"line_number":206,"context_line":"        table_actions \u003d (DeleteBackup, BackupsFilterAction,)"},{"line_number":207,"context_line":"        row_actions \u003d (RestoreBackup, DeleteBackup)"}],"source_content_type":"text/x-python","patch_set":14,"id":"a066e823_67046fd8","line":206,"range":{"start_line":206,"start_character":58,"end_line":206,"end_character":59},"in_reply_to":"472629a3_a2069042","updated":"2022-06-24 13:49:41.000000000","message":"Done","commit_id":"bb7829eaefff798f7cb376f63d8e2495740e759a"}]}
