)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"3adfe53a63dcce916be95f1e2ba689dcd704ef4e","unresolved":false,"context_lines":[{"line_number":11,"context_line":"the same initiator. This terminates connections to the LUN from other"},{"line_number":12,"context_line":"instances running on the same host."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This patch fixes this bug by leaving the connection untouched if there"},{"line_number":15,"context_line":"are other connections from the same initiator."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I0b8b5930c9e8f3c049b82e92c5fb7b05d6ae9291"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"df33271e_4a8ee727","line":14,"updated":"2020-03-20 17:06:33.000000000","message":"Just a suggestion: You could add more information about how do you leave the connection untouched. In fact, you skips removing the initiator from the the igroup, when you detect there are more than a single volume attachment from the same hypervisor.","commit_id":"ddb12e093b81dc9f2333e3df16600dbc280e2a76"},{"author":{"_account_id":18058,"name":"Lucio Seki","email":"lseki@redhat.com","username":"lseki"},"change_message_id":"c7fa7064b75084476c0b6f6232a08b386cafba39","unresolved":false,"context_lines":[{"line_number":11,"context_line":"the same initiator. This terminates connections to the LUN from other"},{"line_number":12,"context_line":"instances running on the same host."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This patch fixes this bug by leaving the connection untouched if there"},{"line_number":15,"context_line":"are other connections from the same initiator."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I0b8b5930c9e8f3c049b82e92c5fb7b05d6ae9291"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"df33271e_d6962295","line":14,"in_reply_to":"df33271e_4a8ee727","updated":"2020-03-20 21:20:19.000000000","message":"Done. Added more info about when exactly the connection is terminated.","commit_id":"ddb12e093b81dc9f2333e3df16600dbc280e2a76"}],"cinder/tests/unit/volume/drivers/netapp/dataontap/test_block_base.py":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"5418e0117c5b19b75f4d4ccd47d41174bc79dc85","unresolved":false,"context_lines":[{"line_number":276,"context_line":"        volume1.volume_attachment \u003d []"},{"line_number":277,"context_line":"        volume2 \u003d copy.deepcopy(fake.test_volume)"},{"line_number":278,"context_line":"        volume2.multiattach \u003d False"},{"line_number":279,"context_line":"        volume1.volume_attachment \u003d []"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        self.assertFalse(self.library._is_multiattached("},{"line_number":282,"context_line":"            volume1,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f493fa4_a451a865","line":279,"range":{"start_line":279,"start_character":8,"end_line":279,"end_character":15},"updated":"2020-04-20 18:52:08.000000000","message":"did you mean volume2 here? (apparently it doesn\u0027t matter, but ...)","commit_id":"fa279f4c1112a2e8c9fc7f6e1a5169354a25d1b8"},{"author":{"_account_id":18058,"name":"Lucio Seki","email":"lseki@redhat.com","username":"lseki"},"change_message_id":"5119c856ef91e07fd3814e8954b6dba0e717316b","unresolved":false,"context_lines":[{"line_number":276,"context_line":"        volume1.volume_attachment \u003d []"},{"line_number":277,"context_line":"        volume2 \u003d copy.deepcopy(fake.test_volume)"},{"line_number":278,"context_line":"        volume2.multiattach \u003d False"},{"line_number":279,"context_line":"        volume1.volume_attachment \u003d []"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        self.assertFalse(self.library._is_multiattached("},{"line_number":282,"context_line":"            volume1,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f493fa4_0ffd153a","line":279,"range":{"start_line":279,"start_character":8,"end_line":279,"end_character":15},"in_reply_to":"1f493fa4_2f8e112e","updated":"2020-04-20 19:16:45.000000000","message":"Done","commit_id":"fa279f4c1112a2e8c9fc7f6e1a5169354a25d1b8"},{"author":{"_account_id":18058,"name":"Lucio Seki","email":"lseki@redhat.com","username":"lseki"},"change_message_id":"f81e8cf280a5f829ef9f5749431da99bb6039b93","unresolved":false,"context_lines":[{"line_number":276,"context_line":"        volume1.volume_attachment \u003d []"},{"line_number":277,"context_line":"        volume2 \u003d copy.deepcopy(fake.test_volume)"},{"line_number":278,"context_line":"        volume2.multiattach \u003d False"},{"line_number":279,"context_line":"        volume1.volume_attachment \u003d []"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        self.assertFalse(self.library._is_multiattached("},{"line_number":282,"context_line":"            volume1,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f493fa4_2f8e112e","line":279,"range":{"start_line":279,"start_character":8,"end_line":279,"end_character":15},"in_reply_to":"1f493fa4_a451a865","updated":"2020-04-20 19:12:44.000000000","message":"oops, fixed it!","commit_id":"fa279f4c1112a2e8c9fc7f6e1a5169354a25d1b8"}],"cinder/volume/drivers/netapp/dataontap/block_base.py":[{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"503988b3afc18c45e6756b15bd493fdf43dfa488","unresolved":false,"context_lines":[{"line_number":895,"context_line":"        longer access it."},{"line_number":896,"context_line":"        \"\"\""},{"line_number":897,"context_line":"        if volume.multiattach:"},{"line_number":898,"context_line":"            if sum(1 for at in volume.volume_attachment if at.connector and"},{"line_number":899,"context_line":"                   at.connector[\u0027initiator\u0027] \u003d\u003d connector[\u0027initiator\u0027]) \u003e 1:"},{"line_number":900,"context_line":"                return"},{"line_number":901,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df33271e_8a40ef09","line":898,"updated":"2020-03-20 16:54:50.000000000","message":"Code looks fine, but you are validating every volume attachment entries. You could just skip the loop as soon as you find more than one attachment for the same initiator.","commit_id":"ddb12e093b81dc9f2333e3df16600dbc280e2a76"},{"author":{"_account_id":18058,"name":"Lucio Seki","email":"lseki@redhat.com","username":"lseki"},"change_message_id":"c7fa7064b75084476c0b6f6232a08b386cafba39","unresolved":false,"context_lines":[{"line_number":895,"context_line":"        longer access it."},{"line_number":896,"context_line":"        \"\"\""},{"line_number":897,"context_line":"        if volume.multiattach:"},{"line_number":898,"context_line":"            if sum(1 for at in volume.volume_attachment if at.connector and"},{"line_number":899,"context_line":"                   at.connector[\u0027initiator\u0027] \u003d\u003d connector[\u0027initiator\u0027]) \u003e 1:"},{"line_number":900,"context_line":"                return"},{"line_number":901,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df33271e_56e85215","line":898,"in_reply_to":"df33271e_8a40ef09","updated":"2020-03-20 21:20:19.000000000","message":"Good point. Now it stops at the second attachment with the same initiator.","commit_id":"ddb12e093b81dc9f2333e3df16600dbc280e2a76"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"2329d5c01aca1c97c377ecb74d975b118a40fba3","unresolved":false,"context_lines":[{"line_number":888,"context_line":"            targets \u003d target_details_list"},{"line_number":889,"context_line":"        return targets"},{"line_number":890,"context_line":""},{"line_number":891,"context_line":"    def _is_multiattached(self, volume, connector):"},{"line_number":892,"context_line":"        \"\"\"Returns whether the volume is multiattached."},{"line_number":893,"context_line":""},{"line_number":894,"context_line":"        Returns True if the volume is attached to multiple instances using the"}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_5d917899","line":891,"updated":"2020-03-23 18:44:23.000000000","message":"Hi Lucio, can you provide unit tests for this function you\u0027ve created?","commit_id":"92852a59523f2831cb0b06ff7914971fcc205319"},{"author":{"_account_id":18058,"name":"Lucio Seki","email":"lseki@redhat.com","username":"lseki"},"change_message_id":"e439f54df2b11c94ba3b1fce3a6a4520d3c6b80b","unresolved":false,"context_lines":[{"line_number":888,"context_line":"            targets \u003d target_details_list"},{"line_number":889,"context_line":"        return targets"},{"line_number":890,"context_line":""},{"line_number":891,"context_line":"    def _is_multiattached(self, volume, connector):"},{"line_number":892,"context_line":"        \"\"\"Returns whether the volume is multiattached."},{"line_number":893,"context_line":""},{"line_number":894,"context_line":"        Returns True if the volume is attached to multiple instances using the"}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_03e2ee03","line":891,"in_reply_to":"df33271e_5d917899","updated":"2020-03-23 22:18:50.000000000","message":"Yes I can.","commit_id":"92852a59523f2831cb0b06ff7914971fcc205319"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"5418e0117c5b19b75f4d4ccd47d41174bc79dc85","unresolved":false,"context_lines":[{"line_number":901,"context_line":"        same_connector \u003d (True for at in volume.volume_attachment"},{"line_number":902,"context_line":"                          if at.connector and"},{"line_number":903,"context_line":"                          at.connector[\u0027initiator\u0027] \u003d\u003d connector[\u0027initiator\u0027])"},{"line_number":904,"context_line":"        next(same_connector)"},{"line_number":905,"context_line":"        return next(same_connector, False)"},{"line_number":906,"context_line":""},{"line_number":907,"context_line":"    def terminate_connection_iscsi(self, volume, connector, **kwargs):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f493fa4_ef46e94f","line":904,"updated":"2020-04-20 18:52:08.000000000","message":"are you sure this line won\u0027t ever give you a StopIteration?","commit_id":"fa279f4c1112a2e8c9fc7f6e1a5169354a25d1b8"},{"author":{"_account_id":18058,"name":"Lucio Seki","email":"lseki@redhat.com","username":"lseki"},"change_message_id":"5119c856ef91e07fd3814e8954b6dba0e717316b","unresolved":false,"context_lines":[{"line_number":901,"context_line":"        same_connector \u003d (True for at in volume.volume_attachment"},{"line_number":902,"context_line":"                          if at.connector and"},{"line_number":903,"context_line":"                          at.connector[\u0027initiator\u0027] \u003d\u003d connector[\u0027initiator\u0027])"},{"line_number":904,"context_line":"        next(same_connector)"},{"line_number":905,"context_line":"        return next(same_connector, False)"},{"line_number":906,"context_line":""},{"line_number":907,"context_line":"    def terminate_connection_iscsi(self, volume, connector, **kwargs):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f493fa4_cf020d3f","line":904,"in_reply_to":"1f493fa4_ef1709ed","updated":"2020-04-20 19:16:45.000000000","message":"Done","commit_id":"fa279f4c1112a2e8c9fc7f6e1a5169354a25d1b8"},{"author":{"_account_id":18058,"name":"Lucio Seki","email":"lseki@redhat.com","username":"lseki"},"change_message_id":"f81e8cf280a5f829ef9f5749431da99bb6039b93","unresolved":false,"context_lines":[{"line_number":901,"context_line":"        same_connector \u003d (True for at in volume.volume_attachment"},{"line_number":902,"context_line":"                          if at.connector and"},{"line_number":903,"context_line":"                          at.connector[\u0027initiator\u0027] \u003d\u003d connector[\u0027initiator\u0027])"},{"line_number":904,"context_line":"        next(same_connector)"},{"line_number":905,"context_line":"        return next(same_connector, False)"},{"line_number":906,"context_line":""},{"line_number":907,"context_line":"    def terminate_connection_iscsi(self, volume, connector, **kwargs):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f493fa4_ef1709ed","line":904,"in_reply_to":"1f493fa4_ef46e94f","updated":"2020-04-20 19:12:44.000000000","message":"Oh, you\u0027re right. It could be attached to a different connector and have passed L899. Then it would indeed raise a StopIteration.","commit_id":"fa279f4c1112a2e8c9fc7f6e1a5169354a25d1b8"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"70e5e000c12984f69a99cc5fcea685b2395bce36","unresolved":false,"context_lines":[{"line_number":901,"context_line":"        same_connector \u003d (True for at in volume.volume_attachment"},{"line_number":902,"context_line":"                          if at.connector and"},{"line_number":903,"context_line":"                          at.connector[\u0027initiator\u0027] \u003d\u003d connector[\u0027initiator\u0027])"},{"line_number":904,"context_line":"        next(same_connector)"},{"line_number":905,"context_line":"        return next(same_connector, False)"},{"line_number":906,"context_line":""},{"line_number":907,"context_line":"    def terminate_connection_iscsi(self, volume, connector, **kwargs):"},{"line_number":908,"context_line":"        \"\"\"Driver entry point to unattach a volume from an instance."}],"source_content_type":"text/x-python","patch_set":4,"id":"1f493fa4_44626418","line":905,"range":{"start_line":904,"start_character":8,"end_line":905,"end_character":41},"updated":"2020-04-20 18:33:21.000000000","message":"Could just be:\n\nreturn len(same_connector) \u003e 1","commit_id":"fa279f4c1112a2e8c9fc7f6e1a5169354a25d1b8"},{"author":{"_account_id":18058,"name":"Lucio Seki","email":"lseki@redhat.com","username":"lseki"},"change_message_id":"f81e8cf280a5f829ef9f5749431da99bb6039b93","unresolved":false,"context_lines":[{"line_number":901,"context_line":"        same_connector \u003d (True for at in volume.volume_attachment"},{"line_number":902,"context_line":"                          if at.connector and"},{"line_number":903,"context_line":"                          at.connector[\u0027initiator\u0027] \u003d\u003d connector[\u0027initiator\u0027])"},{"line_number":904,"context_line":"        next(same_connector)"},{"line_number":905,"context_line":"        return next(same_connector, False)"},{"line_number":906,"context_line":""},{"line_number":907,"context_line":"    def terminate_connection_iscsi(self, volume, connector, **kwargs):"},{"line_number":908,"context_line":"        \"\"\"Driver entry point to unattach a volume from an instance."}],"source_content_type":"text/x-python","patch_set":4,"id":"1f493fa4_6f13f90e","line":905,"range":{"start_line":904,"start_character":8,"end_line":905,"end_character":41},"in_reply_to":"1f493fa4_44626418","updated":"2020-04-20 19:12:44.000000000","message":"I defined `same_connector` as a generator, so I can\u0027t use len().\n\nI would be able to use len() if I defined it as a list, but then it would check `at.connector[\u0027initiator\u0027] \u003d\u003d connector[\u0027initiator\u0027]` for every single attachment.\n\nI just need to know if there\u0027re at least 2 or not, no matter if there\u0027re hundreds of attachments. So it\u0027s somewhat optimized :-)","commit_id":"fa279f4c1112a2e8c9fc7f6e1a5169354a25d1b8"}],"releasenotes/notes/netapp-ontapp-fix-detach-multiattach-d99d33dff2fefb4c.yaml":[{"author":{"_account_id":18058,"name":"Lucio Seki","email":"lseki@redhat.com","username":"lseki"},"change_message_id":"331f0de0bc9908798a8ec092b579e9d0a8d82a62","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"1f493fa4_512640b9","updated":"2020-04-24 14:18:04.000000000","message":"The filename has a typo (ontapp instead of ontap)","commit_id":"6a67c5d07f11eebfedb1f0dd8167958d18a3a216"},{"author":{"_account_id":18058,"name":"Lucio Seki","email":"lseki@redhat.com","username":"lseki"},"change_message_id":"5d5b522c82789874415ba8e61f6960255159ecbe","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"1f493fa4_d131b0ee","in_reply_to":"1f493fa4_512640b9","updated":"2020-04-24 14:18:35.000000000","message":"Done","commit_id":"6a67c5d07f11eebfedb1f0dd8167958d18a3a216"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"9007f09fbeb5a84e837394c8844bac120f1fd351","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    NetApp ONTAP: Fixes `bug 1839384"},{"line_number":5,"context_line":"    \u003chttps://bugs.launchpad.net/cinder/+bug/1839384\u003e`__ Detaching any"},{"line_number":6,"context_line":"    instance from multi-attach terminates connection. Now the connection"},{"line_number":7,"context_line":"    is terminated only if there\u0027re no other instances using the same"},{"line_number":8,"context_line":"    initiator."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"1f493fa4_384f1e93","line":6,"range":{"start_line":6,"start_character":18,"end_line":6,"end_character":31},"updated":"2020-04-24 08:12:27.000000000","message":"multiattached volume","commit_id":"6a67c5d07f11eebfedb1f0dd8167958d18a3a216"},{"author":{"_account_id":18058,"name":"Lucio Seki","email":"lseki@redhat.com","username":"lseki"},"change_message_id":"331f0de0bc9908798a8ec092b579e9d0a8d82a62","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    NetApp ONTAP: Fixes `bug 1839384"},{"line_number":5,"context_line":"    \u003chttps://bugs.launchpad.net/cinder/+bug/1839384\u003e`__ Detaching any"},{"line_number":6,"context_line":"    instance from multi-attach terminates connection. Now the connection"},{"line_number":7,"context_line":"    is terminated only if there\u0027re no other instances using the same"},{"line_number":8,"context_line":"    initiator."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"1f493fa4_b113445c","line":6,"range":{"start_line":6,"start_character":18,"end_line":6,"end_character":31},"in_reply_to":"1f493fa4_384f1e93","updated":"2020-04-24 14:18:04.000000000","message":"Done","commit_id":"6a67c5d07f11eebfedb1f0dd8167958d18a3a216"}]}
