)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":24777,"name":"Steven Webster","email":"steven.webster@windriver.com","username":"swebster"},"change_message_id":"ad6bf9a55966788473f3f0ecba3a09fac7c502c4","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix  backup after application removed"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"While the WRO application is applied to the system, the backup will"},{"line_number":10,"context_line":"exclude its images. But when the WRO application is removed, the WRO"},{"line_number":11,"context_line":"images are going to be included in the backup. This can make the backup"},{"line_number":12,"context_line":"too large to fit in the /opt/platform-backup filesystem that is used to"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"e8e8217c_80e4ace4","line":9,"updated":"2022-01-05 20:38:42.000000000","message":"replace the three instances of \u0027WRO\u0027 with \u0027openstack\u0027","commit_id":"117014fd0839ab4cd02389b5b084da9aff884356"},{"author":{"_account_id":33662,"name":"Daniel Stevens Torres Cardenas","email":"DanielStevens.TorresCardenas@windriver.com","username":"dcardenas"},"change_message_id":"b3d2b264900be640092f3a99074beee60bb38a6e","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix  backup after application removed"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"While the WRO application is applied to the system, the backup will"},{"line_number":10,"context_line":"exclude its images. But when the WRO application is removed, the WRO"},{"line_number":11,"context_line":"images are going to be included in the backup. This can make the backup"},{"line_number":12,"context_line":"too large to fit in the /opt/platform-backup filesystem that is used to"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"ceba9f5b_0dfa47e8","line":9,"in_reply_to":"e8e8217c_80e4ace4","updated":"2022-01-21 14:54:44.000000000","message":"Done","commit_id":"117014fd0839ab4cd02389b5b084da9aff884356"},{"author":{"_account_id":28459,"name":"Bob Church","email":"robert.church@windriver.com","username":"rchurch"},"change_message_id":"1db1a3e9e4e042c24bf1e214297e0c8073578d26","unresolved":true,"context_lines":[{"line_number":19,"context_line":"TEST PLAN:"},{"line_number":20,"context_line":"PASS: Apply oidc then remove/delete and then backup."},{"line_number":21,"context_line":"PASS: Remove/Delete application with a shared image."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Signed-off-by: Bernardo Decco de Siqueira \u003cbernardo.deccodesiqueira@windriver.com\u003e"},{"line_number":24,"context_line":"Change-Id: Ic8eb1469384f74a88f32cab4d515a5b1a6f96d0d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"96208046_efe5e2d3","line":22,"updated":"2022-01-05 15:19:29.000000000","message":"Need and LP or Story/Task","commit_id":"117014fd0839ab4cd02389b5b084da9aff884356"},{"author":{"_account_id":33662,"name":"Daniel Stevens Torres Cardenas","email":"DanielStevens.TorresCardenas@windriver.com","username":"dcardenas"},"change_message_id":"b3d2b264900be640092f3a99074beee60bb38a6e","unresolved":false,"context_lines":[{"line_number":19,"context_line":"TEST PLAN:"},{"line_number":20,"context_line":"PASS: Apply oidc then remove/delete and then backup."},{"line_number":21,"context_line":"PASS: Remove/Delete application with a shared image."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Signed-off-by: Bernardo Decco de Siqueira \u003cbernardo.deccodesiqueira@windriver.com\u003e"},{"line_number":24,"context_line":"Change-Id: Ic8eb1469384f74a88f32cab4d515a5b1a6f96d0d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"5071a4dd_4308254b","line":22,"in_reply_to":"96208046_efe5e2d3","updated":"2022-01-21 14:54:44.000000000","message":"Done","commit_id":"117014fd0839ab4cd02389b5b084da9aff884356"},{"author":{"_account_id":30852,"name":"Dan Voiculeasa","email":"Dan.Voiculeasa@windriver.com","username":"dvoicule"},"change_message_id":"70533ec9506f4ef66bae35da22a5297150f5a303","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Daniel Stevens \u003cDanielStevens.TorresCardenas@windriver.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2022-01-21 09:57:56 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix  backup after application removed"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"While the openstack application is applied to the system, the"},{"line_number":10,"context_line":"backup will exclude its images."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"a8befea6_7146870d","line":7,"range":{"start_line":7,"start_character":3,"end_line":7,"end_character":4},"updated":"2022-01-21 15:37:09.000000000","message":"Ignored this for too long, we could fix the double whitespace.","commit_id":"6aa1c3317e3c4eb1e325257d6e5a17a530066c31"},{"author":{"_account_id":33662,"name":"Daniel Stevens Torres Cardenas","email":"DanielStevens.TorresCardenas@windriver.com","username":"dcardenas"},"change_message_id":"b56f4381241763475c1708949657beb2569230af","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Daniel Stevens \u003cDanielStevens.TorresCardenas@windriver.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2022-01-21 09:57:56 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix  backup after application removed"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"While the openstack application is applied to the system, the"},{"line_number":10,"context_line":"backup will exclude its images."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"c3f3dd4b_6297c0e3","line":7,"range":{"start_line":7,"start_character":3,"end_line":7,"end_character":4},"in_reply_to":"a8befea6_7146870d","updated":"2022-01-24 14:55:54.000000000","message":"Done","commit_id":"6aa1c3317e3c4eb1e325257d6e5a17a530066c31"},{"author":{"_account_id":30852,"name":"Dan Voiculeasa","email":"Dan.Voiculeasa@windriver.com","username":"dvoicule"},"change_message_id":"073bf3e897da5a1910e00df0bb14c9bc8523069d","unresolved":true,"context_lines":[{"line_number":17,"context_line":"Solution:"},{"line_number":18,"context_line":"Remove local registry images from deleted applications"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"TEST PLAN:"},{"line_number":21,"context_line":"PASS: Apply oidc then remove/delete and then backup."},{"line_number":22,"context_line":"PASS: Remove/Delete application with a shared image."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Closes-Bug: 1955407"},{"line_number":25,"context_line":"Signed-off-by: Bernardo Decco de Siqueira \u003cbernardo.deccodesiqueira@windriver.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":33,"id":"79fb701b_669f75ca","line":22,"range":{"start_line":20,"start_character":0,"end_line":22,"end_character":52},"updated":"2022-02-02 09:32:47.000000000","message":"Please update the test plan with the actual tests performed.","commit_id":"18235c99846c746a54fc890b3bc2d0c86b6206ab"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"60ea3cb4b0fef89999cc7b686207fa4eeb0a45ef","unresolved":true,"context_lines":[{"line_number":15,"context_line":"subcloud upgrades, as the backup must fit in /opt/platform-backup."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Solution:"},{"line_number":18,"context_line":"Remove local registry images from deleted applications"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"TEST PLAN:"},{"line_number":21,"context_line":"PASS: Apply oidc then remove/delete and then backup."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":34,"id":"fee92649_7e7e6552","line":18,"range":{"start_line":18,"start_character":29,"end_line":18,"end_character":34},"updated":"2023-01-17 19:54:40.000000000","message":"would be clearer as \"belonging to\"\n\nAlso, it seems like this is not quite reflective of what this commit is doing.  Rather, it seems to be providing a helper function that *may* be called to clean up images.\n\nHave we considered always deleting the images on application removal rather than relying on the application code to call this helper?","commit_id":"fe9ce9436afff2f3f13e451b492c964d9a532242"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":28486,"name":"Tee Ngo","email":"tee.ngo@windriver.com","username":"teewrs"},"change_message_id":"52546b1528d55acdcda2274ce42c8f0d98fc6243","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"cc04f6d7_6a3c4aef","updated":"2021-12-20 21:49:25.000000000","message":"Please add the TEST PLAN section. Need another test where an image is referenced by the app being removed and another application.\n","commit_id":"d3f6442608d41a051aab269a0d6e86d328892135"},{"author":{"_account_id":30852,"name":"Dan Voiculeasa","email":"Dan.Voiculeasa@windriver.com","username":"dvoicule"},"change_message_id":"fd76d169eff91e3b3c56fade9d34eddf6f36edb5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"ae0b9c8e_2e9bb780","updated":"2021-12-22 15:32:21.000000000","message":"Ideally we don\u0027t want to assign this extra responsability to conductor/manager.\nWe should expose the functionality to lifecycle_utils.py(place for code shared between apps) and let each app handle the deletion of its resources, similar to what we do for delete_local_registry_secrets.","commit_id":"d1b51dd2a5013bac0c6230f85bd3e371745a1c74"},{"author":{"_account_id":33662,"name":"Daniel Stevens Torres Cardenas","email":"DanielStevens.TorresCardenas@windriver.com","username":"dcardenas"},"change_message_id":"b3d2b264900be640092f3a99074beee60bb38a6e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"34758bd1_8430eecf","in_reply_to":"1e553c82_2eb774c3","updated":"2022-01-21 14:54:44.000000000","message":"Done","commit_id":"d1b51dd2a5013bac0c6230f85bd3e371745a1c74"},{"author":{"_account_id":33475,"name":"Bernardo Decco de Siqueira","display_name":"Bernardo Decco","email":"bernardo.deccodesiqueira@windriver.com","username":"bdeccode"},"change_message_id":"054c56f9f405b4cbe1ff3a3d0db920555ee2e2ef","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"e098e3cf_ad799e1b","in_reply_to":"ae0b9c8e_2e9bb780","updated":"2021-12-22 19:54:48.000000000","message":"I saw that some apps like oidc doesn`t have an XXXXAppLifecycleOperator class defined to handle the operation. I`m also not sure if it`s ok to create a\n\u0027rpcapi \u003d conductor_rpcapi.ConductorAPI(\n        topic\u003dconductor_rpcapi.MANAGER_TOPIC)\u0027\ninside the lifecycle_utils.py to make the necessary calls that my function needs.","commit_id":"d1b51dd2a5013bac0c6230f85bd3e371745a1c74"},{"author":{"_account_id":30852,"name":"Dan Voiculeasa","email":"Dan.Voiculeasa@windriver.com","username":"dvoicule"},"change_message_id":"7a83b1eacc43ae48f336c73002223ef384045de6","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":14,"id":"1e553c82_2eb774c3","in_reply_to":"e098e3cf_ad799e1b","updated":"2022-01-05 16:06:27.000000000","message":"Since conductor_obj is not yet passed to \u0027pre\u0027-\u0027delete\u0027-\u0027resource\u0027 action, the \u0027pre\u0027-\u0027delete\u0027-\u0027operation\u0027 action can be used instead, The conductor_obj is passed in app_lifecycle_actions for \u0027pre\u0027-\u0027delete\u0027-\u0027operation\u0027.\n\n\nI still recommend moving the logic to lifecicle_utils.py and calling it from WRO app_lifecycle_actions for pre-delete-operation. Why? Let this be contained for the specific scenario of WRO now until a complete solution is implemented.\n\n\nConsider the commit now changes the behavior for all apps. When upgrading(or simply deleting) the apps on a SystemController(platform-integ-apps, others..)... I think we don\u0027t always want images to disappear from central registry as it may affect subclouds. At a minimum we want to control if we delete or not the images through a flag passed to perform_app_delete. And in the end I think we want apps to let them clean up the images.","commit_id":"d1b51dd2a5013bac0c6230f85bd3e371745a1c74"},{"author":{"_account_id":33662,"name":"Daniel Stevens Torres Cardenas","email":"DanielStevens.TorresCardenas@windriver.com","username":"dcardenas"},"change_message_id":"b3d2b264900be640092f3a99074beee60bb38a6e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"5cd2f0cc_7941f1e1","updated":"2022-01-21 14:54:44.000000000","message":"Please let me know your comments or suggestions","commit_id":"a1c87ed699ba66f0d36d3273b98d7072113082b1"},{"author":{"_account_id":33662,"name":"Daniel Stevens Torres Cardenas","email":"DanielStevens.TorresCardenas@windriver.com","username":"dcardenas"},"change_message_id":"b24256ef04c870b779c8c3b78245e3c97015010e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"3489121b_ec92de1c","updated":"2022-01-24 18:09:32.000000000","message":"recheck","commit_id":"f5afc557b7b7553983211db8532e2f1df746b083"},{"author":{"_account_id":30852,"name":"Dan Voiculeasa","email":"Dan.Voiculeasa@windriver.com","username":"dvoicule"},"change_message_id":"073bf3e897da5a1910e00df0bb14c9bc8523069d","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":33,"id":"280e5b91_27fe1a32","updated":"2022-02-02 09:32:47.000000000","message":"Please mark the old comments as resolved, so we can focus on current comments.","commit_id":"18235c99846c746a54fc890b3bc2d0c86b6206ab"},{"author":{"_account_id":33662,"name":"Daniel Stevens Torres Cardenas","email":"DanielStevens.TorresCardenas@windriver.com","username":"dcardenas"},"change_message_id":"93cfb25e98b3e1eaece824de5ddcdf3861271f73","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":33,"id":"65a457af_b35a285a","in_reply_to":"280e5b91_27fe1a32","updated":"2022-02-14 15:37:02.000000000","message":"Done","commit_id":"18235c99846c746a54fc890b3bc2d0c86b6206ab"},{"author":{"_account_id":9926,"name":"John Kung","email":"john.kung@windriver.com","username":"jkung"},"change_message_id":"68896856a59249556cee3673460b72e97240ce2d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":34,"id":"5e992637_085d318c","updated":"2023-08-22 13:44:37.000000000","message":"As per prior comment, review abandoned","commit_id":"fe9ce9436afff2f3f13e451b492c964d9a532242"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"c0a941b7ac7e5539d46990423bb0e91666975393","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":34,"id":"cca12f4f_cbbbec39","updated":"2022-02-14 15:15:05.000000000","message":"Can we get the old comments that have been addressed marked as \"resolved\" so that the reviewers can see where things are at?","commit_id":"fe9ce9436afff2f3f13e451b492c964d9a532242"},{"author":{"_account_id":33265,"name":"Ramaswamy Subramanian","email":"ramaswamy.subramanian@windriver.com","username":"rsubrama"},"change_message_id":"ed900bb7b20bc468b98dd440e0d0f0fa1020fdb0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":34,"id":"cfa388b7_fb34c009","updated":"2023-08-08 13:40:31.000000000","message":"No Activity on this code review for a long time. This will be abandoned to keep the review queue sane.","commit_id":"fe9ce9436afff2f3f13e451b492c964d9a532242"}],"sysinv/sysinv/sysinv/sysinv/api/controllers/v1/kube_app.py":[{"author":{"_account_id":30852,"name":"Dan Voiculeasa","email":"Dan.Voiculeasa@windriver.com","username":"dvoicule"},"change_message_id":"72946ac635ed10cd1b671ea89f8b38ffc1b083ac","unresolved":true,"context_lines":[{"line_number":565,"context_line":"        lifecycle_hook_info.mode \u003d constants.APP_LIFECYCLE_MODE_MANUAL"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"        response \u003d pecan.request.rpcapi.perform_app_delete("},{"line_number":568,"context_line":"            pecan.request.context, db_app, name, lifecycle_hook_info\u003dlifecycle_hook_info)"},{"line_number":569,"context_line":"        if response:"},{"line_number":570,"context_line":"            raise wsme.exc.ClientSideError(_("},{"line_number":571,"context_line":"                \"%s.\" % response))"}],"source_content_type":"text/x-python","patch_set":8,"id":"aff376cf_83bf865e","line":568,"range":{"start_line":568,"start_character":43,"end_line":568,"end_character":47},"updated":"2021-12-20 14:32:53.000000000","message":"For sure name is stored in db_app object or can be determined from there.","commit_id":"fb15205c11e290dd1d92e799b1e2f2385ef797a8"},{"author":{"_account_id":33475,"name":"Bernardo Decco de Siqueira","display_name":"Bernardo Decco","email":"bernardo.deccodesiqueira@windriver.com","username":"bdeccode"},"change_message_id":"2cc5a7984c0f6727e2c6ebc30982f795f8c34c8d","unresolved":false,"context_lines":[{"line_number":565,"context_line":"        lifecycle_hook_info.mode \u003d constants.APP_LIFECYCLE_MODE_MANUAL"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"        response \u003d pecan.request.rpcapi.perform_app_delete("},{"line_number":568,"context_line":"            pecan.request.context, db_app, name, lifecycle_hook_info\u003dlifecycle_hook_info)"},{"line_number":569,"context_line":"        if response:"},{"line_number":570,"context_line":"            raise wsme.exc.ClientSideError(_("},{"line_number":571,"context_line":"                \"%s.\" % response))"}],"source_content_type":"text/x-python","patch_set":8,"id":"e6982427_1ea820c6","line":568,"range":{"start_line":568,"start_character":43,"end_line":568,"end_character":47},"in_reply_to":"aff376cf_83bf865e","updated":"2021-12-20 21:14:30.000000000","message":"You are right","commit_id":"fb15205c11e290dd1d92e799b1e2f2385ef797a8"}],"sysinv/sysinv/sysinv/sysinv/conductor/manager.py":[{"author":{"_account_id":30852,"name":"Dan Voiculeasa","email":"Dan.Voiculeasa@windriver.com","username":"dvoicule"},"change_message_id":"cd40f62474c7261a9efadca37c99258e995452e2","unresolved":true,"context_lines":[{"line_number":1866,"context_line":"        \"\"\""},{"line_number":1867,"context_line":"        Remove all unused app images from local registry."},{"line_number":1868,"context_line":"        \"\"\""},{"line_number":1869,"context_line":"        application \u003d self._app.Application(rpc_app)"},{"line_number":1870,"context_line":"        apps_images \u003d self.docker_get_apps_images(context)"},{"line_number":1871,"context_line":"        app_images \u003d set()"},{"line_number":1872,"context_line":"        other_images \u003d set()"}],"source_content_type":"text/x-python","patch_set":14,"id":"4a8d3b92_dfa311c3","line":1869,"range":{"start_line":1869,"start_character":8,"end_line":1869,"end_character":52},"updated":"2021-12-22 08:56:24.000000000","message":"Optimization: No need for this instantiation. App name should be in rpc_app.name, as shown by other occurrences in sysinv.","commit_id":"d1b51dd2a5013bac0c6230f85bd3e371745a1c74"},{"author":{"_account_id":33475,"name":"Bernardo Decco de Siqueira","display_name":"Bernardo Decco","email":"bernardo.deccodesiqueira@windriver.com","username":"bdeccode"},"change_message_id":"054c56f9f405b4cbe1ff3a3d0db920555ee2e2ef","unresolved":false,"context_lines":[{"line_number":1866,"context_line":"        \"\"\""},{"line_number":1867,"context_line":"        Remove all unused app images from local registry."},{"line_number":1868,"context_line":"        \"\"\""},{"line_number":1869,"context_line":"        application \u003d self._app.Application(rpc_app)"},{"line_number":1870,"context_line":"        apps_images \u003d self.docker_get_apps_images(context)"},{"line_number":1871,"context_line":"        app_images \u003d set()"},{"line_number":1872,"context_line":"        other_images \u003d set()"}],"source_content_type":"text/x-python","patch_set":14,"id":"22907dc5_61233ecb","line":1869,"range":{"start_line":1869,"start_character":8,"end_line":1869,"end_character":52},"in_reply_to":"4a8d3b92_dfa311c3","updated":"2021-12-22 19:54:48.000000000","message":"Done","commit_id":"d1b51dd2a5013bac0c6230f85bd3e371745a1c74"},{"author":{"_account_id":30852,"name":"Dan Voiculeasa","email":"Dan.Voiculeasa@windriver.com","username":"dvoicule"},"change_message_id":"cd40f62474c7261a9efadca37c99258e995452e2","unresolved":true,"context_lines":[{"line_number":13733,"context_line":""},{"line_number":13734,"context_line":"        # Perform pre delete operation actions"},{"line_number":13735,"context_line":"        try:"},{"line_number":13736,"context_line":"            self._remove_app_local_registry_images(context, rpc_app)"},{"line_number":13737,"context_line":"            lifecycle_hook_info_app_delete.relative_timing \u003d constants.APP_LIFECYCLE_TIMING_PRE"},{"line_number":13738,"context_line":"            lifecycle_hook_info_app_delete.lifecycle_type \u003d constants.APP_LIFECYCLE_TYPE_OPERATION"},{"line_number":13739,"context_line":"            self.app_lifecycle_actions(context, rpc_app,"}],"source_content_type":"text/x-python","patch_set":14,"id":"e0766b7b_5745a5fe","line":13736,"range":{"start_line":13736,"start_character":12,"end_line":13736,"end_character":68},"updated":"2021-12-22 08:56:24.000000000","message":"This must not be inside this try block.\nExceptions thrown here will have a misleading description \u0027Error performing app_lifecycle_actions \u003cbla bla unrelated to lifcycle actions\u003e\u0027.","commit_id":"d1b51dd2a5013bac0c6230f85bd3e371745a1c74"},{"author":{"_account_id":33475,"name":"Bernardo Decco de Siqueira","display_name":"Bernardo Decco","email":"bernardo.deccodesiqueira@windriver.com","username":"bdeccode"},"change_message_id":"054c56f9f405b4cbe1ff3a3d0db920555ee2e2ef","unresolved":false,"context_lines":[{"line_number":13733,"context_line":""},{"line_number":13734,"context_line":"        # Perform pre delete operation actions"},{"line_number":13735,"context_line":"        try:"},{"line_number":13736,"context_line":"            self._remove_app_local_registry_images(context, rpc_app)"},{"line_number":13737,"context_line":"            lifecycle_hook_info_app_delete.relative_timing \u003d constants.APP_LIFECYCLE_TIMING_PRE"},{"line_number":13738,"context_line":"            lifecycle_hook_info_app_delete.lifecycle_type \u003d constants.APP_LIFECYCLE_TYPE_OPERATION"},{"line_number":13739,"context_line":"            self.app_lifecycle_actions(context, rpc_app,"}],"source_content_type":"text/x-python","patch_set":14,"id":"dae73825_b03716f9","line":13736,"range":{"start_line":13736,"start_character":12,"end_line":13736,"end_character":68},"in_reply_to":"e0766b7b_5745a5fe","updated":"2021-12-22 19:54:48.000000000","message":"Done","commit_id":"d1b51dd2a5013bac0c6230f85bd3e371745a1c74"},{"author":{"_account_id":24777,"name":"Steven Webster","email":"steven.webster@windriver.com","username":"swebster"},"change_message_id":"ad6bf9a55966788473f3f0ecba3a09fac7c502c4","unresolved":true,"context_lines":[{"line_number":16,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":17,"context_line":"#    under the License."},{"line_number":18,"context_line":"#"},{"line_number":19,"context_line":"# Copyright (c) 2013-2021 Wind River Systems, Inc."},{"line_number":20,"context_line":"#"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"\"\"\"Conduct all activity related system inventory."}],"source_content_type":"text/x-python","patch_set":16,"id":"fb9861bf_8a2ea22f","line":19,"updated":"2022-01-05 20:38:42.000000000","message":"2022","commit_id":"117014fd0839ab4cd02389b5b084da9aff884356"},{"author":{"_account_id":33662,"name":"Daniel Stevens Torres Cardenas","email":"DanielStevens.TorresCardenas@windriver.com","username":"dcardenas"},"change_message_id":"b3d2b264900be640092f3a99074beee60bb38a6e","unresolved":false,"context_lines":[{"line_number":16,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":17,"context_line":"#    under the License."},{"line_number":18,"context_line":"#"},{"line_number":19,"context_line":"# Copyright (c) 2013-2021 Wind River Systems, Inc."},{"line_number":20,"context_line":"#"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"\"\"\"Conduct all activity related system inventory."}],"source_content_type":"text/x-python","patch_set":16,"id":"32ae8cfd_ad9cb638","line":19,"in_reply_to":"fb9861bf_8a2ea22f","updated":"2022-01-21 14:54:44.000000000","message":"Done","commit_id":"117014fd0839ab4cd02389b5b084da9aff884356"},{"author":{"_account_id":30852,"name":"Dan Voiculeasa","email":"Dan.Voiculeasa@windriver.com","username":"dvoicule"},"change_message_id":"70533ec9506f4ef66bae35da22a5297150f5a303","unresolved":true,"context_lines":[{"line_number":13296,"context_line":"                  \"{}, {}\".format(rpc_app.name, hook_info))"},{"line_number":13297,"context_line":""},{"line_number":13298,"context_line":"        try:"},{"line_number":13299,"context_line":"            lifecycle_utils.remove_app_local_registry_images(self, context, rpc_app)"},{"line_number":13300,"context_line":"\t\t    self._app.app_lifecycle_actions(context, self, rpc_app, hook_info)"},{"line_number":13301,"context_line":"        except exception.LifecycleSemanticCheckOpererationBlocked as e:"},{"line_number":13302,"context_line":"            LOG.info(\"Metadata-evaluation: {}\".format(e))"}],"source_content_type":"text/x-python","patch_set":18,"id":"f0b7bbdf_12e2e751","line":13299,"range":{"start_line":13299,"start_character":12,"end_line":13299,"end_character":84},"updated":"2022-01-21 15:37:09.000000000","message":"Don\u0027t think this even works well, this will delete app images on each lifecycle.\n\nEither way, referring to discussion from patchset 14, the logic should be moved outside of conductor to the app itself. Thus, we don\u0027t need to modifify this file.","commit_id":"6aa1c3317e3c4eb1e325257d6e5a17a530066c31"},{"author":{"_account_id":33662,"name":"Daniel Stevens Torres Cardenas","email":"DanielStevens.TorresCardenas@windriver.com","username":"dcardenas"},"change_message_id":"93cfb25e98b3e1eaece824de5ddcdf3861271f73","unresolved":false,"context_lines":[{"line_number":13296,"context_line":"                  \"{}, {}\".format(rpc_app.name, hook_info))"},{"line_number":13297,"context_line":""},{"line_number":13298,"context_line":"        try:"},{"line_number":13299,"context_line":"            lifecycle_utils.remove_app_local_registry_images(self, context, rpc_app)"},{"line_number":13300,"context_line":"\t\t    self._app.app_lifecycle_actions(context, self, rpc_app, hook_info)"},{"line_number":13301,"context_line":"        except exception.LifecycleSemanticCheckOpererationBlocked as e:"},{"line_number":13302,"context_line":"            LOG.info(\"Metadata-evaluation: {}\".format(e))"}],"source_content_type":"text/x-python","patch_set":18,"id":"234242d7_e52ad2d3","line":13299,"range":{"start_line":13299,"start_character":12,"end_line":13299,"end_character":84},"in_reply_to":"4982e8f9_78273e5b","updated":"2022-02-14 15:37:02.000000000","message":"Done","commit_id":"6aa1c3317e3c4eb1e325257d6e5a17a530066c31"},{"author":{"_account_id":33662,"name":"Daniel Stevens Torres Cardenas","email":"DanielStevens.TorresCardenas@windriver.com","username":"dcardenas"},"change_message_id":"b56f4381241763475c1708949657beb2569230af","unresolved":true,"context_lines":[{"line_number":13296,"context_line":"                  \"{}, {}\".format(rpc_app.name, hook_info))"},{"line_number":13297,"context_line":""},{"line_number":13298,"context_line":"        try:"},{"line_number":13299,"context_line":"            lifecycle_utils.remove_app_local_registry_images(self, context, rpc_app)"},{"line_number":13300,"context_line":"\t\t    self._app.app_lifecycle_actions(context, self, rpc_app, hook_info)"},{"line_number":13301,"context_line":"        except exception.LifecycleSemanticCheckOpererationBlocked as e:"},{"line_number":13302,"context_line":"            LOG.info(\"Metadata-evaluation: {}\".format(e))"}],"source_content_type":"text/x-python","patch_set":18,"id":"4982e8f9_78273e5b","line":13299,"range":{"start_line":13299,"start_character":12,"end_line":13299,"end_character":84},"in_reply_to":"f0b7bbdf_12e2e751","updated":"2022-01-24 14:55:54.000000000","message":"Right, I\u0027ve called this function since this file: https://opendev.org/starlingx/openstack-armada-app/src/branch/master/python-k8sapp-openstack/k8sapp_openstack/k8sapp_openstack/lifecycle/lifecycle_openstack.py","commit_id":"6aa1c3317e3c4eb1e325257d6e5a17a530066c31"},{"author":{"_account_id":30852,"name":"Dan Voiculeasa","email":"Dan.Voiculeasa@windriver.com","username":"dvoicule"},"change_message_id":"d613a1306db0bf7d20ec9be5d8525aa393efbdb7","unresolved":true,"context_lines":[{"line_number":13297,"context_line":""},{"line_number":13298,"context_line":"        try:"},{"line_number":13299,"context_line":"            lifecycle_utils.remove_app_local_registry_images(self, context, rpc_app)"},{"line_number":13300,"context_line":"\t\t    self._app.app_lifecycle_actions(context, self, rpc_app, hook_info)"},{"line_number":13301,"context_line":"        except exception.LifecycleSemanticCheckOpererationBlocked as e:"},{"line_number":13302,"context_line":"            LOG.info(\"Metadata-evaluation: {}\".format(e))"},{"line_number":13303,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":18,"id":"12337b66_b3420752","line":13300,"range":{"start_line":13300,"start_character":0,"end_line":13300,"end_character":5},"updated":"2022-01-21 15:22:03.000000000","message":"Does this even work? Doesn\u0027t python complain about alignment?","commit_id":"6aa1c3317e3c4eb1e325257d6e5a17a530066c31"},{"author":{"_account_id":33662,"name":"Daniel Stevens Torres Cardenas","email":"DanielStevens.TorresCardenas@windriver.com","username":"dcardenas"},"change_message_id":"93cfb25e98b3e1eaece824de5ddcdf3861271f73","unresolved":false,"context_lines":[{"line_number":13297,"context_line":""},{"line_number":13298,"context_line":"        try:"},{"line_number":13299,"context_line":"            lifecycle_utils.remove_app_local_registry_images(self, context, rpc_app)"},{"line_number":13300,"context_line":"\t\t    self._app.app_lifecycle_actions(context, self, rpc_app, hook_info)"},{"line_number":13301,"context_line":"        except exception.LifecycleSemanticCheckOpererationBlocked as e:"},{"line_number":13302,"context_line":"            LOG.info(\"Metadata-evaluation: {}\".format(e))"},{"line_number":13303,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":18,"id":"ec48d3f2_061e2539","line":13300,"range":{"start_line":13300,"start_character":0,"end_line":13300,"end_character":5},"in_reply_to":"12337b66_b3420752","updated":"2022-02-14 15:37:02.000000000","message":"Done","commit_id":"6aa1c3317e3c4eb1e325257d6e5a17a530066c31"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"e63a12c0d5e541d935b46ecedec0d76a30c88830","unresolved":true,"context_lines":[{"line_number":16,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":17,"context_line":"#    under the License."},{"line_number":18,"context_line":"#"},{"line_number":19,"context_line":"# Copyright (c) 2013-2022 Wind River Systems, Inc."},{"line_number":20,"context_line":"#"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"\"\"\"Conduct all activity related system inventory."}],"source_content_type":"text/x-python","patch_set":34,"id":"7b20693c_d8aeeb0c","line":19,"range":{"start_line":19,"start_character":20,"end_line":19,"end_character":26},"updated":"2022-02-11 15:29:03.000000000","message":"if this is the only change in this file, there\u0027s not much point in keeping it.","commit_id":"fe9ce9436afff2f3f13e451b492c964d9a532242"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"60ea3cb4b0fef89999cc7b686207fa4eeb0a45ef","unresolved":true,"context_lines":[{"line_number":16,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":17,"context_line":"#    under the License."},{"line_number":18,"context_line":"#"},{"line_number":19,"context_line":"# Copyright (c) 2013-2022 Wind River Systems, Inc."},{"line_number":20,"context_line":"#"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"\"\"\"Conduct all activity related system inventory."}],"source_content_type":"text/x-python","patch_set":34,"id":"1e1a2442_e7ceb2a2","line":19,"range":{"start_line":19,"start_character":20,"end_line":19,"end_character":26},"in_reply_to":"7b20693c_d8aeeb0c","updated":"2023-01-17 19:54:40.000000000","message":"Please remove this file from the commit.","commit_id":"fe9ce9436afff2f3f13e451b492c964d9a532242"}],"sysinv/sysinv/sysinv/sysinv/helm/lifecycle_utils.py":[{"author":{"_account_id":30852,"name":"Dan Voiculeasa","email":"Dan.Voiculeasa@windriver.com","username":"dvoicule"},"change_message_id":"70533ec9506f4ef66bae35da22a5297150f5a303","unresolved":true,"context_lines":[{"line_number":274,"context_line":"            LOG.error(e)"},{"line_number":275,"context_line":"            raise"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"def remove_app_local_registry_images(self, context, rpc_app): "},{"line_number":278,"context_line":"    \"\"\""},{"line_number":279,"context_line":"    Remove all unused app images from local registry."},{"line_number":280,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":18,"id":"91c2f95d_3309c8e4","line":277,"range":{"start_line":277,"start_character":61,"end_line":277,"end_character":62},"updated":"2022-01-21 15:37:09.000000000","message":"whitespace","commit_id":"6aa1c3317e3c4eb1e325257d6e5a17a530066c31"},{"author":{"_account_id":33662,"name":"Daniel Stevens Torres Cardenas","email":"DanielStevens.TorresCardenas@windriver.com","username":"dcardenas"},"change_message_id":"b56f4381241763475c1708949657beb2569230af","unresolved":false,"context_lines":[{"line_number":274,"context_line":"            LOG.error(e)"},{"line_number":275,"context_line":"            raise"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"def remove_app_local_registry_images(self, context, rpc_app): "},{"line_number":278,"context_line":"    \"\"\""},{"line_number":279,"context_line":"    Remove all unused app images from local registry."},{"line_number":280,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":18,"id":"d171a09d_9fc2f4d0","line":277,"range":{"start_line":277,"start_character":61,"end_line":277,"end_character":62},"in_reply_to":"91c2f95d_3309c8e4","updated":"2022-01-24 14:55:54.000000000","message":"Done","commit_id":"6aa1c3317e3c4eb1e325257d6e5a17a530066c31"},{"author":{"_account_id":30852,"name":"Dan Voiculeasa","email":"Dan.Voiculeasa@windriver.com","username":"dvoicule"},"change_message_id":"70533ec9506f4ef66bae35da22a5297150f5a303","unresolved":true,"context_lines":[{"line_number":281,"context_line":"    apps_images \u003d self.docker_get_apps_images(context)"},{"line_number":282,"context_line":"    app_images \u003d set()"},{"line_number":283,"context_line":"    other_images \u003d set()"},{"line_number":284,"context_line":"    "},{"line_number":285,"context_line":"    for app, images in apps_images.items():"},{"line_number":286,"context_line":"        if(app \u003d\u003d rpc_app.name):"},{"line_number":287,"context_line":"            app_images \u003d set(images)"}],"source_content_type":"text/x-python","patch_set":18,"id":"a3b076ab_6884395c","line":284,"range":{"start_line":284,"start_character":0,"end_line":284,"end_character":4},"updated":"2022-01-21 15:37:09.000000000","message":"whitespace","commit_id":"6aa1c3317e3c4eb1e325257d6e5a17a530066c31"},{"author":{"_account_id":33662,"name":"Daniel Stevens Torres Cardenas","email":"DanielStevens.TorresCardenas@windriver.com","username":"dcardenas"},"change_message_id":"b56f4381241763475c1708949657beb2569230af","unresolved":false,"context_lines":[{"line_number":281,"context_line":"    apps_images \u003d self.docker_get_apps_images(context)"},{"line_number":282,"context_line":"    app_images \u003d set()"},{"line_number":283,"context_line":"    other_images \u003d set()"},{"line_number":284,"context_line":"    "},{"line_number":285,"context_line":"    for app, images in apps_images.items():"},{"line_number":286,"context_line":"        if(app \u003d\u003d rpc_app.name):"},{"line_number":287,"context_line":"            app_images \u003d set(images)"}],"source_content_type":"text/x-python","patch_set":18,"id":"161dace3_9b5d7963","line":284,"range":{"start_line":284,"start_character":0,"end_line":284,"end_character":4},"in_reply_to":"a3b076ab_6884395c","updated":"2022-01-24 14:55:54.000000000","message":"Done","commit_id":"6aa1c3317e3c4eb1e325257d6e5a17a530066c31"},{"author":{"_account_id":30852,"name":"Dan Voiculeasa","email":"Dan.Voiculeasa@windriver.com","username":"dvoicule"},"change_message_id":"70533ec9506f4ef66bae35da22a5297150f5a303","unresolved":true,"context_lines":[{"line_number":290,"context_line":""},{"line_number":291,"context_line":"    images_to_remove \u003d [x for x in app_images if x not in app_images.intersection(other_images)]"},{"line_number":292,"context_line":"    for image_name_and_tag in images_to_remove:"},{"line_number":293,"context_line":"\ttry:"},{"line_number":294,"context_line":"            LOG.info(\"Removing Image %s.\" % (image_name_and_tag))"},{"line_number":295,"context_line":"            self.docker_registry_image_delete(context, image_name_and_tag)"},{"line_number":296,"context_line":"\t    LOG.info(\"Image %s removed successfully.\" % (image_name_and_tag))"}],"source_content_type":"text/x-python","patch_set":18,"id":"368ba7e9_45172f62","line":293,"range":{"start_line":293,"start_character":0,"end_line":293,"end_character":1},"updated":"2022-01-21 15:37:09.000000000","message":"alignment should be using spaces","commit_id":"6aa1c3317e3c4eb1e325257d6e5a17a530066c31"},{"author":{"_account_id":33662,"name":"Daniel Stevens Torres Cardenas","email":"DanielStevens.TorresCardenas@windriver.com","username":"dcardenas"},"change_message_id":"b56f4381241763475c1708949657beb2569230af","unresolved":false,"context_lines":[{"line_number":290,"context_line":""},{"line_number":291,"context_line":"    images_to_remove \u003d [x for x in app_images if x not in app_images.intersection(other_images)]"},{"line_number":292,"context_line":"    for image_name_and_tag in images_to_remove:"},{"line_number":293,"context_line":"\ttry:"},{"line_number":294,"context_line":"            LOG.info(\"Removing Image %s.\" % (image_name_and_tag))"},{"line_number":295,"context_line":"            self.docker_registry_image_delete(context, image_name_and_tag)"},{"line_number":296,"context_line":"\t    LOG.info(\"Image %s removed successfully.\" % (image_name_and_tag))"}],"source_content_type":"text/x-python","patch_set":18,"id":"6acf6e5e_eec0818d","line":293,"range":{"start_line":293,"start_character":0,"end_line":293,"end_character":1},"in_reply_to":"368ba7e9_45172f62","updated":"2022-01-24 14:55:54.000000000","message":"Done","commit_id":"6aa1c3317e3c4eb1e325257d6e5a17a530066c31"},{"author":{"_account_id":30852,"name":"Dan Voiculeasa","email":"Dan.Voiculeasa@windriver.com","username":"dvoicule"},"change_message_id":"70533ec9506f4ef66bae35da22a5297150f5a303","unresolved":true,"context_lines":[{"line_number":293,"context_line":"\ttry:"},{"line_number":294,"context_line":"            LOG.info(\"Removing Image %s.\" % (image_name_and_tag))"},{"line_number":295,"context_line":"            self.docker_registry_image_delete(context, image_name_and_tag)"},{"line_number":296,"context_line":"\t    LOG.info(\"Image %s removed successfully.\" % (image_name_and_tag))"},{"line_number":297,"context_line":"        except Exception as e:"},{"line_number":298,"context_line":"            LOG.error(e)"},{"line_number":299,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":18,"id":"8b7a99aa_cf5fecc9","line":296,"range":{"start_line":296,"start_character":0,"end_line":296,"end_character":5},"updated":"2022-01-21 15:37:09.000000000","message":"alignment should be using spaces","commit_id":"6aa1c3317e3c4eb1e325257d6e5a17a530066c31"},{"author":{"_account_id":33662,"name":"Daniel Stevens Torres Cardenas","email":"DanielStevens.TorresCardenas@windriver.com","username":"dcardenas"},"change_message_id":"b56f4381241763475c1708949657beb2569230af","unresolved":false,"context_lines":[{"line_number":293,"context_line":"\ttry:"},{"line_number":294,"context_line":"            LOG.info(\"Removing Image %s.\" % (image_name_and_tag))"},{"line_number":295,"context_line":"            self.docker_registry_image_delete(context, image_name_and_tag)"},{"line_number":296,"context_line":"\t    LOG.info(\"Image %s removed successfully.\" % (image_name_and_tag))"},{"line_number":297,"context_line":"        except Exception as e:"},{"line_number":298,"context_line":"            LOG.error(e)"},{"line_number":299,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":18,"id":"cae91959_1490bb8b","line":296,"range":{"start_line":296,"start_character":0,"end_line":296,"end_character":5},"in_reply_to":"8b7a99aa_cf5fecc9","updated":"2022-01-24 14:55:54.000000000","message":"Done","commit_id":"6aa1c3317e3c4eb1e325257d6e5a17a530066c31"},{"author":{"_account_id":30852,"name":"Dan Voiculeasa","email":"Dan.Voiculeasa@windriver.com","username":"dvoicule"},"change_message_id":"b248d81a3ad191270bba9cf724f74ab35ee88346","unresolved":true,"context_lines":[{"line_number":283,"context_line":"    :param hook_info: LifecycleHookInfo object"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    \"\"\""},{"line_number":286,"context_line":"    apps_images \u003d app_op.docker_get_apps_images(app.name)"},{"line_number":287,"context_line":"    app_images \u003d set()"},{"line_number":288,"context_line":"    other_images \u003d set()"},{"line_number":289,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"32395e05_ba1503d3","line":286,"range":{"start_line":286,"start_character":4,"end_line":286,"end_character":57},"updated":"2022-01-25 20:32:18.000000000","message":"I can see that indeed an AppOperator is passed here: https://review.opendev.org/c/starlingx/openstack-armada-app/+/826112/3/python-k8sapp-openstack/k8sapp_openstack/k8sapp_openstack/lifecycle/lifecycle_openstack.py#53\n\n\nReading the code .. this shouldn\u0027t work, as AppOperator doesn\u0027t have the docker_get_apps_images field.\n\nOr am I missing something?","commit_id":"0ef39be2a49550d79b3aff43dcc3f60fa3d5abe4"},{"author":{"_account_id":30852,"name":"Dan Voiculeasa","email":"Dan.Voiculeasa@windriver.com","username":"dvoicule"},"change_message_id":"b248d81a3ad191270bba9cf724f74ab35ee88346","unresolved":true,"context_lines":[{"line_number":297,"context_line":"    for image_name_and_tag in images_to_remove:"},{"line_number":298,"context_line":"        try:"},{"line_number":299,"context_line":"            LOG.info(\"Removing Image %s.\" % (image_name_and_tag))"},{"line_number":300,"context_line":"            app_op.docker_registry_image_delete(app.name, image_name_and_tag)"},{"line_number":301,"context_line":"            LOG.info(\"Image %s removed successfully.\" % (image_name_and_tag))"},{"line_number":302,"context_line":"        except Exception as e:"},{"line_number":303,"context_line":"            LOG.error(e)"}],"source_content_type":"text/x-python","patch_set":26,"id":"a03564bf_81343ffc","line":300,"range":{"start_line":300,"start_character":48,"end_line":300,"end_character":56},"updated":"2022-01-25 20:32:18.000000000","message":"Is there a reason why we should change the old object?","commit_id":"0ef39be2a49550d79b3aff43dcc3f60fa3d5abe4"},{"author":{"_account_id":30852,"name":"Dan Voiculeasa","email":"Dan.Voiculeasa@windriver.com","username":"dvoicule"},"change_message_id":"b248d81a3ad191270bba9cf724f74ab35ee88346","unresolved":true,"context_lines":[{"line_number":297,"context_line":"    for image_name_and_tag in images_to_remove:"},{"line_number":298,"context_line":"        try:"},{"line_number":299,"context_line":"            LOG.info(\"Removing Image %s.\" % (image_name_and_tag))"},{"line_number":300,"context_line":"            app_op.docker_registry_image_delete(app.name, image_name_and_tag)"},{"line_number":301,"context_line":"            LOG.info(\"Image %s removed successfully.\" % (image_name_and_tag))"},{"line_number":302,"context_line":"        except Exception as e:"},{"line_number":303,"context_line":"            LOG.error(e)"}],"source_content_type":"text/x-python","patch_set":26,"id":"47a90f53_7d229aee","line":300,"range":{"start_line":300,"start_character":12,"end_line":300,"end_character":18},"updated":"2022-01-25 20:32:18.000000000","message":"Reading the code .. this shouldn\u0027t work, as AppOperator doesn\u0027t have the docker_registry_image_delete field.\n\nOr am I missing something?","commit_id":"0ef39be2a49550d79b3aff43dcc3f60fa3d5abe4"},{"author":{"_account_id":9926,"name":"John Kung","email":"john.kung@windriver.com","username":"jkung"},"change_message_id":"38b654c4f945cda11cd8de32aaef6825500c90b1","unresolved":true,"context_lines":[{"line_number":275,"context_line":"            raise"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"def remove_app_local_registry_images(conductor_obj, app):"},{"line_number":279,"context_line":"    \"\"\" Remove all unused app images from local registry"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    :param conductor_obj: conductor object"}],"source_content_type":"text/x-python","patch_set":27,"id":"480df8b1_34b063b9","line":278,"updated":"2022-01-27 14:11:27.000000000","message":"Any concurrency concerns that would require a synchronization lock?","commit_id":"14fe598ba78e4bdfb2733140aa9ead03c6985efd"},{"author":{"_account_id":33662,"name":"Daniel Stevens Torres Cardenas","email":"DanielStevens.TorresCardenas@windriver.com","username":"dcardenas"},"change_message_id":"85170da66b131949f714387382c2496d3ed2269a","unresolved":true,"context_lines":[{"line_number":275,"context_line":"            raise"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"def remove_app_local_registry_images(conductor_obj, app):"},{"line_number":279,"context_line":"    \"\"\" Remove all unused app images from local registry"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    :param conductor_obj: conductor object"}],"source_content_type":"text/x-python","patch_set":27,"id":"65375eb4_c8675fba","line":278,"in_reply_to":"480df8b1_34b063b9","updated":"2022-02-01 12:43:05.000000000","message":"I think the synchronization lock was done by app_lifecycle_actions as you can see in the following review: https://review.opendev.org/c/starlingx/openstack-armada-app/+/826112","commit_id":"14fe598ba78e4bdfb2733140aa9ead03c6985efd"},{"author":{"_account_id":30852,"name":"Dan Voiculeasa","email":"Dan.Voiculeasa@windriver.com","username":"dvoicule"},"change_message_id":"073bf3e897da5a1910e00df0bb14c9bc8523069d","unresolved":true,"context_lines":[{"line_number":275,"context_line":"            raise"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"def remove_app_local_registry_images(conductor_obj, app):"},{"line_number":279,"context_line":"    \"\"\" Remove all unused app images from local registry"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    :param conductor_obj: conductor object"}],"source_content_type":"text/x-python","patch_set":27,"id":"29c886a8_d922d767","line":278,"in_reply_to":"65375eb4_c8675fba","updated":"2022-02-02 09:32:47.000000000","message":"About the concurrency concern: yes, we need to make an atomic operation for reading apps from db, deleting apps from db, and app image logic between.\n\u0027\u0027\n1) read apps from db\n2) delete app images based on read apps\n3) delete app from db\n\u0027\u0027\u0027\nThis translates to making an atomic operation for pre-delete-hook and framework-delete-operation -\u003e perform_app_delete itself should use a synchronization mechanism.","commit_id":"14fe598ba78e4bdfb2733140aa9ead03c6985efd"},{"author":{"_account_id":9926,"name":"John Kung","email":"john.kung@windriver.com","username":"jkung"},"change_message_id":"38b654c4f945cda11cd8de32aaef6825500c90b1","unresolved":true,"context_lines":[{"line_number":277,"context_line":""},{"line_number":278,"context_line":"def remove_app_local_registry_images(conductor_obj, app):"},{"line_number":279,"context_line":"    \"\"\" Remove all unused app images from local registry"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    :param conductor_obj: conductor object"},{"line_number":282,"context_line":"    :param app: AppOperator.Application object"},{"line_number":283,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"bbcdb921_3e837bfc","line":280,"updated":"2022-01-27 14:11:27.000000000","message":"Comment should be updated regarding where this method may be called from - by the application plugin itself?","commit_id":"14fe598ba78e4bdfb2733140aa9ead03c6985efd"},{"author":{"_account_id":33662,"name":"Daniel Stevens Torres Cardenas","email":"DanielStevens.TorresCardenas@windriver.com","username":"dcardenas"},"change_message_id":"85170da66b131949f714387382c2496d3ed2269a","unresolved":false,"context_lines":[{"line_number":277,"context_line":""},{"line_number":278,"context_line":"def remove_app_local_registry_images(conductor_obj, app):"},{"line_number":279,"context_line":"    \"\"\" Remove all unused app images from local registry"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    :param conductor_obj: conductor object"},{"line_number":282,"context_line":"    :param app: AppOperator.Application object"},{"line_number":283,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"9794df74_27541094","line":280,"in_reply_to":"bbcdb921_3e837bfc","updated":"2022-02-01 12:43:05.000000000","message":"Done","commit_id":"14fe598ba78e4bdfb2733140aa9ead03c6985efd"},{"author":{"_account_id":30852,"name":"Dan Voiculeasa","email":"Dan.Voiculeasa@windriver.com","username":"dvoicule"},"change_message_id":"9ea80731f85e3abcb44092c488bd406b8829614c","unresolved":true,"context_lines":[{"line_number":282,"context_line":"    :param app: AppOperator.Application object"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    \"\"\""},{"line_number":285,"context_line":"    apps_images \u003d conductor_obj.docker_get_apps_images(app.name)"},{"line_number":286,"context_line":"    app_images \u003d set()"},{"line_number":287,"context_line":"    other_images \u003d set()"},{"line_number":288,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"0e1f803a_81da2748","line":285,"range":{"start_line":285,"start_character":55,"end_line":285,"end_character":63},"updated":"2022-01-27 14:19:04.000000000","message":"The old object was something else: \u0027context\u0027. I can see it is unused now, and of course it should be removed(not related to this work), but we should keep the same interface otherwise it will start crashing when/if it will be used.","commit_id":"14fe598ba78e4bdfb2733140aa9ead03c6985efd"},{"author":{"_account_id":33662,"name":"Daniel Stevens Torres Cardenas","email":"DanielStevens.TorresCardenas@windriver.com","username":"dcardenas"},"change_message_id":"85170da66b131949f714387382c2496d3ed2269a","unresolved":false,"context_lines":[{"line_number":282,"context_line":"    :param app: AppOperator.Application object"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    \"\"\""},{"line_number":285,"context_line":"    apps_images \u003d conductor_obj.docker_get_apps_images(app.name)"},{"line_number":286,"context_line":"    app_images \u003d set()"},{"line_number":287,"context_line":"    other_images \u003d set()"},{"line_number":288,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"6400f0b6_8d59dd89","line":285,"range":{"start_line":285,"start_character":55,"end_line":285,"end_character":63},"in_reply_to":"0e1f803a_81da2748","updated":"2022-02-01 12:43:05.000000000","message":"Done","commit_id":"14fe598ba78e4bdfb2733140aa9ead03c6985efd"},{"author":{"_account_id":30852,"name":"Dan Voiculeasa","email":"Dan.Voiculeasa@windriver.com","username":"dvoicule"},"change_message_id":"9ea80731f85e3abcb44092c488bd406b8829614c","unresolved":true,"context_lines":[{"line_number":296,"context_line":"    for image_name_and_tag in images_to_remove:"},{"line_number":297,"context_line":"        try:"},{"line_number":298,"context_line":"            LOG.info(\"Removing Image %s.\" % (image_name_and_tag))"},{"line_number":299,"context_line":"            conductor_obj.docker_registry_image_delete(app.name, image_name_and_tag)"},{"line_number":300,"context_line":"            LOG.info(\"Image %s removed successfully.\" % (image_name_and_tag))"},{"line_number":301,"context_line":"        except Exception as e:"},{"line_number":302,"context_line":"            LOG.error(e)"}],"source_content_type":"text/x-python","patch_set":27,"id":"4cf17c22_7e1117a9","line":299,"range":{"start_line":299,"start_character":55,"end_line":299,"end_character":63},"updated":"2022-01-27 14:19:04.000000000","message":"The old object was something else: \u0027context\u0027. I can see it is unused now, and of course it should be removed(not related to this work), but we should keep the same interface otherwise it will start crashing when/if it will be used.","commit_id":"14fe598ba78e4bdfb2733140aa9ead03c6985efd"},{"author":{"_account_id":33662,"name":"Daniel Stevens Torres Cardenas","email":"DanielStevens.TorresCardenas@windriver.com","username":"dcardenas"},"change_message_id":"85170da66b131949f714387382c2496d3ed2269a","unresolved":false,"context_lines":[{"line_number":296,"context_line":"    for image_name_and_tag in images_to_remove:"},{"line_number":297,"context_line":"        try:"},{"line_number":298,"context_line":"            LOG.info(\"Removing Image %s.\" % (image_name_and_tag))"},{"line_number":299,"context_line":"            conductor_obj.docker_registry_image_delete(app.name, image_name_and_tag)"},{"line_number":300,"context_line":"            LOG.info(\"Image %s removed successfully.\" % (image_name_and_tag))"},{"line_number":301,"context_line":"        except Exception as e:"},{"line_number":302,"context_line":"            LOG.error(e)"}],"source_content_type":"text/x-python","patch_set":27,"id":"1e7291e3_6ecaadd1","line":299,"range":{"start_line":299,"start_character":55,"end_line":299,"end_character":63},"in_reply_to":"4cf17c22_7e1117a9","updated":"2022-02-01 12:43:05.000000000","message":"Done","commit_id":"14fe598ba78e4bdfb2733140aa9ead03c6985efd"},{"author":{"_account_id":30852,"name":"Dan Voiculeasa","email":"Dan.Voiculeasa@windriver.com","username":"dvoicule"},"change_message_id":"006af1fcaedd3576d78a6fcce1b6ef8234c2fcb3","unresolved":true,"context_lines":[{"line_number":288,"context_line":"    other_images \u003d set()"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"    for app, images in apps_images.items():"},{"line_number":291,"context_line":"        if(app \u003d\u003d app.name):"},{"line_number":292,"context_line":"            app_images \u003d set(images)"},{"line_number":293,"context_line":"        else:"},{"line_number":294,"context_line":"            other_images.update(set(images))"}],"source_content_type":"text/x-python","patch_set":28,"id":"1860a687_b416001b","line":291,"range":{"start_line":291,"start_character":11,"end_line":291,"end_character":26},"updated":"2022-02-01 12:50:54.000000000","message":"This is plain wrong, redefining a variable(local app in the for loop vs argument of the function). This will result in a runtime error, the key in the dict is a string, the string won\u0027t have a \u0027name\u0027 field.\n\nHow was this tested?","commit_id":"c91506567fbab90ef50464400fbc088fd27075d5"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"60ea3cb4b0fef89999cc7b686207fa4eeb0a45ef","unresolved":true,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Copyright (c) 2022 Wind River Systems, Inc."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# SPDX-License-Identifier: Apache-2.0"},{"line_number":5,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":34,"id":"4e0e7ba9_a52818e0","line":2,"range":{"start_line":2,"start_character":18,"end_line":2,"end_character":22},"updated":"2023-01-17 19:54:40.000000000","message":"should be 2023","commit_id":"fe9ce9436afff2f3f13e451b492c964d9a532242"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"60ea3cb4b0fef89999cc7b686207fa4eeb0a45ef","unresolved":true,"context_lines":[{"line_number":279,"context_line":"    \"\"\" Remove all unused app images from local registry."},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    This method may be called from"},{"line_number":282,"context_line":"    OpenstackAppLifecycleOperator.app_lifecycle_actions"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    :param context: request context"},{"line_number":285,"context_line":"    :param conductor_obj: conductor object"}],"source_content_type":"text/x-python","patch_set":34,"id":"928e8930_a1b2d4aa","line":282,"range":{"start_line":282,"start_character":4,"end_line":282,"end_character":55},"updated":"2023-01-17 19:54:40.000000000","message":"Is there another commit that actually calls this function?","commit_id":"fe9ce9436afff2f3f13e451b492c964d9a532242"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"fee1a3eec461961b244eaceca92bc6243d292877","unresolved":true,"context_lines":[{"line_number":279,"context_line":"    \"\"\" Remove all unused app images from local registry."},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    This method may be called from"},{"line_number":282,"context_line":"    OpenstackAppLifecycleOperator.app_lifecycle_actions"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    :param context: request context"},{"line_number":285,"context_line":"    :param conductor_obj: conductor object"}],"source_content_type":"text/x-python","patch_set":34,"id":"772b29e2_8bd5078f","line":282,"range":{"start_line":282,"start_character":4,"end_line":282,"end_character":55},"in_reply_to":"928e8930_a1b2d4aa","updated":"2023-01-17 19:57:28.000000000","message":"Looks like it\u0027s https://review.opendev.org/c/starlingx/openstack-armada-app/+/826112 that actually calls this, which might be something useful to include in the commit message.","commit_id":"fe9ce9436afff2f3f13e451b492c964d9a532242"}]}
