)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c514e0baa8506b6388156563d3805f3e510fe47b","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2019-07-03 08:15:45 +0530"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"HPE 3PAR-Fix for detach issue for multiattach feature enabled volumes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I31658cf986602d056978c29e12c0fc3cdbac7150"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9fb8cfa7_3fe1cdfd","line":8,"updated":"2019-07-03 11:57:30.000000000","message":"Need the line: \"Closes-bug: #1834660\" in the commit message to link and automatically close that bug. The topic is just a reference.\n\nA body to the commit message would also be helpful explaining what is being done.\n\nNit, but the summary line is too long. I would suggest \"HPE 3PAR - Fix detach of multiattach volumes\".","commit_id":"fd92aafe9a3d8b2523f89365786ea8ee2df4354d"}],"cinder/tests/unit/volume/drivers/hpe/test_hpe3par.py":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"58cc9f69ff254336898655914f37c8203c4ab75e","unresolved":false,"context_lines":[{"line_number":2175,"context_line":"                self.standard_logout +"},{"line_number":2176,"context_line":"                self.standard_login +"},{"line_number":2177,"context_line":"                expected +"},{"line_number":2178,"context_line":"                self.standard_logout, any_order\u003dTrue)"},{"line_number":2179,"context_line":""},{"line_number":2180,"context_line":"    @mock.patch.object(volume_types, \u0027get_volume_type\u0027)"},{"line_number":2181,"context_line":"    def test_retype_qos_spec(self, _mock_volume_types):"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_817edbac","line":2178,"range":{"start_line":2178,"start_character":47,"end_line":2178,"end_character":48},"updated":"2019-07-14 12:04:14.000000000","message":"honestly, these changes should be part of a refactoring patch and shouldn\u0027t be included in other fixes.","commit_id":"a0d09199548c034d2026ccd384fee43544499bcb"},{"author":{"_account_id":29502,"name":"Sneha Rai","email":"sneha.rai@hpe.com","username":"sneharai"},"change_message_id":"1a7de356dd4f150e1fd4f3c7e8618575e6306b13","unresolved":false,"context_lines":[{"line_number":2175,"context_line":"                self.standard_logout +"},{"line_number":2176,"context_line":"                self.standard_login +"},{"line_number":2177,"context_line":"                expected +"},{"line_number":2178,"context_line":"                self.standard_logout, any_order\u003dTrue)"},{"line_number":2179,"context_line":""},{"line_number":2180,"context_line":"    @mock.patch.object(volume_types, \u0027get_volume_type\u0027)"},{"line_number":2181,"context_line":"    def test_retype_qos_spec(self, _mock_volume_types):"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_b5cd5167","line":2178,"range":{"start_line":2178,"start_character":47,"end_line":2178,"end_character":48},"in_reply_to":"7faddb67_817edbac","updated":"2019-07-15 06:31:30.000000000","message":"Thanks Rajat. I will keep this in mind in my future fixes.","commit_id":"a0d09199548c034d2026ccd384fee43544499bcb"}],"cinder/volume/drivers/hpe/hpe_3par_common.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"9fecfee09a64f26749218104558e8d13c590f721","unresolved":false,"context_lines":[{"line_number":3025,"context_line":""},{"line_number":3026,"context_line":"    def terminate_connection(self, volume, hostname, wwn\u003dNone, iqn\u003dNone):"},{"line_number":3027,"context_line":"        \"\"\"Driver entry point to unattach a volume from an instance.\"\"\""},{"line_number":3028,"context_line":"        # does 3par know this host by a different name?"},{"line_number":3029,"context_line":"        if volume[\u0027multiattach\u0027]:"},{"line_number":3030,"context_line":"            attachment_list \u003d volume[\u0027volume_attachment\u0027]"},{"line_number":3031,"context_line":"            LOG.debug(\"Volume attachment list: %(atl)s. \""}],"source_content_type":"text/x-python","patch_set":4,"id":"9fb8cfa7_a287e612","line":3028,"updated":"2019-07-03 12:45:26.000000000","message":"I think this comment may go with some code below?","commit_id":"fd92aafe9a3d8b2523f89365786ea8ee2df4354d"},{"author":{"_account_id":29502,"name":"Sneha Rai","email":"sneha.rai@hpe.com","username":"sneharai"},"change_message_id":"0a6ccef537960399ca3b3d1099afbf902910c049","unresolved":false,"context_lines":[{"line_number":3025,"context_line":""},{"line_number":3026,"context_line":"    def terminate_connection(self, volume, hostname, wwn\u003dNone, iqn\u003dNone):"},{"line_number":3027,"context_line":"        \"\"\"Driver entry point to unattach a volume from an instance.\"\"\""},{"line_number":3028,"context_line":"        # does 3par know this host by a different name?"},{"line_number":3029,"context_line":"        if volume[\u0027multiattach\u0027]:"},{"line_number":3030,"context_line":"            attachment_list \u003d volume[\u0027volume_attachment\u0027]"},{"line_number":3031,"context_line":"            LOG.debug(\"Volume attachment list: %(atl)s. \""}],"source_content_type":"text/x-python","patch_set":4,"id":"7faddb67_d4f2de9a","line":3028,"in_reply_to":"9fb8cfa7_a287e612","updated":"2019-07-04 11:38:34.000000000","message":"Done","commit_id":"fd92aafe9a3d8b2523f89365786ea8ee2df4354d"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"9fecfee09a64f26749218104558e8d13c590f721","unresolved":false,"context_lines":[{"line_number":3038,"context_line":""},{"line_number":3039,"context_line":"            if att_list is not None and len(att_list) \u003e 1:"},{"line_number":3040,"context_line":"                LOG.info(\"Volume %(volume)s is attached to multiple \""},{"line_number":3041,"context_line":"                         \"instances on host %(host_name)s, \""},{"line_number":3042,"context_line":"                         \"skip terminate volume connection\","},{"line_number":3043,"context_line":"                         {\u0027volume\u0027: volume[\u0027name\u0027], \u0027host_name\u0027: volume[\u0027host\u0027]})"},{"line_number":3044,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fb8cfa7_02a7d2a9","line":3041,"range":{"start_line":3041,"start_character":36,"end_line":3041,"end_character":57},"updated":"2019-07-03 12:45:26.000000000","message":"The \"on host %(host_name)s\" part of this is misleading, because you\u0027re logging the host that owns the volume, not the host where the instances are.","commit_id":"fd92aafe9a3d8b2523f89365786ea8ee2df4354d"},{"author":{"_account_id":29502,"name":"Sneha Rai","email":"sneha.rai@hpe.com","username":"sneharai"},"change_message_id":"0a6ccef537960399ca3b3d1099afbf902910c049","unresolved":false,"context_lines":[{"line_number":3038,"context_line":""},{"line_number":3039,"context_line":"            if att_list is not None and len(att_list) \u003e 1:"},{"line_number":3040,"context_line":"                LOG.info(\"Volume %(volume)s is attached to multiple \""},{"line_number":3041,"context_line":"                         \"instances on host %(host_name)s, \""},{"line_number":3042,"context_line":"                         \"skip terminate volume connection\","},{"line_number":3043,"context_line":"                         {\u0027volume\u0027: volume[\u0027name\u0027], \u0027host_name\u0027: volume[\u0027host\u0027]})"},{"line_number":3044,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":4,"id":"7faddb67_f4efdaad","line":3041,"range":{"start_line":3041,"start_character":36,"end_line":3041,"end_character":57},"in_reply_to":"9fb8cfa7_02a7d2a9","updated":"2019-07-04 11:38:34.000000000","message":"Done","commit_id":"fd92aafe9a3d8b2523f89365786ea8ee2df4354d"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c514e0baa8506b6388156563d3805f3e510fe47b","unresolved":false,"context_lines":[{"line_number":3039,"context_line":"            if att_list is not None and len(att_list) \u003e 1:"},{"line_number":3040,"context_line":"                LOG.info(\"Volume %(volume)s is attached to multiple \""},{"line_number":3041,"context_line":"                         \"instances on host %(host_name)s, \""},{"line_number":3042,"context_line":"                         \"skip terminate volume connection\","},{"line_number":3043,"context_line":"                         {\u0027volume\u0027: volume[\u0027name\u0027], \u0027host_name\u0027: volume[\u0027host\u0027]})"},{"line_number":3044,"context_line":"                return"},{"line_number":3045,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9fb8cfa7_1f92c959","line":3042,"updated":"2019-07-03 11:57:30.000000000","message":"This doesn\u0027t seem right to just not do anything if there are multiple attachments.","commit_id":"fd92aafe9a3d8b2523f89365786ea8ee2df4354d"},{"author":{"_account_id":29502,"name":"Sneha Rai","email":"sneha.rai@hpe.com","username":"sneharai"},"change_message_id":"0a6ccef537960399ca3b3d1099afbf902910c049","unresolved":false,"context_lines":[{"line_number":3039,"context_line":"            if att_list is not None and len(att_list) \u003e 1:"},{"line_number":3040,"context_line":"                LOG.info(\"Volume %(volume)s is attached to multiple \""},{"line_number":3041,"context_line":"                         \"instances on host %(host_name)s, \""},{"line_number":3042,"context_line":"                         \"skip terminate volume connection\","},{"line_number":3043,"context_line":"                         {\u0027volume\u0027: volume[\u0027name\u0027], \u0027host_name\u0027: volume[\u0027host\u0027]})"},{"line_number":3044,"context_line":"                return"},{"line_number":3045,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7faddb67_9478e6f8","line":3042,"in_reply_to":"9fb8cfa7_1f92c959","updated":"2019-07-04 11:38:34.000000000","message":"terminate_connection() gets called when there is a detach. Here we are removing the luns and host entry from 3par and we want to do this only when there is only 1 instance attached to the volume.\n\nSimilar logic is applied here:\nhttps://opendev.org/openstack/cinder/src/branch/master/cinder/volume/drivers/dell_emc/powermax/common.py#L699\nhttps://opendev.org/openstack/cinder/src/branch/master/cinder/volume/drivers/nexenta/ns5/iscsi.py#L317","commit_id":"fd92aafe9a3d8b2523f89365786ea8ee2df4354d"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"9ef857f90ecb2e85795645966eb2b35330bdadee","unresolved":false,"context_lines":[{"line_number":3025,"context_line":""},{"line_number":3026,"context_line":"    def terminate_connection(self, volume, hostname, wwn\u003dNone, iqn\u003dNone):"},{"line_number":3027,"context_line":"        \"\"\"Driver entry point to unattach a volume from an instance.\"\"\""},{"line_number":3028,"context_line":"        if volume[\u0027multiattach\u0027]:"},{"line_number":3029,"context_line":"            attachment_list \u003d volume[\u0027volume_attachment\u0027]"},{"line_number":3030,"context_line":"            LOG.debug(\"Volume attachment list: %(atl)s. \""},{"line_number":3031,"context_line":"                      \"Attachment type: %(at)s\","}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_82edddf0","line":3028,"range":{"start_line":3028,"start_character":11,"end_line":3028,"end_character":32},"updated":"2019-07-08 14:48:49.000000000","message":"Can just use\n    volume.multiattach","commit_id":"3a69fd789fc5d54cf058c8b40908a59ae41ef9bc"},{"author":{"_account_id":29502,"name":"Sneha Rai","email":"sneha.rai@hpe.com","username":"sneharai"},"change_message_id":"d2d8a51aedc25da053860f941d78cc5bab8f9201","unresolved":false,"context_lines":[{"line_number":3025,"context_line":""},{"line_number":3026,"context_line":"    def terminate_connection(self, volume, hostname, wwn\u003dNone, iqn\u003dNone):"},{"line_number":3027,"context_line":"        \"\"\"Driver entry point to unattach a volume from an instance.\"\"\""},{"line_number":3028,"context_line":"        if volume[\u0027multiattach\u0027]:"},{"line_number":3029,"context_line":"            attachment_list \u003d volume[\u0027volume_attachment\u0027]"},{"line_number":3030,"context_line":"            LOG.debug(\"Volume attachment list: %(atl)s. \""},{"line_number":3031,"context_line":"                      \"Attachment type: %(at)s\","}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_15503bd4","line":3028,"range":{"start_line":3028,"start_character":11,"end_line":3028,"end_character":32},"in_reply_to":"7faddb67_82edddf0","updated":"2019-07-09 09:05:18.000000000","message":"Done","commit_id":"3a69fd789fc5d54cf058c8b40908a59ae41ef9bc"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"9ef857f90ecb2e85795645966eb2b35330bdadee","unresolved":false,"context_lines":[{"line_number":3026,"context_line":"    def terminate_connection(self, volume, hostname, wwn\u003dNone, iqn\u003dNone):"},{"line_number":3027,"context_line":"        \"\"\"Driver entry point to unattach a volume from an instance.\"\"\""},{"line_number":3028,"context_line":"        if volume[\u0027multiattach\u0027]:"},{"line_number":3029,"context_line":"            attachment_list \u003d volume[\u0027volume_attachment\u0027]"},{"line_number":3030,"context_line":"            LOG.debug(\"Volume attachment list: %(atl)s. \""},{"line_number":3031,"context_line":"                      \"Attachment type: %(at)s\","},{"line_number":3032,"context_line":"                      {\u0027atl\u0027: attachment_list, \u0027at\u0027: type(attachment_list)})"}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_a2cfb97d","line":3029,"range":{"start_line":3029,"start_character":30,"end_line":3029,"end_character":57},"updated":"2019-07-08 14:48:49.000000000","message":"volume.volume_attachment","commit_id":"3a69fd789fc5d54cf058c8b40908a59ae41ef9bc"},{"author":{"_account_id":29502,"name":"Sneha Rai","email":"sneha.rai@hpe.com","username":"sneharai"},"change_message_id":"d2d8a51aedc25da053860f941d78cc5bab8f9201","unresolved":false,"context_lines":[{"line_number":3026,"context_line":"    def terminate_connection(self, volume, hostname, wwn\u003dNone, iqn\u003dNone):"},{"line_number":3027,"context_line":"        \"\"\"Driver entry point to unattach a volume from an instance.\"\"\""},{"line_number":3028,"context_line":"        if volume[\u0027multiattach\u0027]:"},{"line_number":3029,"context_line":"            attachment_list \u003d volume[\u0027volume_attachment\u0027]"},{"line_number":3030,"context_line":"            LOG.debug(\"Volume attachment list: %(atl)s. \""},{"line_number":3031,"context_line":"                      \"Attachment type: %(at)s\","},{"line_number":3032,"context_line":"                      {\u0027atl\u0027: attachment_list, \u0027at\u0027: type(attachment_list)})"}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_d56383b0","line":3029,"range":{"start_line":3029,"start_character":30,"end_line":3029,"end_character":57},"in_reply_to":"7faddb67_a2cfb97d","updated":"2019-07-09 09:05:18.000000000","message":"Done","commit_id":"3a69fd789fc5d54cf058c8b40908a59ae41ef9bc"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"9ef857f90ecb2e85795645966eb2b35330bdadee","unresolved":false,"context_lines":[{"line_number":3028,"context_line":"        if volume[\u0027multiattach\u0027]:"},{"line_number":3029,"context_line":"            attachment_list \u003d volume[\u0027volume_attachment\u0027]"},{"line_number":3030,"context_line":"            LOG.debug(\"Volume attachment list: %(atl)s. \""},{"line_number":3031,"context_line":"                      \"Attachment type: %(at)s\","},{"line_number":3032,"context_line":"                      {\u0027atl\u0027: attachment_list, \u0027at\u0027: type(attachment_list)})"},{"line_number":3033,"context_line":"            try:"},{"line_number":3034,"context_line":"                att_list \u003d attachment_list.objects"}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_a2e6d915","line":3031,"range":{"start_line":3031,"start_character":23,"end_line":3031,"end_character":46},"updated":"2019-07-08 14:48:49.000000000","message":"Isn\u0027t this always VolumeAttachmentList?","commit_id":"3a69fd789fc5d54cf058c8b40908a59ae41ef9bc"},{"author":{"_account_id":29502,"name":"Sneha Rai","email":"sneha.rai@hpe.com","username":"sneharai"},"change_message_id":"d2d8a51aedc25da053860f941d78cc5bab8f9201","unresolved":false,"context_lines":[{"line_number":3028,"context_line":"        if volume[\u0027multiattach\u0027]:"},{"line_number":3029,"context_line":"            attachment_list \u003d volume[\u0027volume_attachment\u0027]"},{"line_number":3030,"context_line":"            LOG.debug(\"Volume attachment list: %(atl)s. \""},{"line_number":3031,"context_line":"                      \"Attachment type: %(at)s\","},{"line_number":3032,"context_line":"                      {\u0027atl\u0027: attachment_list, \u0027at\u0027: type(attachment_list)})"},{"line_number":3033,"context_line":"            try:"},{"line_number":3034,"context_line":"                att_list \u003d attachment_list.objects"}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_755acff3","line":3031,"range":{"start_line":3031,"start_character":23,"end_line":3031,"end_character":46},"in_reply_to":"7faddb67_a2e6d915","updated":"2019-07-09 09:05:18.000000000","message":"Done","commit_id":"3a69fd789fc5d54cf058c8b40908a59ae41ef9bc"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"9ef857f90ecb2e85795645966eb2b35330bdadee","unresolved":false,"context_lines":[{"line_number":3035,"context_line":"            except AttributeError:"},{"line_number":3036,"context_line":"                att_list \u003d attachment_list"},{"line_number":3037,"context_line":""},{"line_number":3038,"context_line":"            if att_list is not None and len(att_list) \u003e 1:"},{"line_number":3039,"context_line":"                LOG.info(\"Volume %(volume)s is attached to multiple \""},{"line_number":3040,"context_line":"                         \"instances on host %(host_name)s, \""},{"line_number":3041,"context_line":"                         \"skip terminate volume connection\","}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_62c9c176","line":3038,"updated":"2019-07-08 14:48:49.000000000","message":"Is it possible that multiple terminate_connection calls happen at once, and then the connection is never terminated?\n\n(i.e. does this whole section need a lock around it?)","commit_id":"3a69fd789fc5d54cf058c8b40908a59ae41ef9bc"},{"author":{"_account_id":29502,"name":"Sneha Rai","email":"sneha.rai@hpe.com","username":"sneharai"},"change_message_id":"c4a8156ddd37d17674eed456c0a485f9404c1b9f","unresolved":false,"context_lines":[{"line_number":3035,"context_line":"            except AttributeError:"},{"line_number":3036,"context_line":"                att_list \u003d attachment_list"},{"line_number":3037,"context_line":""},{"line_number":3038,"context_line":"            if att_list is not None and len(att_list) \u003e 1:"},{"line_number":3039,"context_line":"                LOG.info(\"Volume %(volume)s is attached to multiple \""},{"line_number":3040,"context_line":"                         \"instances on host %(host_name)s, \""},{"line_number":3041,"context_line":"                         \"skip terminate volume connection\","}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_985a2228","line":3038,"in_reply_to":"7faddb67_62c9c176","updated":"2019-07-09 09:51:09.000000000","message":"Hi Eric,\n\nBased on https://review.opendev.org/#/c/424454/ we are not handling race conditions.","commit_id":"3a69fd789fc5d54cf058c8b40908a59ae41ef9bc"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"58cc9f69ff254336898655914f37c8203c4ab75e","unresolved":false,"context_lines":[{"line_number":3024,"context_line":"                            return host[\u0027name\u0027]"},{"line_number":3025,"context_line":""},{"line_number":3026,"context_line":"    def terminate_connection(self, volume, hostname, wwn\u003dNone, iqn\u003dNone):"},{"line_number":3027,"context_line":"        \"\"\"Driver entry point to unattach a volume from an instance.\"\"\""},{"line_number":3028,"context_line":"        if volume.multiattach:"},{"line_number":3029,"context_line":"            attachment_list \u003d volume.volume_attachment"},{"line_number":3030,"context_line":"            LOG.debug(\"Volume attachment list: %(atl)s\","}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_e1b0ef8c","line":3027,"range":{"start_line":3027,"start_character":33,"end_line":3027,"end_character":41},"updated":"2019-07-14 12:04:14.000000000","message":"NIT: detach","commit_id":"a0d09199548c034d2026ccd384fee43544499bcb"},{"author":{"_account_id":29502,"name":"Sneha Rai","email":"sneha.rai@hpe.com","username":"sneharai"},"change_message_id":"83ed9384f660776cccc718b3e0b1eacbe27315d4","unresolved":false,"context_lines":[{"line_number":3024,"context_line":"                            return host[\u0027name\u0027]"},{"line_number":3025,"context_line":""},{"line_number":3026,"context_line":"    def terminate_connection(self, volume, hostname, wwn\u003dNone, iqn\u003dNone):"},{"line_number":3027,"context_line":"        \"\"\"Driver entry point to unattach a volume from an instance.\"\"\""},{"line_number":3028,"context_line":"        if volume.multiattach:"},{"line_number":3029,"context_line":"            attachment_list \u003d volume.volume_attachment"},{"line_number":3030,"context_line":"            LOG.debug(\"Volume attachment list: %(atl)s\","}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_d5a1ed95","line":3027,"range":{"start_line":3027,"start_character":33,"end_line":3027,"end_character":41},"in_reply_to":"7faddb67_e1b0ef8c","updated":"2019-07-15 06:30:21.000000000","message":"Done","commit_id":"a0d09199548c034d2026ccd384fee43544499bcb"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"58cc9f69ff254336898655914f37c8203c4ab75e","unresolved":false,"context_lines":[{"line_number":3029,"context_line":"            attachment_list \u003d volume.volume_attachment"},{"line_number":3030,"context_line":"            LOG.debug(\"Volume attachment list: %(atl)s\","},{"line_number":3031,"context_line":"                      {\u0027atl\u0027: attachment_list})"},{"line_number":3032,"context_line":"            try:"},{"line_number":3033,"context_line":"                att_list \u003d attachment_list.objects"},{"line_number":3034,"context_line":"            except AttributeError:"},{"line_number":3035,"context_line":"                att_list \u003d attachment_list"},{"line_number":3036,"context_line":""},{"line_number":3037,"context_line":"            if att_list is not None and len(att_list) \u003e 1:"},{"line_number":3038,"context_line":"                LOG.info(\"Volume %(volume)s is attached to multiple \""}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_e1754fcc","line":3035,"range":{"start_line":3032,"start_character":0,"end_line":3035,"end_character":42},"updated":"2019-07-14 12:04:14.000000000","message":"we can avoid declaring unnecessary variables here,\n\ntry:\n    attachment_list \u003d attachment_list.objects\nexcept AttributeError:\n    pass","commit_id":"a0d09199548c034d2026ccd384fee43544499bcb"},{"author":{"_account_id":29502,"name":"Sneha Rai","email":"sneha.rai@hpe.com","username":"sneharai"},"change_message_id":"83ed9384f660776cccc718b3e0b1eacbe27315d4","unresolved":false,"context_lines":[{"line_number":3029,"context_line":"            attachment_list \u003d volume.volume_attachment"},{"line_number":3030,"context_line":"            LOG.debug(\"Volume attachment list: %(atl)s\","},{"line_number":3031,"context_line":"                      {\u0027atl\u0027: attachment_list})"},{"line_number":3032,"context_line":"            try:"},{"line_number":3033,"context_line":"                att_list \u003d attachment_list.objects"},{"line_number":3034,"context_line":"            except AttributeError:"},{"line_number":3035,"context_line":"                att_list \u003d attachment_list"},{"line_number":3036,"context_line":""},{"line_number":3037,"context_line":"            if att_list is not None and len(att_list) \u003e 1:"},{"line_number":3038,"context_line":"                LOG.info(\"Volume %(volume)s is attached to multiple \""}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_75aa7971","line":3035,"range":{"start_line":3032,"start_character":0,"end_line":3035,"end_character":42},"in_reply_to":"7faddb67_e1754fcc","updated":"2019-07-15 06:30:21.000000000","message":"Done","commit_id":"a0d09199548c034d2026ccd384fee43544499bcb"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"b4d37f13910064f46707f82bccf1b25dab2854a4","unresolved":false,"context_lines":[{"line_number":3034,"context_line":"            except AttributeError:"},{"line_number":3035,"context_line":"                att_list \u003d attachment_list"},{"line_number":3036,"context_line":""},{"line_number":3037,"context_line":"            if att_list is not None and len(att_list) \u003e 1:"},{"line_number":3038,"context_line":"                LOG.info(\"Volume %(volume)s is attached to multiple \""},{"line_number":3039,"context_line":"                         \"instances on host %(host_name)s, \""},{"line_number":3040,"context_line":"                         \"skip terminate volume connection\","}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_3e386bed","line":3037,"range":{"start_line":3037,"start_character":40,"end_line":3037,"end_character":58},"updated":"2019-07-13 11:52:49.000000000","message":"The root of the concern about the race condition is that this can be true for both terminate_connection calls depending on timing.","commit_id":"a0d09199548c034d2026ccd384fee43544499bcb"},{"author":{"_account_id":29502,"name":"Sneha Rai","email":"sneha.rai@hpe.com","username":"sneharai"},"change_message_id":"83ed9384f660776cccc718b3e0b1eacbe27315d4","unresolved":false,"context_lines":[{"line_number":3034,"context_line":"            except AttributeError:"},{"line_number":3035,"context_line":"                att_list \u003d attachment_list"},{"line_number":3036,"context_line":""},{"line_number":3037,"context_line":"            if att_list is not None and len(att_list) \u003e 1:"},{"line_number":3038,"context_line":"                LOG.info(\"Volume %(volume)s is attached to multiple \""},{"line_number":3039,"context_line":"                         \"instances on host %(host_name)s, \""},{"line_number":3040,"context_line":"                         \"skip terminate volume connection\","}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_95a7f5a7","line":3037,"range":{"start_line":3037,"start_character":40,"end_line":3037,"end_character":58},"in_reply_to":"7faddb67_3e386bed","updated":"2019-07-15 06:30:21.000000000","message":"Done","commit_id":"a0d09199548c034d2026ccd384fee43544499bcb"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"9d477dd4b7d9d8d7852c8408bce38e648f943549","unresolved":false,"context_lines":[{"line_number":3034,"context_line":"            except AttributeError:"},{"line_number":3035,"context_line":"                att_list \u003d attachment_list"},{"line_number":3036,"context_line":""},{"line_number":3037,"context_line":"            if att_list is not None and len(att_list) \u003e 1:"},{"line_number":3038,"context_line":"                LOG.info(\"Volume %(volume)s is attached to multiple \""},{"line_number":3039,"context_line":"                         \"instances on host %(host_name)s, \""},{"line_number":3040,"context_line":"                         \"skip terminate volume connection\","}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_f972edac","line":3037,"range":{"start_line":3037,"start_character":40,"end_line":3037,"end_character":58},"in_reply_to":"7faddb67_3e386bed","updated":"2019-07-13 12:26:27.000000000","message":"This also races if another initialize_connection() call happened, adding an attachment, while this method is running.","commit_id":"a0d09199548c034d2026ccd384fee43544499bcb"}],"cinder/volume/drivers/hpe/hpe_3par_fc.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"d961e832a461913751ff61e8ca689e9f75a90036","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        self.protocol \u003d \u0027FC\u0027"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    @utils.trace"},{"line_number":129,"context_line":"    @coordination.synchronized(\u00273par-{volume.id}-{f_name}\u0027)"},{"line_number":130,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":131,"context_line":"        \"\"\"Assigns the volume to a server."},{"line_number":132,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_c9c2b134","line":129,"range":{"start_line":129,"start_character":50,"end_line":129,"end_character":56},"updated":"2019-07-15 14:25:29.000000000","message":"same","commit_id":"0bc58f7e11370735fda58de5e7fc7b26355b9c49"},{"author":{"_account_id":29502,"name":"Sneha Rai","email":"sneha.rai@hpe.com","username":"sneharai"},"change_message_id":"682300e970780a93b550aed774e5230a233d1494","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        self.protocol \u003d \u0027FC\u0027"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    @utils.trace"},{"line_number":129,"context_line":"    @coordination.synchronized(\u00273par-{volume.id}-{f_name}\u0027)"},{"line_number":130,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":131,"context_line":"        \"\"\"Assigns the volume to a server."},{"line_number":132,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_a1ff49a9","line":129,"range":{"start_line":129,"start_character":50,"end_line":129,"end_character":56},"in_reply_to":"7faddb67_c9c2b134","updated":"2019-07-15 16:15:45.000000000","message":"Done","commit_id":"0bc58f7e11370735fda58de5e7fc7b26355b9c49"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"d961e832a461913751ff61e8ca689e9f75a90036","unresolved":false,"context_lines":[{"line_number":210,"context_line":"            self._logout(common)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    @utils.trace"},{"line_number":213,"context_line":"    @coordination.synchronized(\u00273par-{volume.id}-{f_name}\u0027)"},{"line_number":214,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":215,"context_line":"        \"\"\"Driver entry point to detach a volume from an instance.\"\"\""},{"line_number":216,"context_line":"        array_id \u003d self.get_volume_replication_driver_data(volume)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_e9bf6da7","line":213,"range":{"start_line":213,"start_character":50,"end_line":213,"end_character":56},"updated":"2019-07-15 14:25:29.000000000","message":"same","commit_id":"0bc58f7e11370735fda58de5e7fc7b26355b9c49"},{"author":{"_account_id":29502,"name":"Sneha Rai","email":"sneha.rai@hpe.com","username":"sneharai"},"change_message_id":"682300e970780a93b550aed774e5230a233d1494","unresolved":false,"context_lines":[{"line_number":210,"context_line":"            self._logout(common)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    @utils.trace"},{"line_number":213,"context_line":"    @coordination.synchronized(\u00273par-{volume.id}-{f_name}\u0027)"},{"line_number":214,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":215,"context_line":"        \"\"\"Driver entry point to detach a volume from an instance.\"\"\""},{"line_number":216,"context_line":"        array_id \u003d self.get_volume_replication_driver_data(volume)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_612f113f","line":213,"range":{"start_line":213,"start_character":50,"end_line":213,"end_character":56},"in_reply_to":"7faddb67_e9bf6da7","updated":"2019-07-15 16:15:45.000000000","message":"Done","commit_id":"0bc58f7e11370735fda58de5e7fc7b26355b9c49"}],"cinder/volume/drivers/hpe/hpe_3par_iscsi.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"d961e832a461913751ff61e8ca689e9f75a90036","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        self.iscsi_ips[common._client_conf[\u0027hpe3par_api_url\u0027]] \u003d iscsi_ip_list"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    @utils.trace"},{"line_number":210,"context_line":"    @coordination.synchronized(\u00273par-{volume.id}-{f_name}\u0027)"},{"line_number":211,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":212,"context_line":"        \"\"\"Assigns the volume to a server."},{"line_number":213,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_69b4ddd1","line":210,"range":{"start_line":210,"start_character":50,"end_line":210,"end_character":56},"updated":"2019-07-15 14:25:29.000000000","message":"f_name is not appropriate here because the lock should apply between initialize_connection and terminate_connection.  Just using\n    \u00273par-{volume.id}\u0027\nshould do it.","commit_id":"0bc58f7e11370735fda58de5e7fc7b26355b9c49"},{"author":{"_account_id":29502,"name":"Sneha Rai","email":"sneha.rai@hpe.com","username":"sneharai"},"change_message_id":"682300e970780a93b550aed774e5230a233d1494","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        self.iscsi_ips[common._client_conf[\u0027hpe3par_api_url\u0027]] \u003d iscsi_ip_list"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    @utils.trace"},{"line_number":210,"context_line":"    @coordination.synchronized(\u00273par-{volume.id}-{f_name}\u0027)"},{"line_number":211,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":212,"context_line":"        \"\"\"Assigns the volume to a server."},{"line_number":213,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_81348d94","line":210,"range":{"start_line":210,"start_character":50,"end_line":210,"end_character":56},"in_reply_to":"7faddb67_69b4ddd1","updated":"2019-07-15 16:15:45.000000000","message":"Done","commit_id":"0bc58f7e11370735fda58de5e7fc7b26355b9c49"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"d961e832a461913751ff61e8ca689e9f75a90036","unresolved":false,"context_lines":[{"line_number":366,"context_line":"            self._logout(common)"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"    @utils.trace"},{"line_number":369,"context_line":"    @coordination.synchronized(\u00273par-{volume.id}-{f_name}\u0027)"},{"line_number":370,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":371,"context_line":"        \"\"\"Driver entry point to detach a volume from an instance.\"\"\""},{"line_number":372,"context_line":"        array_id \u003d self.get_volume_replication_driver_data(volume)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_09cd2965","line":369,"range":{"start_line":369,"start_character":50,"end_line":369,"end_character":56},"updated":"2019-07-15 14:25:29.000000000","message":"same","commit_id":"0bc58f7e11370735fda58de5e7fc7b26355b9c49"},{"author":{"_account_id":29502,"name":"Sneha Rai","email":"sneha.rai@hpe.com","username":"sneharai"},"change_message_id":"682300e970780a93b550aed774e5230a233d1494","unresolved":false,"context_lines":[{"line_number":366,"context_line":"            self._logout(common)"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"    @utils.trace"},{"line_number":369,"context_line":"    @coordination.synchronized(\u00273par-{volume.id}-{f_name}\u0027)"},{"line_number":370,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":371,"context_line":"        \"\"\"Driver entry point to detach a volume from an instance.\"\"\""},{"line_number":372,"context_line":"        array_id \u003d self.get_volume_replication_driver_data(volume)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_2125995c","line":369,"range":{"start_line":369,"start_character":50,"end_line":369,"end_character":56},"in_reply_to":"7faddb67_09cd2965","updated":"2019-07-15 16:15:45.000000000","message":"Done","commit_id":"0bc58f7e11370735fda58de5e7fc7b26355b9c49"}],"cinder/volume/drivers/hpe/releasenotes/notes/hpe_3par_multiattach_detach_fix-d2d3785d656fba90.yaml":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"58cc9f69ff254336898655914f37c8203c4ab75e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Fixed detach issue for multiattach capability for hpe3par driver."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"7faddb67_414ea397","line":3,"range":{"start_line":3,"start_character":50,"end_line":3,"end_character":53},"updated":"2019-07-14 12:04:14.000000000","message":"in","commit_id":"a0d09199548c034d2026ccd384fee43544499bcb"}]}
