)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"8f9e7a8378dddc5d5c0971f75fadf423248105f9","unresolved":true,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"It takes over patch https://review.opendev.org/c/openstack/cinder/+/856041,"},{"line_number":16,"context_line":"taking comments into account."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: I22daff4c806a7c896d2a838b3e2ac0a81113b3e8"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"15c6e6c6_e1402219","line":17,"updated":"2025-09-01 07:15:08.000000000","message":"nit: below line can be added.\nCloses-Bug: #1907295","commit_id":"67ac0fca89d77c63958df0d3f2a9d13e26bef8eb"},{"author":{"_account_id":37535,"name":"Florent Le Lain","display_name":"flelain","email":"florent.le-lain@ovhcloud.com","username":"flelain"},"change_message_id":"e8a73b5157b7de1f4c1bfc05f9a43225753dd080","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"It takes over patch https://review.opendev.org/c/openstack/cinder/+/856041,"},{"line_number":16,"context_line":"taking comments into account."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: I22daff4c806a7c896d2a838b3e2ac0a81113b3e8"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"4e33eb75_15a91ecd","line":17,"in_reply_to":"15c6e6c6_e1402219","updated":"2025-09-02 13:09:24.000000000","message":"Acknowledged","commit_id":"67ac0fca89d77c63958df0d3f2a9d13e26bef8eb"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"1727eb3d4f902666ce8643b6c28f3c7e5157543c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"597f783e_e69b7db1","updated":"2024-12-11 22:51:06.000000000","message":"Forgot to vote.","commit_id":"41b7af5c3af59541d7f8f76cd4c1e938299292d1"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"52c66a8a3906e8c4bc8e98f63245a07cb917f477","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"f1aa41a2_5f709b14","updated":"2024-12-11 22:50:42.000000000","message":"I think we actually want a 409 (Conflict).  Also see comment inline for a suggestion for restructuring your fix.\n\nAlso, if you accept my suggestion for a 409, you\u0027ll need to update the attachment-update call docs in the api-ref (see comment inline).\n\nFinally, I think this will need a release note.  Follow the usual format for a bug fix [0], and say something like \"When a volume was not in the correct status to accept an attachment update, the REST API was returning a 500 (Internal Server Error).  It now correctly returns the response code 409 (Conflict) in this situation.\"\n\n[0] https://docs.openstack.org/cinder/latest/contributor/releasenotes.html#bugs","commit_id":"41b7af5c3af59541d7f8f76cd4c1e938299292d1"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"d1b9b0b94421c3a14b220a8f0b0d5965f9386495","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"c28dd9d8_5dd8153b","updated":"2024-12-11 18:53:03.000000000","message":"recheck cinder-tempest-plugin-lvm-lio-barbican - tempest.api.compute.servers.test_server_actions.ServerActionsTestOtherA.test_resize_volume_backed_server_confirm : can\u0027t connect to the instance","commit_id":"41b7af5c3af59541d7f8f76cd4c1e938299292d1"},{"author":{"_account_id":37535,"name":"Florent Le Lain","display_name":"flelain","email":"florent.le-lain@ovhcloud.com","username":"flelain"},"change_message_id":"4243254a18022828c6f1f936253d1261bd7b31e6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"c0f69748_d19c8046","updated":"2024-12-11 15:04:45.000000000","message":"recheck devstack-plugin-nfs-tempest-full","commit_id":"41b7af5c3af59541d7f8f76cd4c1e938299292d1"},{"author":{"_account_id":37535,"name":"Florent Le Lain","display_name":"flelain","email":"florent.le-lain@ovhcloud.com","username":"flelain"},"change_message_id":"0e922edba88631d44fb656454c3af57394ec7a08","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"bc7a93a3_f62f08dd","in_reply_to":"f1aa41a2_5f709b14","updated":"2024-12-17 13:36:38.000000000","message":"back to unresolved (unseen before)\n\n409 suggestion is excellent! Now, since Invalid class exception is hard coded with a 400, I couldn\u0027t override InvalidVolume class instanciation in \u0027cinder/volume/api.py\u0027 with a 409. That\u0027s why I created a new child exception to \u0027Invalid\u0027 Class: \u0027ResourceConflict\u0027. This latter narrows down to the very specific case we focus on here.\n\nOk, saw your recommendation about api-ref and release note. Will do.","commit_id":"41b7af5c3af59541d7f8f76cd4c1e938299292d1"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"793705a90199fbcb053fa79737f6f9c7c92c2266","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"07aa3588_494e44e6","updated":"2024-12-12 16:06:44.000000000","message":"Revision looks mostly good, but you need to fix the unit tests.","commit_id":"a7cd9a59d56de82592ebe640899b7b1a8f0fe882"},{"author":{"_account_id":37535,"name":"Florent Le Lain","display_name":"flelain","email":"florent.le-lain@ovhcloud.com","username":"flelain"},"change_message_id":"5bb57a1e8ad9e6b34da552f2a81460e0ba43e9d7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"83bf7ca1_256c0145","updated":"2024-12-12 15:01:10.000000000","message":"recheck devstack-plugin-nfs-tempest-full","commit_id":"a7cd9a59d56de82592ebe640899b7b1a8f0fe882"},{"author":{"_account_id":37535,"name":"Florent Le Lain","display_name":"flelain","email":"florent.le-lain@ovhcloud.com","username":"flelain"},"change_message_id":"ef8525f4b078671be095b28da011473bdebebc8d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"2c9331c1_6e4e514c","updated":"2024-12-18 08:18:02.000000000","message":"recheck devstack-plugin-nfs-tempest-full","commit_id":"25cc8752e25009b9a426327c04bb8161a7bf75f7"},{"author":{"_account_id":37535,"name":"Florent Le Lain","display_name":"flelain","email":"florent.le-lain@ovhcloud.com","username":"flelain"},"change_message_id":"ef6f1ebd338b6d193d80e56753446809e2cae421","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"eb8a1413_ecdb474e","updated":"2024-12-17 15:36:00.000000000","message":"recheck devstack-plugin-nfs-tempest-full","commit_id":"25cc8752e25009b9a426327c04bb8161a7bf75f7"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"8f9e7a8378dddc5d5c0971f75fadf423248105f9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"fd228592_676695f3","updated":"2025-09-01 07:15:08.000000000","message":"Code and UT look good. Zuul also passed.\nMinor comment in commit message.","commit_id":"67ac0fca89d77c63958df0d3f2a9d13e26bef8eb"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"387542840ea3c622f20ed57c78ec2a9034f51055","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"3f876c08_24519d1f","updated":"2025-09-04 19:55:56.000000000","message":"Revisions since my last review LGTM.  Raghavendra makes a good point about having \n\"closes-bug\" in the commit message, but I don\u0027t want to hold up this patch over that.  But if another reviewer asks for a change, don\u0027t forget to add the Closes-bug.  With it not there, someone will need to go to the launchpad bug and manually mark it as \"fix released\" after this patch merges.","commit_id":"67ac0fca89d77c63958df0d3f2a9d13e26bef8eb"},{"author":{"_account_id":37535,"name":"Florent Le Lain","display_name":"flelain","email":"florent.le-lain@ovhcloud.com","username":"flelain"},"change_message_id":"e8a73b5157b7de1f4c1bfc05f9a43225753dd080","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"3d845a56_0c9bdc8d","updated":"2025-09-02 13:09:24.000000000","message":"Thank you Ragha!","commit_id":"67ac0fca89d77c63958df0d3f2a9d13e26bef8eb"},{"author":{"_account_id":37535,"name":"Florent Le Lain","display_name":"flelain","email":"florent.le-lain@ovhcloud.com","username":"flelain"},"change_message_id":"8d80ef661556c49d223b6d64881400095830ce3b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"90834163_645ad0f7","updated":"2024-12-19 08:25:51.000000000","message":"devstack-plugin-nfs-tempest-full","commit_id":"67ac0fca89d77c63958df0d3f2a9d13e26bef8eb"},{"author":{"_account_id":37535,"name":"Florent Le Lain","display_name":"flelain","email":"florent.le-lain@ovhcloud.com","username":"flelain"},"change_message_id":"65544ec1f4511da4ea33c7a7f7d3e524e1d69999","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"a1f950c4_65d88f11","updated":"2024-12-20 10:51:23.000000000","message":"devstack-plugin-nfs-tempest-full","commit_id":"67ac0fca89d77c63958df0d3f2a9d13e26bef8eb"},{"author":{"_account_id":37535,"name":"Florent Le Lain","display_name":"flelain","email":"florent.le-lain@ovhcloud.com","username":"flelain"},"change_message_id":"e92231ee14da77c71457efae6dbc0de72a602075","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"bf46c260_f6d6bd5d","updated":"2024-12-23 14:54:27.000000000","message":"devstack-plugin-nfs-tempest-full","commit_id":"67ac0fca89d77c63958df0d3f2a9d13e26bef8eb"},{"author":{"_account_id":37535,"name":"Florent Le Lain","display_name":"flelain","email":"florent.le-lain@ovhcloud.com","username":"flelain"},"change_message_id":"62b868ccc458ebc5fa00f47147bb91464189fe44","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"6c2e5ee6_18b74358","updated":"2024-12-23 14:55:21.000000000","message":"recheck devstack-plugin-nfs-tempest-full","commit_id":"67ac0fca89d77c63958df0d3f2a9d13e26bef8eb"}],"api-ref/source/v3/attachments.inc":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"52c66a8a3906e8c4bc8e98f63245a07cb917f477","unresolved":true,"context_lines":[{"line_number":325,"context_line":".. rest_status_code:: error ../status.yaml"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"   - 400"},{"line_number":328,"context_line":"   - 404"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"Request"},{"line_number":331,"context_line":"-------"}],"source_content_type":"text/x-c++src","patch_set":1,"id":"0be05808_7e212446","line":328,"updated":"2024-12-11 22:50:42.000000000","message":"add a 409 to this list","commit_id":"41b7af5c3af59541d7f8f76cd4c1e938299292d1"},{"author":{"_account_id":37535,"name":"Florent Le Lain","display_name":"flelain","email":"florent.le-lain@ovhcloud.com","username":"flelain"},"change_message_id":"5bb57a1e8ad9e6b34da552f2a81460e0ba43e9d7","unresolved":false,"context_lines":[{"line_number":325,"context_line":".. rest_status_code:: error ../status.yaml"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"   - 400"},{"line_number":328,"context_line":"   - 404"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"Request"},{"line_number":331,"context_line":"-------"}],"source_content_type":"text/x-c++src","patch_set":1,"id":"2c12929c_873d9f95","line":328,"in_reply_to":"0be05808_7e212446","updated":"2024-12-12 15:01:10.000000000","message":"Done","commit_id":"41b7af5c3af59541d7f8f76cd4c1e938299292d1"}],"cinder/api/v3/attachments.py":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"52c66a8a3906e8c4bc8e98f63245a07cb917f477","unresolved":true,"context_lines":[{"line_number":265,"context_line":"        except Exception:"},{"line_number":266,"context_line":"            err_msg \u003d _(\"Unable to update the attachment.\")"},{"line_number":267,"context_line":"            LOG.exception(err_msg)"},{"line_number":268,"context_line":"            raise webob.exc.HTTPInternalServerError(explanation\u003derr_msg)"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"        # TODO(jdg): Test this out some more, do we want to return and object"},{"line_number":271,"context_line":"        # or a dict?"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f89f4c3_db6e3992","line":268,"updated":"2024-12-11 22:50:42.000000000","message":"A few things about how you are handling this.\n\nFirst, any exception.Invalid is converted to a webob 400 at a higher level:\nhttps://opendev.org/openstack/cinder/src/commit/0d2a27e2fb350fd126824698fa443b90e2abe857/cinder/api/openstack/wsgi.py#L600-L602\n\nSo if all you want is a 400, you can simply change line 253 to\n\n```\n    except (exception.NotAuthorized, exception.Invalid):\n```\n\nHowever, looking at the code that raises the InvalidVolume in the volume api,\nit looks like what we really want is a 409, not a 400:\n\nhttps://opendev.org/openstack/cinder/src/commit/0d2a27e2fb350fd126824698fa443b90e2abe857/cinder/volume/api.py#L2544-L2551\n\nhttps://opendev.org/openstack/cinder/src/commit/0d2a27e2fb350fd126824698fa443b90e2abe857/cinder/volume/api.py#L2567-L2573\n\nYou could catch that here and set a 409, but I think it would be better to just re-raise the exception.Invalid here by changing line 253, and set the 409 in cinder/volume/api.py at the point where it\u0027s raised, since we know for sure at that point that it\u0027s a conflict.\n\nIn other words, those two raises in the volume api would look like:\n\n```\n    raise exception.InvalidVolume(reason\u003dmsg, code\u003d409)\n```\n\nIf you change line 253 the way I suggest above, it will catch InvalidVolume (since it\u0027s a subclass of Invalid), so you won\u0027t need to raise an explicit webob exception yourself.\n\nFinally, since you won\u0027t be using the err_msg variable in your code (you\u0027ll just let the ResourceExceptionHandler take care of processing the message), you could go back to the \"finally\" block in the original code (which would keep symmetry with the attachment create code).","commit_id":"41b7af5c3af59541d7f8f76cd4c1e938299292d1"},{"author":{"_account_id":37535,"name":"Florent Le Lain","display_name":"flelain","email":"florent.le-lain@ovhcloud.com","username":"flelain"},"change_message_id":"5bb57a1e8ad9e6b34da552f2a81460e0ba43e9d7","unresolved":false,"context_lines":[{"line_number":265,"context_line":"        except Exception:"},{"line_number":266,"context_line":"            err_msg \u003d _(\"Unable to update the attachment.\")"},{"line_number":267,"context_line":"            LOG.exception(err_msg)"},{"line_number":268,"context_line":"            raise webob.exc.HTTPInternalServerError(explanation\u003derr_msg)"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"        # TODO(jdg): Test this out some more, do we want to return and object"},{"line_number":271,"context_line":"        # or a dict?"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a6f662c_32bc105a","line":268,"in_reply_to":"3f89f4c3_db6e3992","updated":"2024-12-12 15:01:10.000000000","message":"That\u0027s awesomely good and exhaustive! Thank you Brian!\nSuggesting sthg this way in new patchset!","commit_id":"41b7af5c3af59541d7f8f76cd4c1e938299292d1"}],"cinder/tests/unit/api/v3/test_attachments.py":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"793705a90199fbcb053fa79737f6f9c7c92c2266","unresolved":true,"context_lines":[{"line_number":180,"context_line":"                },"},{"line_number":181,"context_line":"        }"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        self.assertRaises(webob.exc.HTTPBadRequest,"},{"line_number":184,"context_line":"                          self.controller.update, req,"},{"line_number":185,"context_line":"                          self.attachment1.id, body\u003dbody)"},{"line_number":186,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5868450b_4c800e2f","line":183,"range":{"start_line":183,"start_character":26,"end_line":183,"end_character":51},"updated":"2024-12-12 16:06:44.000000000","message":"This is failing now, because the thing coming out of the controller will be a re-raise of the InvalidVolume.  I guess maybe check for exception.Invalid coming out of the controller, because we know it will be handled at the next level?\n\nSame thing with the next test at line 204.","commit_id":"a7cd9a59d56de82592ebe640899b7b1a8f0fe882"},{"author":{"_account_id":37535,"name":"Florent Le Lain","display_name":"flelain","email":"florent.le-lain@ovhcloud.com","username":"flelain"},"change_message_id":"0e922edba88631d44fb656454c3af57394ec7a08","unresolved":false,"context_lines":[{"line_number":180,"context_line":"                },"},{"line_number":181,"context_line":"        }"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        self.assertRaises(webob.exc.HTTPBadRequest,"},{"line_number":184,"context_line":"                          self.controller.update, req,"},{"line_number":185,"context_line":"                          self.attachment1.id, body\u003dbody)"},{"line_number":186,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"a3dfdbcb_5f59d12e","line":183,"range":{"start_line":183,"start_character":26,"end_line":183,"end_character":51},"in_reply_to":"5868450b_4c800e2f","updated":"2024-12-17 13:36:38.000000000","message":"yes forgot them before committing! My bad :-/ Working on it between calls 😊\nThank you!","commit_id":"a7cd9a59d56de82592ebe640899b7b1a8f0fe882"}],"cinder/tests/unit/attachments/test_attachments_api.py":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"793705a90199fbcb053fa79737f6f9c7c92c2266","unresolved":true,"context_lines":[{"line_number":306,"context_line":"                          self.volume_api.attachment_update,"},{"line_number":307,"context_line":"                          self.context,"},{"line_number":308,"context_line":"                          aref,"},{"line_number":309,"context_line":"                          connector)"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"    @mock.patch(\u0027cinder.db.sqlalchemy.api.volume_attachment_update\u0027,"},{"line_number":312,"context_line":"                return_value\u003d{})"}],"source_content_type":"text/x-python","patch_set":3,"id":"c35f74f0_d22d01e0","line":309,"updated":"2024-12-12 16:06:44.000000000","message":"The new thing you\u0027ve added is that the exception.code should be 409, so you can check for that here.  If you change line 305 to be \u0027ex \u003d self.assertRaises(...\u0027, that will give you a reference to the exception so you can check it.\n\nSame thing with the next test.","commit_id":"a7cd9a59d56de82592ebe640899b7b1a8f0fe882"},{"author":{"_account_id":37535,"name":"Florent Le Lain","display_name":"flelain","email":"florent.le-lain@ovhcloud.com","username":"flelain"},"change_message_id":"0e922edba88631d44fb656454c3af57394ec7a08","unresolved":false,"context_lines":[{"line_number":306,"context_line":"                          self.volume_api.attachment_update,"},{"line_number":307,"context_line":"                          self.context,"},{"line_number":308,"context_line":"                          aref,"},{"line_number":309,"context_line":"                          connector)"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"    @mock.patch(\u0027cinder.db.sqlalchemy.api.volume_attachment_update\u0027,"},{"line_number":312,"context_line":"                return_value\u003d{})"}],"source_content_type":"text/x-python","patch_set":3,"id":"5605eee9_eb10caaa","line":309,"in_reply_to":"c35f74f0_d22d01e0","updated":"2024-12-17 13:36:38.000000000","message":"Acknowledged","commit_id":"a7cd9a59d56de82592ebe640899b7b1a8f0fe882"}]}
