)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"b85d7906d828ebcb3c548f7c292abfe78e02d3c4","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"This patch also includes a fix in the ISCSIDriver\u0027s"},{"line_number":19,"context_line":"copy_volume_to_image code that didn\u0027t actually detach a volume"},{"line_number":20,"context_line":"when it was done with the operation."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"This patch also includes a fix for iSCSI detaches where the"},{"line_number":23,"context_line":"iSCSI LUN wasn\u0027t being removed from the system until the very"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"AAAAPn%2F%2Fpw0%3D","line":20,"updated":"2013-06-25 21:52:40.000000000","message":"do you have a bug # for this?","commit_id":"2c95b2495ede87ee943c5979606a352c4909ab95"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"f1a27f539034fef6bb61aea5dc8dfa910d6647e8","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"This patch also includes a fix in the ISCSIDriver\u0027s"},{"line_number":19,"context_line":"copy_volume_to_image code that didn\u0027t actually detach a volume"},{"line_number":20,"context_line":"when it was done with the operation."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"This patch also includes a fix for iSCSI detaches where the"},{"line_number":23,"context_line":"iSCSI LUN wasn\u0027t being removed from the system until the very"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"AAAAPn%2F%2FndA%3D","line":20,"in_reply_to":"AAAAPn%2F%2Fpw0%3D","updated":"2013-06-26 17:14:15.000000000","message":"Done","commit_id":"2c95b2495ede87ee943c5979606a352c4909ab95"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"b85d7906d828ebcb3c548f7c292abfe78e02d3c4","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"This patch also includes a fix for iSCSI detaches where the"},{"line_number":23,"context_line":"iSCSI LUN wasn\u0027t being removed from the system until the very"},{"line_number":24,"context_line":"last detach issues an iscsiadm logout."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"This patch includes a fix for iSCSI multipath detaches where"},{"line_number":27,"context_line":"the multipath device and the iSCSI LUNs for the multipath device"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"AAAAPn%2F%2Fpww%3D","line":24,"updated":"2013-06-25 21:52:40.000000000","message":"ditto","commit_id":"2c95b2495ede87ee943c5979606a352c4909ab95"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"f1a27f539034fef6bb61aea5dc8dfa910d6647e8","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"This patch also includes a fix for iSCSI detaches where the"},{"line_number":23,"context_line":"iSCSI LUN wasn\u0027t being removed from the system until the very"},{"line_number":24,"context_line":"last detach issues an iscsiadm logout."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"This patch includes a fix for iSCSI multipath detaches where"},{"line_number":27,"context_line":"the multipath device and the iSCSI LUNs for the multipath device"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"AAAAPn%2F%2Fnc8%3D","line":24,"in_reply_to":"AAAAPn%2F%2Fpww%3D","updated":"2013-06-26 17:14:15.000000000","message":"Done","commit_id":"2c95b2495ede87ee943c5979606a352c4909ab95"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"b85d7906d828ebcb3c548f7c292abfe78e02d3c4","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"This patch includes a fix for iSCSI multipath detaches where"},{"line_number":27,"context_line":"the multipath device and the iSCSI LUNs for the multipath device"},{"line_number":28,"context_line":"were never removed from the kernel."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"Blueprint cinder-refactor-attach"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"AAAAPn%2F%2Fpwo%3D","line":28,"updated":"2013-06-25 21:52:40.000000000","message":"ditto","commit_id":"2c95b2495ede87ee943c5979606a352c4909ab95"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"f1a27f539034fef6bb61aea5dc8dfa910d6647e8","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"This patch includes a fix for iSCSI multipath detaches where"},{"line_number":27,"context_line":"the multipath device and the iSCSI LUNs for the multipath device"},{"line_number":28,"context_line":"were never removed from the kernel."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"Blueprint cinder-refactor-attach"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"AAAAPn%2F%2Fnc0%3D","line":28,"in_reply_to":"AAAAPn%2F%2Fpwo%3D","updated":"2013-06-26 17:14:15.000000000","message":"Done","commit_id":"2c95b2495ede87ee943c5979606a352c4909ab95"}],"cinder/brick/initiator/connector.py":[{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"034eed27bdfdde48cc98da07ff319246c77caafe","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        self.configuration \u003d kwargs.get(\u0027configuration\u0027, None)"},{"line_number":47,"context_line":"        self.set_execute(execute)"},{"line_number":48,"context_line":"        self.set_driver(None)"},{"line_number":49,"context_line":"        self.set_root_helper(root_helper)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def set_execute(self, execute):"},{"line_number":52,"context_line":"        self._execute \u003d execute"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPX%2F%2Ftz4%3D","line":49,"updated":"2013-06-12 03:36:55.000000000","message":"good catch","commit_id":"2e9770616c2306d53a22e604447c5979ad2c007e"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"49c6ee3c419e7c1748c0bbd434bc101fa5772ecc","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        if CONF.brick_use_multipath:"},{"line_number":90,"context_line":"            #multipath installed, discovering other targets if available"},{"line_number":91,"context_line":"            #multipath should be configured on the nova-compute node,"},{"line_number":92,"context_line":"            #in order to fit storage vendor"},{"line_number":93,"context_line":"            target_portal \u003d connection_properties[\u0027target_portal\u0027]"},{"line_number":94,"context_line":"            out \u003d self._run_iscsiadm_bare([\u0027-m\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2F%2FKQ%3D","line":91,"updated":"2013-06-15 11:48:47.000000000","message":"remove \u0027nova-compute\u0027 from this copied comments.","commit_id":"0bbc97a2067bc1166033e2126a994ca6ddda6063"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"98eed606553d15e132f4329821dba40773c75cf8","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        if CONF.brick_use_multipath:"},{"line_number":90,"context_line":"            #multipath installed, discovering other targets if available"},{"line_number":91,"context_line":"            #multipath should be configured on the nova-compute node,"},{"line_number":92,"context_line":"            #in order to fit storage vendor"},{"line_number":93,"context_line":"            target_portal \u003d connection_properties[\u0027target_portal\u0027]"},{"line_number":94,"context_line":"            out \u003d self._run_iscsiadm_bare([\u0027-m\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2F8Og%3D","line":91,"in_reply_to":"AAAAPn%2F%2F%2FKQ%3D","updated":"2013-06-17 20:07:27.000000000","message":"Done","commit_id":"0bbc97a2067bc1166033e2126a994ca6ddda6063"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"18c57e9fe4f0a18f89dc32b9ce08b420ebc9d27e","unresolved":false,"context_lines":[{"line_number":115,"context_line":"                        connection_properties.get(\u0027target_lun\u0027, 0)))"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        # The /dev/disk/by-path/... node is not always present immediately"},{"line_number":118,"context_line":"        # TODO(justinsb): This retry-with-delay is a pattern, move to utils?"},{"line_number":119,"context_line":"        tries \u003d 0"},{"line_number":120,"context_line":"        while not os.path.exists(host_device):"},{"line_number":121,"context_line":"            if tries \u003e\u003d CONF.num_iscsi_scan_tries:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2F%2FOc%3D","line":118,"updated":"2013-06-15 07:18:48.000000000","message":"Can we use this method to ensure attached device ready (just for udev):\ndef _do_udev_event_finish(self):\n(out, _err) \u003d processutils.execute(\u0027which\u0027, \u0027udevadm\u0027)\nif out:\n    processutils.execute(\u0027udevadm\u0027, \u0027settle\u0027,\n                         run_as_root\u003dTrue,\n                         root_helper\u003dCONF.root_helper)\nelse:\n    utils.trycmd(\u0027udevsettle\u0027,\n                 run_as_root\u003dTrue,\n                 root_helper\u003dCONF.root_helper,\n                 discard_warnings\u003dTrue)","commit_id":"0bbc97a2067bc1166033e2126a994ca6ddda6063"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"98eed606553d15e132f4329821dba40773c75cf8","unresolved":false,"context_lines":[{"line_number":115,"context_line":"                        connection_properties.get(\u0027target_lun\u0027, 0)))"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        # The /dev/disk/by-path/... node is not always present immediately"},{"line_number":118,"context_line":"        # TODO(justinsb): This retry-with-delay is a pattern, move to utils?"},{"line_number":119,"context_line":"        tries \u003d 0"},{"line_number":120,"context_line":"        while not os.path.exists(host_device):"},{"line_number":121,"context_line":"            if tries \u003e\u003d CONF.num_iscsi_scan_tries:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2F8OY%3D","line":118,"in_reply_to":"AAAAPn%2F%2F%2FOc%3D","updated":"2013-06-17 20:07:27.000000000","message":"This isn\u0027t currently being done in Nova\u0027s version of this.   I\u0027d rather not put new features in until this has been accepted.\n\nAlmost all of this code is a direct copy/paste from Nova that will eventually replace Nova\u0027s copy.  I\u0027d like to get this code accepted into brick and then fix known defects later as well as new features (such as your udev suggestion).   We\u0027ll be no worse off than we are today with nova\u0027s attach code if this is accepted.","commit_id":"0bbc97a2067bc1166033e2126a994ca6ddda6063"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"29dca18df15912dd37b6a3e282315bf29500fdd2","unresolved":false,"context_lines":[{"line_number":178,"context_line":"                         (connection_properties[\u0027target_portal\u0027],"},{"line_number":179,"context_line":"                          connection_properties[\u0027target_iqn\u0027]))"},{"line_number":180,"context_line":"        devices \u003d self.driver.get_all_block_devices()"},{"line_number":181,"context_line":"        devices \u003d [dev for dev in devices if dev.startswith(device_prefix)]"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        # ignore the devices for our specific LUN as it\u0027s going away."},{"line_number":184,"context_line":"        lun_str \u003d device_prefix + \"%s\" % connection_properties[\u0027target_lun\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2F%2FLg%3D","line":181,"updated":"2013-06-15 09:05:05.000000000","message":"Is this more efficient and clear?\n    if len(devices) \u003d\u003d 1:\n        self._disconnect_from_iscsi_portal(connection_properties)\nand remove L183~L187.\n\nIf you consider this checking method is too dangerous, I think we need change \u0027dev.startswith(lun_str)\u0027 on L185 to \u0027dev \u003d\u003d lun_str\u0027 at least. think about you want to remove lun1, but lun11 already there.","commit_id":"0bbc97a2067bc1166033e2126a994ca6ddda6063"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"98eed606553d15e132f4329821dba40773c75cf8","unresolved":false,"context_lines":[{"line_number":178,"context_line":"                         (connection_properties[\u0027target_portal\u0027],"},{"line_number":179,"context_line":"                          connection_properties[\u0027target_iqn\u0027]))"},{"line_number":180,"context_line":"        devices \u003d self.driver.get_all_block_devices()"},{"line_number":181,"context_line":"        devices \u003d [dev for dev in devices if dev.startswith(device_prefix)]"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        # ignore the devices for our specific LUN as it\u0027s going away."},{"line_number":184,"context_line":"        lun_str \u003d device_prefix + \"%s\" % connection_properties[\u0027target_lun\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2F8OU%3D","line":181,"in_reply_to":"AAAAPn%2F%2F%2FLg%3D","updated":"2013-06-17 20:07:27.000000000","message":"1) We can get more than 1 device in the devices list, which is why len(devices) \u003d\u003d 1 is invalid.  We can get lun1 and lun1-part.\n2) we can get lun1-part in the list as well, which is why it\u0027s startswith(lun_str).","commit_id":"0bbc97a2067bc1166033e2126a994ca6ddda6063"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"852c4d09a9482c3f079ac820c40c7f9eeaf98dc9","unresolved":false,"context_lines":[{"line_number":178,"context_line":"                         (connection_properties[\u0027target_portal\u0027],"},{"line_number":179,"context_line":"                          connection_properties[\u0027target_iqn\u0027]))"},{"line_number":180,"context_line":"        devices \u003d self.driver.get_all_block_devices()"},{"line_number":181,"context_line":"        devices \u003d [dev for dev in devices if dev.startswith(device_prefix)]"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        # ignore the devices for our specific LUN as it\u0027s going away."},{"line_number":184,"context_line":"        lun_str \u003d device_prefix + \"%s\" % connection_properties[\u0027target_lun\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2F7Ss%3D","line":181,"in_reply_to":"AAAAPn%2F%2F7d8%3D","updated":"2013-06-18 05:14:22.000000000","message":"Yah I\u0027ll have to make a fix for the stripping out the current LUN from the 2nd devices call below on line 185.  Thanks.","commit_id":"0bbc97a2067bc1166033e2126a994ca6ddda6063"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"5aeffa80ee44a759badcd44a9b6af7337cc87bd3","unresolved":false,"context_lines":[{"line_number":178,"context_line":"                         (connection_properties[\u0027target_portal\u0027],"},{"line_number":179,"context_line":"                          connection_properties[\u0027target_iqn\u0027]))"},{"line_number":180,"context_line":"        devices \u003d self.driver.get_all_block_devices()"},{"line_number":181,"context_line":"        devices \u003d [dev for dev in devices if dev.startswith(device_prefix)]"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        # ignore the devices for our specific LUN as it\u0027s going away."},{"line_number":184,"context_line":"        lun_str \u003d device_prefix + \"%s\" % connection_properties[\u0027target_lun\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2F7d8%3D","line":181,"in_reply_to":"AAAAPn%2F%2F8OU%3D","updated":"2013-06-18 01:27:42.000000000","message":"Seems we need more smart checking here, as i said maybe there has a lun11-part device, when you remove lun1-part, the startswith(lun_str) will not filter well for lun11-part.","commit_id":"0bbc97a2067bc1166033e2126a994ca6ddda6063"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"f1ed39ddea6b0116afaebd9ca7ca375d9ac2161b","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        return self._run_iscsiadm(connection_properties, iscsi_command,"},{"line_number":207,"context_line":"                                  **kwargs)"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def _get_target_portals_from_iscsiadm_output(self, output):"},{"line_number":210,"context_line":"        return [line.split()[0] for line in output.splitlines()]"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    def _disconnect_volume_multipath_iscsi(self, connection_properties):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2F%2FOI%3D","line":209,"updated":"2013-06-15 07:38:29.000000000","message":"seems there is a bug. from my host \u0027discovery\u0027 command return this:\n~$ sudo iscsiadm -m discovery -t sendtargets -p 10.10.0.2:3260\n10.10.0.2:3260,1 iqn.2010-10.org.openstack:volume-c03eeaca-1ab5-4947-baa1-5b35a936012d\n10.10.0.2:3260,1 iqn.2010-10.org.openstack:volume-a677fffd-c69d-4156-866c-f0e8e4cecee1\n\nso, line.split()[0] will return \u002710.10.0.2:3260,1\u0027, but not \u002710.10.0.2:3260\u0027.","commit_id":"0bbc97a2067bc1166033e2126a994ca6ddda6063"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"09edbe7a45fc44423f522b7cc97965667d8c0497","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        return self._run_iscsiadm(connection_properties, iscsi_command,"},{"line_number":207,"context_line":"                                  **kwargs)"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def _get_target_portals_from_iscsiadm_output(self, output):"},{"line_number":210,"context_line":"        return [line.split()[0] for line in output.splitlines()]"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    def _disconnect_volume_multipath_iscsi(self, connection_properties):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2F%2FNk%3D","line":209,"in_reply_to":"AAAAPn%2F%2F%2FOI%3D","updated":"2013-06-15 08:04:36.000000000","message":"according to context, this code is correct. sorry.\nDone","commit_id":"0bbc97a2067bc1166033e2126a994ca6ddda6063"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"b083d49ad96dac59decba7559e37957b17b1ffec","unresolved":false,"context_lines":[{"line_number":226,"context_line":"            # disconnect if no other multipath devices"},{"line_number":227,"context_line":"            self._disconnect_mpath(connection_properties)"},{"line_number":228,"context_line":"            return"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"        other_iqns \u003d [self._get_multipath_iqn(device)"},{"line_number":231,"context_line":"                      for device in devices]"},{"line_number":232,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2F%2BvE%3D","line":229,"updated":"2013-06-16 02:38:18.000000000","message":"Uniqify devices list for reduce below loop times: \ndevices \u003d list(set(devices))","commit_id":"0bbc97a2067bc1166033e2126a994ca6ddda6063"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"49c6ee3c419e7c1748c0bbd434bc101fa5772ecc","unresolved":false,"context_lines":[{"line_number":228,"context_line":"            return"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"        other_iqns \u003d [self._get_multipath_iqn(device)"},{"line_number":231,"context_line":"                      for device in devices]"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        if connection_properties[\u0027target_iqn\u0027] not in other_iqns:"},{"line_number":234,"context_line":"            # disconnect if no other multipath devices with same iqn"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2F%2FEI%3D","line":231,"updated":"2013-06-15 11:48:47.000000000","message":"Seems \u0027other_iqns\u0027 array will always include this current removing  device\u0027s iqn, and causes mpath device always not be disconnect. Since get_all_block_devices on Line 215 will return all attach device by default (host_driver.py:HostDriver.get_all_block_devices() did), this is not like nova did (virt/libvirt/volume.py:L303), because in nova, vm\u0027s dom xml will be updated first then to query its block device. (call virt_dom.detachDeviceFlags before then query vm used block device by get_all_block_devices when api client call detach_volume).\n\nplease correct me if i\u0027m wrong :)","commit_id":"0bbc97a2067bc1166033e2126a994ca6ddda6063"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"98eed606553d15e132f4329821dba40773c75cf8","unresolved":false,"context_lines":[{"line_number":228,"context_line":"            return"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"        other_iqns \u003d [self._get_multipath_iqn(device)"},{"line_number":231,"context_line":"                      for device in devices]"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        if connection_properties[\u0027target_iqn\u0027] not in other_iqns:"},{"line_number":234,"context_line":"            # disconnect if no other multipath devices with same iqn"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2F8L8%3D","line":231,"in_reply_to":"AAAAPn%2F%2F%2FEI%3D","updated":"2013-06-17 20:07:27.000000000","message":"again this is code copied from Nova.   Lets get this accepted into cinder and then fix any known issues?   This patch is about refactoring the existing code (including any defects), so that we can migrate to one codebase for attach/detach between cinder and nova.    Then the priority will be fixing defects and adding new features.","commit_id":"0bbc97a2067bc1166033e2126a994ca6ddda6063"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"852c4d09a9482c3f079ac820c40c7f9eeaf98dc9","unresolved":false,"context_lines":[{"line_number":228,"context_line":"            return"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"        other_iqns \u003d [self._get_multipath_iqn(device)"},{"line_number":231,"context_line":"                      for device in devices]"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        if connection_properties[\u0027target_iqn\u0027] not in other_iqns:"},{"line_number":234,"context_line":"            # disconnect if no other multipath devices with same iqn"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2F7S0%3D","line":231,"in_reply_to":"AAAAPn%2F%2F7dk%3D","updated":"2013-06-18 05:14:22.000000000","message":"ok I think I understand what you are saying now.  I suppose I should make get_all_block_devices act like Nova\u0027s hypervisor call, since I need this code to work for both Nova and Cinder.","commit_id":"0bbc97a2067bc1166033e2126a994ca6ddda6063"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"5aeffa80ee44a759badcd44a9b6af7337cc87bd3","unresolved":false,"context_lines":[{"line_number":228,"context_line":"            return"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"        other_iqns \u003d [self._get_multipath_iqn(device)"},{"line_number":231,"context_line":"                      for device in devices]"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        if connection_properties[\u0027target_iqn\u0027] not in other_iqns:"},{"line_number":234,"context_line":"            # disconnect if no other multipath devices with same iqn"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2F7dk%3D","line":231,"in_reply_to":"AAAAPn%2F%2F8L8%3D","updated":"2013-06-18 01:27:42.000000000","message":"Keep code consistence maximally and your priority is ok. But we should keep code correctness firstly. This code in nova is correct since \u0027self.driver\u0027 is always hypervisor but not your hook (host_driver.py:HostDriver.get_all_block_devices()), so as i said in above comment, hypervisor.get_all_block_devices() return all vm attached device WITHOUT current detaching one. but in this new code, your hook return ALL attached device INCLUDE current detaching one. this caused self._disconnect_mpath never be called.","commit_id":"0bbc97a2067bc1166033e2126a994ca6ddda6063"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"ade0c66cd5772b6fc0adf7f4f165b383921b6537","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        if CONF.brick_use_multipath:"},{"line_number":90,"context_line":"            #multipath installed, discovering other targets if available"},{"line_number":91,"context_line":"            target_portal \u003d connection_properties[\u0027target_portal\u0027]"},{"line_number":92,"context_line":"            out \u003d self._run_iscsiadm_bare([\u0027-m\u0027,"},{"line_number":93,"context_line":"                                          \u0027discovery\u0027,"},{"line_number":94,"context_line":"                                          \u0027-t\u0027,"},{"line_number":95,"context_line":"                                          \u0027sendtargets\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPn%2F%2F2q4%3D","line":92,"updated":"2013-06-19 18:51:09.000000000","message":"I do like the \"or \u003cfoo\u003e\" syntax, but in this case, it is hard to follow code flow wise.\n\nThis is a relatively minor nit.","commit_id":"35d4ea49988ddb71d03322cb2ca9f421a91af552"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"35226b2e95ff65a9e88a59099414188e90eb69df","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        if CONF.brick_use_multipath:"},{"line_number":90,"context_line":"            #multipath installed, discovering other targets if available"},{"line_number":91,"context_line":"            target_portal \u003d connection_properties[\u0027target_portal\u0027]"},{"line_number":92,"context_line":"            out \u003d self._run_iscsiadm_bare([\u0027-m\u0027,"},{"line_number":93,"context_line":"                                          \u0027discovery\u0027,"},{"line_number":94,"context_line":"                                          \u0027-t\u0027,"},{"line_number":95,"context_line":"                                          \u0027sendtargets\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPn%2F%2F2JM%3D","line":92,"in_reply_to":"AAAAPn%2F%2F2q4%3D","updated":"2013-06-19 21:54:28.000000000","message":"This is all copy/paste from nova.   I\u0027m not going to change formatting for this version of the code.","commit_id":"35d4ea49988ddb71d03322cb2ca9f421a91af552"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"ade0c66cd5772b6fc0adf7f4f165b383921b6537","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        else:"},{"line_number":108,"context_line":"            self._connect_to_iscsi_portal(connection_properties)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        host_device \u003d (\"/dev/disk/by-path/ip-%s-iscsi-%s-lun-%s\" %"},{"line_number":111,"context_line":"                       (connection_properties[\u0027target_portal\u0027],"},{"line_number":112,"context_line":"                        connection_properties[\u0027target_iqn\u0027],"},{"line_number":113,"context_line":"                        connection_properties.get(\u0027target_lun\u0027, 0)))"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPn%2F%2F2uM%3D","line":110,"updated":"2013-06-19 18:51:09.000000000","message":"For readability does it make sense to use %(target_portal)s etc in the substitutions here?  I always find that style of substitution to be superior to the simple place-holder style","commit_id":"35d4ea49988ddb71d03322cb2ca9f421a91af552"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"8c7d177288918988ce20c2d82199e24bf4581d68","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        else:"},{"line_number":108,"context_line":"            self._connect_to_iscsi_portal(connection_properties)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        host_device \u003d (\"/dev/disk/by-path/ip-%s-iscsi-%s-lun-%s\" %"},{"line_number":111,"context_line":"                       (connection_properties[\u0027target_portal\u0027],"},{"line_number":112,"context_line":"                        connection_properties[\u0027target_iqn\u0027],"},{"line_number":113,"context_line":"                        connection_properties.get(\u0027target_lun\u0027, 0)))"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPn%2F%2Fwdw%3D","line":110,"in_reply_to":"AAAAPn%2F%2F2JE%3D","updated":"2013-06-21 23:09:06.000000000","message":"Done","commit_id":"35d4ea49988ddb71d03322cb2ca9f421a91af552"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"35226b2e95ff65a9e88a59099414188e90eb69df","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        else:"},{"line_number":108,"context_line":"            self._connect_to_iscsi_portal(connection_properties)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        host_device \u003d (\"/dev/disk/by-path/ip-%s-iscsi-%s-lun-%s\" %"},{"line_number":111,"context_line":"                       (connection_properties[\u0027target_portal\u0027],"},{"line_number":112,"context_line":"                        connection_properties[\u0027target_iqn\u0027],"},{"line_number":113,"context_line":"                        connection_properties.get(\u0027target_lun\u0027, 0)))"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPn%2F%2F2JE%3D","line":110,"in_reply_to":"AAAAPn%2F%2F2uM%3D","updated":"2013-06-19 21:54:28.000000000","message":"I\u0027m keeping this as is for now because it\u0027s a direct copy/paste from nova\u0027s libvirt volume.py driver.","commit_id":"35d4ea49988ddb71d03322cb2ca9f421a91af552"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"ade0c66cd5772b6fc0adf7f4f165b383921b6537","unresolved":false,"context_lines":[{"line_number":129,"context_line":"            self._run_iscsiadm(connection_properties, (\"--rescan\",))"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"            tries \u003d tries + 1"},{"line_number":132,"context_line":"            if not os.path.exists(host_device):"},{"line_number":133,"context_line":"                time.sleep(tries ** 2)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        if tries !\u003d 0:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPn%2F%2F2t8%3D","line":132,"updated":"2013-06-19 18:51:09.000000000","message":"Is there a point we should just give up and hard fail instead of spin endlessly with ever-increasing sleep lengths.","commit_id":"35d4ea49988ddb71d03322cb2ca9f421a91af552"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"35226b2e95ff65a9e88a59099414188e90eb69df","unresolved":false,"context_lines":[{"line_number":129,"context_line":"            self._run_iscsiadm(connection_properties, (\"--rescan\",))"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"            tries \u003d tries + 1"},{"line_number":132,"context_line":"            if not os.path.exists(host_device):"},{"line_number":133,"context_line":"                time.sleep(tries ** 2)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        if tries !\u003d 0:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPn%2F%2F2JY%3D","line":132,"in_reply_to":"AAAAPn%2F%2F2t8%3D","updated":"2013-06-19 21:54:28.000000000","message":"There isn\u0027t an endless list of tries.   Read line 119.","commit_id":"35d4ea49988ddb71d03322cb2ca9f421a91af552"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"ade0c66cd5772b6fc0adf7f4f165b383921b6537","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        \"\"\""},{"line_number":161,"context_line":"        multipath_device \u003d None"},{"line_number":162,"context_line":"        if CONF.brick_use_multipath:"},{"line_number":163,"context_line":"            host_device \u003d (\"/dev/disk/by-path/ip-%s-iscsi-%s-lun-%s\" %"},{"line_number":164,"context_line":"                           (connection_properties[\u0027target_portal\u0027],"},{"line_number":165,"context_line":"                            connection_properties[\u0027target_iqn\u0027],"},{"line_number":166,"context_line":"                            connection_properties.get(\u0027target_lun\u0027, 0)))"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPn%2F%2F2t4%3D","line":163,"updated":"2013-06-19 18:51:09.000000000","message":"Same question as the above comment about using the named substitution strings.","commit_id":"35d4ea49988ddb71d03322cb2ca9f421a91af552"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"8c7d177288918988ce20c2d82199e24bf4581d68","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        \"\"\""},{"line_number":161,"context_line":"        multipath_device \u003d None"},{"line_number":162,"context_line":"        if CONF.brick_use_multipath:"},{"line_number":163,"context_line":"            host_device \u003d (\"/dev/disk/by-path/ip-%s-iscsi-%s-lun-%s\" %"},{"line_number":164,"context_line":"                           (connection_properties[\u0027target_portal\u0027],"},{"line_number":165,"context_line":"                            connection_properties[\u0027target_iqn\u0027],"},{"line_number":166,"context_line":"                            connection_properties.get(\u0027target_lun\u0027, 0)))"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPn%2F%2Fwds%3D","line":163,"in_reply_to":"AAAAPn%2F%2F2JA%3D","updated":"2013-06-21 23:09:06.000000000","message":"Done","commit_id":"35d4ea49988ddb71d03322cb2ca9f421a91af552"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"35226b2e95ff65a9e88a59099414188e90eb69df","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        \"\"\""},{"line_number":161,"context_line":"        multipath_device \u003d None"},{"line_number":162,"context_line":"        if CONF.brick_use_multipath:"},{"line_number":163,"context_line":"            host_device \u003d (\"/dev/disk/by-path/ip-%s-iscsi-%s-lun-%s\" %"},{"line_number":164,"context_line":"                           (connection_properties[\u0027target_portal\u0027],"},{"line_number":165,"context_line":"                            connection_properties[\u0027target_iqn\u0027],"},{"line_number":166,"context_line":"                            connection_properties.get(\u0027target_lun\u0027, 0)))"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPn%2F%2F2JA%3D","line":163,"in_reply_to":"AAAAPn%2F%2F2t4%3D","updated":"2013-06-19 21:54:28.000000000","message":"answer same as above.","commit_id":"35d4ea49988ddb71d03322cb2ca9f421a91af552"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"ade0c66cd5772b6fc0adf7f4f165b383921b6537","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        # NOTE(vish): Only disconnect from the target if no luns from the"},{"line_number":174,"context_line":"        #             target are in use."},{"line_number":175,"context_line":"        device_prefix \u003d (\"/dev/disk/by-path/ip-%s-iscsi-%s-lun-\" %"},{"line_number":176,"context_line":"                         (connection_properties[\u0027target_portal\u0027],"},{"line_number":177,"context_line":"                          connection_properties[\u0027target_iqn\u0027]))"},{"line_number":178,"context_line":"        devices \u003d self.driver.get_all_block_devices()"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPn%2F%2F2t0%3D","line":175,"updated":"2013-06-19 18:51:09.000000000","message":"See above question.","commit_id":"35d4ea49988ddb71d03322cb2ca9f421a91af552"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"8c7d177288918988ce20c2d82199e24bf4581d68","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        # NOTE(vish): Only disconnect from the target if no luns from the"},{"line_number":174,"context_line":"        #             target are in use."},{"line_number":175,"context_line":"        device_prefix \u003d (\"/dev/disk/by-path/ip-%s-iscsi-%s-lun-\" %"},{"line_number":176,"context_line":"                         (connection_properties[\u0027target_portal\u0027],"},{"line_number":177,"context_line":"                          connection_properties[\u0027target_iqn\u0027]))"},{"line_number":178,"context_line":"        devices \u003d self.driver.get_all_block_devices()"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPn%2F%2Fwdo%3D","line":175,"in_reply_to":"AAAAPn%2F%2F2I8%3D","updated":"2013-06-21 23:09:06.000000000","message":"Done","commit_id":"35d4ea49988ddb71d03322cb2ca9f421a91af552"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"35226b2e95ff65a9e88a59099414188e90eb69df","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        # NOTE(vish): Only disconnect from the target if no luns from the"},{"line_number":174,"context_line":"        #             target are in use."},{"line_number":175,"context_line":"        device_prefix \u003d (\"/dev/disk/by-path/ip-%s-iscsi-%s-lun-\" %"},{"line_number":176,"context_line":"                         (connection_properties[\u0027target_portal\u0027],"},{"line_number":177,"context_line":"                          connection_properties[\u0027target_iqn\u0027]))"},{"line_number":178,"context_line":"        devices \u003d self.driver.get_all_block_devices()"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPn%2F%2F2I8%3D","line":175,"in_reply_to":"AAAAPn%2F%2F2t0%3D","updated":"2013-06-19 21:54:28.000000000","message":"answer same as above.","commit_id":"35d4ea49988ddb71d03322cb2ca9f421a91af552"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"ade0c66cd5772b6fc0adf7f4f165b383921b6537","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        devices \u003d [dev for dev in devices if dev.startswith(device_prefix)]"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        # ignore the devices for our specific LUN as it\u0027s going away."},{"line_number":182,"context_line":"        lun_str \u003d device_prefix + \"%s\" % connection_properties[\u0027target_lun\u0027]"},{"line_number":183,"context_line":"        devices \u003d [dev for dev in devices if not dev.startswith(lun_str)]"},{"line_number":184,"context_line":"        if not devices:"},{"line_number":185,"context_line":"            self._disconnect_from_iscsi_portal(connection_properties)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPn%2F%2F2tg%3D","line":182,"updated":"2013-06-19 18:51:09.000000000","message":"perhaps use a substitution string like \u0027%(device_prefix)s %(target_lun)s\" here rather than the lun_str \u003d string + substitution.  \n\nMostly this is a readability concern.","commit_id":"35d4ea49988ddb71d03322cb2ca9f421a91af552"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"35226b2e95ff65a9e88a59099414188e90eb69df","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        devices \u003d [dev for dev in devices if dev.startswith(device_prefix)]"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        # ignore the devices for our specific LUN as it\u0027s going away."},{"line_number":182,"context_line":"        lun_str \u003d device_prefix + \"%s\" % connection_properties[\u0027target_lun\u0027]"},{"line_number":183,"context_line":"        devices \u003d [dev for dev in devices if not dev.startswith(lun_str)]"},{"line_number":184,"context_line":"        if not devices:"},{"line_number":185,"context_line":"            self._disconnect_from_iscsi_portal(connection_properties)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPn%2F%2F2I4%3D","line":182,"in_reply_to":"AAAAPn%2F%2F2tg%3D","updated":"2013-06-19 21:54:28.000000000","message":"answer same as above.","commit_id":"35d4ea49988ddb71d03322cb2ca9f421a91af552"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"ade0c66cd5772b6fc0adf7f4f165b383921b6537","unresolved":false,"context_lines":[{"line_number":193,"context_line":"                                   *iscsi_command, run_as_root\u003dTrue,"},{"line_number":194,"context_line":"                                   root_helper\u003dself.root_helper,"},{"line_number":195,"context_line":"                                   check_exit_code\u003dcheck_exit_code)"},{"line_number":196,"context_line":"        LOG.debug(\"iscsiadm %s: stdout\u003d%s stderr\u003d%s\" %"},{"line_number":197,"context_line":"                  (iscsi_command, out, err))"},{"line_number":198,"context_line":"        return (out, err)"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPn%2F%2F2tQ%3D","line":196,"updated":"2013-06-19 18:51:09.000000000","message":"For consistency, should use the named substitution style here as well (you\u0027re using it in some log lines above).  I know cinder isn\u0027t as picky in pep8 about multiple place-holders in a string as some other projects.","commit_id":"35d4ea49988ddb71d03322cb2ca9f421a91af552"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"35226b2e95ff65a9e88a59099414188e90eb69df","unresolved":false,"context_lines":[{"line_number":193,"context_line":"                                   *iscsi_command, run_as_root\u003dTrue,"},{"line_number":194,"context_line":"                                   root_helper\u003dself.root_helper,"},{"line_number":195,"context_line":"                                   check_exit_code\u003dcheck_exit_code)"},{"line_number":196,"context_line":"        LOG.debug(\"iscsiadm %s: stdout\u003d%s stderr\u003d%s\" %"},{"line_number":197,"context_line":"                  (iscsi_command, out, err))"},{"line_number":198,"context_line":"        return (out, err)"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPn%2F%2F2I0%3D","line":196,"in_reply_to":"AAAAPn%2F%2F2tQ%3D","updated":"2013-06-19 21:54:28.000000000","message":"answer same as above.","commit_id":"35d4ea49988ddb71d03322cb2ca9f421a91af552"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"ade0c66cd5772b6fc0adf7f4f165b383921b6537","unresolved":false,"context_lines":[{"line_number":274,"context_line":"                   for p in out.splitlines() if p.startswith(\"tcp:\")]"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"        stripped_portal \u003d connection_properties[\u0027target_portal\u0027].split(\",\")[0]"},{"line_number":277,"context_line":"        if len(portals) \u003d\u003d 0 or len([s for s in portals"},{"line_number":278,"context_line":"                                     if stripped_portal \u003d\u003d"},{"line_number":279,"context_line":"                                     s[\u0027portal\u0027].split(\",\")[0]"},{"line_number":280,"context_line":"                                     and"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPn%2F%2F2rk%3D","line":277,"updated":"2013-06-19 18:51:09.000000000","message":"This is not clean or easy to follow.  You should split this into something that (if it needed to be debugged) would be easier to find the problem.  Formatting alone makes it very hard to clearly see what is going on.","commit_id":"35d4ea49988ddb71d03322cb2ca9f421a91af552"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"35226b2e95ff65a9e88a59099414188e90eb69df","unresolved":false,"context_lines":[{"line_number":274,"context_line":"                   for p in out.splitlines() if p.startswith(\"tcp:\")]"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"        stripped_portal \u003d connection_properties[\u0027target_portal\u0027].split(\",\")[0]"},{"line_number":277,"context_line":"        if len(portals) \u003d\u003d 0 or len([s for s in portals"},{"line_number":278,"context_line":"                                     if stripped_portal \u003d\u003d"},{"line_number":279,"context_line":"                                     s[\u0027portal\u0027].split(\",\")[0]"},{"line_number":280,"context_line":"                                     and"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPn%2F%2F2Iw%3D","line":277,"in_reply_to":"AAAAPn%2F%2F2rk%3D","updated":"2013-06-19 21:54:28.000000000","message":"again this is a copy/paste from Nova and I\u0027m not comfortable altering code unless it\u0027s a major bug.  We can address this issue later once both Nova and cinder are using this lib.","commit_id":"35d4ea49988ddb71d03322cb2ca9f421a91af552"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"ade0c66cd5772b6fc0adf7f4f165b383921b6537","unresolved":false,"context_lines":[{"line_number":352,"context_line":"                                   run_as_root\u003dTrue,"},{"line_number":353,"context_line":"                                   root_helper\u003dself.root_helper,"},{"line_number":354,"context_line":"                                   check_exit_code\u003dcheck_exit_code)"},{"line_number":355,"context_line":"        LOG.debug(\"iscsiadm %s: stdout\u003d%s stderr\u003d%s\" %"},{"line_number":356,"context_line":"                  (iscsi_command, out, err))"},{"line_number":357,"context_line":"        return (out, err)"},{"line_number":358,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPn%2F%2F2rU%3D","line":355,"updated":"2013-06-19 18:51:09.000000000","message":"See above comment about named substitution strings.","commit_id":"35d4ea49988ddb71d03322cb2ca9f421a91af552"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"35226b2e95ff65a9e88a59099414188e90eb69df","unresolved":false,"context_lines":[{"line_number":352,"context_line":"                                   run_as_root\u003dTrue,"},{"line_number":353,"context_line":"                                   root_helper\u003dself.root_helper,"},{"line_number":354,"context_line":"                                   check_exit_code\u003dcheck_exit_code)"},{"line_number":355,"context_line":"        LOG.debug(\"iscsiadm %s: stdout\u003d%s stderr\u003d%s\" %"},{"line_number":356,"context_line":"                  (iscsi_command, out, err))"},{"line_number":357,"context_line":"        return (out, err)"},{"line_number":358,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPn%2F%2F2Is%3D","line":355,"in_reply_to":"AAAAPn%2F%2F2rU%3D","updated":"2013-06-19 21:54:28.000000000","message":"answer same as above.","commit_id":"35d4ea49988ddb71d03322cb2ca9f421a91af552"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"769207895e4d36ee21dc42e2823a3e11e31610b2","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    def _get_name_from_path(self, path):"},{"line_number":71,"context_line":"        \"\"\"Finds the /dev/sdX device name for an entry in"},{"line_number":72,"context_line":"        /dev/disk/by-path entry."},{"line_number":73,"context_line":"        \"\"\""},{"line_number":74,"context_line":"        (out, err) \u003d self._execute(\"ls\", \"-l\", path,"},{"line_number":75,"context_line":"                                   run_as_root\u003dTrue,"},{"line_number":76,"context_line":"                                   root_helper\u003dself.root_helper)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPn%2F%2F1l4%3D","line":73,"updated":"2013-06-20 04:03:50.000000000","message":"use os.path.realpath do this will more easy.","commit_id":"5fd43697263553f89df0f842b1fc345ac0d6b76a"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"fe42d4f75fde15978ba2713f01db0aa3d47d21fd","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    def _get_name_from_path(self, path):"},{"line_number":71,"context_line":"        \"\"\"Finds the /dev/sdX device name for an entry in"},{"line_number":72,"context_line":"        /dev/disk/by-path entry."},{"line_number":73,"context_line":"        \"\"\""},{"line_number":74,"context_line":"        (out, err) \u003d self._execute(\"ls\", \"-l\", path,"},{"line_number":75,"context_line":"                                   run_as_root\u003dTrue,"},{"line_number":76,"context_line":"                                   root_helper\u003dself.root_helper)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPn%2F%2F0Gs%3D","line":73,"in_reply_to":"AAAAPn%2F%2F1l4%3D","updated":"2013-06-20 15:57:57.000000000","message":"Done","commit_id":"5fd43697263553f89df0f842b1fc345ac0d6b76a"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"769207895e4d36ee21dc42e2823a3e11e31610b2","unresolved":false,"context_lines":[{"line_number":206,"context_line":"                          connection_properties[\u0027target_iqn\u0027]))"},{"line_number":207,"context_line":"        devices \u003d self.driver.get_all_block_devices()"},{"line_number":208,"context_line":"        devices \u003d [dev for dev in devices if dev.startswith(device_prefix)]"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        if not devices:"},{"line_number":211,"context_line":"            self._disconnect_from_iscsi_portal(connection_properties)"},{"line_number":212,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPn%2F%2F1jw%3D","line":209,"updated":"2013-06-20 04:03:50.000000000","message":"The check on here in the last PS [1] is necessary, unless you change the hook HostDriver.get_all_block_devices() logic. This issue just like my comment on L262, since the default hook return ALL attached device INCLUDE current detaching one. this caused \u0027devices\u0027 array never be empty, so L211 will never be called.\n\nbtw, as I commented here in PS9 (please refer it), [1] has an issue (re-post again): we need more smart checking, as i said maybe there has a lun11-part device, when you remove lun1-part, the startswith(lun_str) will not filter well for lun11-part.\n\n[1]:\n        # ignore the devices for our specific LUN as it\u0027s going away.\n        lun_str \u003d device_prefix + \"%s\" % connection_properties[\u0027target_lun\u0027]\n        devices \u003d [dev for dev in devices if not dev.startswith(lun_str)]","commit_id":"5fd43697263553f89df0f842b1fc345ac0d6b76a"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"610a8be11e6de8a7944ba43a52c0d13440b49b2a","unresolved":false,"context_lines":[{"line_number":206,"context_line":"                          connection_properties[\u0027target_iqn\u0027]))"},{"line_number":207,"context_line":"        devices \u003d self.driver.get_all_block_devices()"},{"line_number":208,"context_line":"        devices \u003d [dev for dev in devices if dev.startswith(device_prefix)]"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        if not devices:"},{"line_number":211,"context_line":"            self._disconnect_from_iscsi_portal(connection_properties)"},{"line_number":212,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPn%2F%2Fz4I%3D","line":209,"in_reply_to":"AAAAPn%2F%2F0C0%3D","updated":"2013-06-20 17:07:14.000000000","message":"That code is no longer needed because the device doesn\u0027t exist on the system any longer.   The checks now are the same as they are in Nova.","commit_id":"5fd43697263553f89df0f842b1fc345ac0d6b76a"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"c7d20ad6421ce2e955e055b2d7f422b4540e1204","unresolved":false,"context_lines":[{"line_number":206,"context_line":"                          connection_properties[\u0027target_iqn\u0027]))"},{"line_number":207,"context_line":"        devices \u003d self.driver.get_all_block_devices()"},{"line_number":208,"context_line":"        devices \u003d [dev for dev in devices if dev.startswith(device_prefix)]"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        if not devices:"},{"line_number":211,"context_line":"            self._disconnect_from_iscsi_portal(connection_properties)"},{"line_number":212,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPn%2F%2F0C0%3D","line":209,"in_reply_to":"AAAAPn%2F%2F0HA%3D","updated":"2013-06-20 16:10:53.000000000","message":"Correct, but I consider the issue I mentioned in below comment should be address since there have not \u0027protect\u0027 within _remove_scsi_device logic.","commit_id":"5fd43697263553f89df0f842b1fc345ac0d6b76a"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"fe42d4f75fde15978ba2713f01db0aa3d47d21fd","unresolved":false,"context_lines":[{"line_number":206,"context_line":"                          connection_properties[\u0027target_iqn\u0027]))"},{"line_number":207,"context_line":"        devices \u003d self.driver.get_all_block_devices()"},{"line_number":208,"context_line":"        devices \u003d [dev for dev in devices if dev.startswith(device_prefix)]"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        if not devices:"},{"line_number":211,"context_line":"            self._disconnect_from_iscsi_portal(connection_properties)"},{"line_number":212,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPn%2F%2F0HA%3D","line":209,"in_reply_to":"AAAAPn%2F%2F1jw%3D","updated":"2013-06-20 15:57:57.000000000","message":"This is incorrect.   The device that we are detaching has been removed from the system now.  Look at lines 198-200.  That is new code that I added to actually remove the device from the kernel.  The call to get_all_devices won\u0027t have the current detaching device because it doesn\u0027t exist anymore.","commit_id":"5fd43697263553f89df0f842b1fc345ac0d6b76a"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"2501336205ec0285d405e1924049871aff85de83","unresolved":false,"context_lines":[{"line_number":206,"context_line":"                          connection_properties[\u0027target_iqn\u0027]))"},{"line_number":207,"context_line":"        devices \u003d self.driver.get_all_block_devices()"},{"line_number":208,"context_line":"        devices \u003d [dev for dev in devices if dev.startswith(device_prefix)]"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        if not devices:"},{"line_number":211,"context_line":"            self._disconnect_from_iscsi_portal(connection_properties)"},{"line_number":212,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPn%2F%2Fy6g%3D","line":209,"in_reply_to":"AAAAPn%2F%2Fz4I%3D","updated":"2013-06-21 02:03:44.000000000","message":"hemna, I means the issue/comment on Line261. Here is OK.","commit_id":"5fd43697263553f89df0f842b1fc345ac0d6b76a"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"769207895e4d36ee21dc42e2823a3e11e31610b2","unresolved":false,"context_lines":[{"line_number":259,"context_line":"            return"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"        other_iqns \u003d [self._get_multipath_iqn(device)"},{"line_number":262,"context_line":"                      for device in devices]"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"        if connection_properties[\u0027target_iqn\u0027] not in other_iqns:"},{"line_number":265,"context_line":"            # disconnect if no other multipath devices with same iqn"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPn%2F%2F1ls%3D","line":262,"updated":"2013-06-20 04:03:50.000000000","message":"there is an issue here, we have confirmed in PS9, but seems you have not fix it in this path, just re-post here to remind kindly: This code in nova is correct since \u0027self.driver\u0027 is always hypervisor but not your hook (host_driver.py:HostDriver.get_all_block_devices()), so as i said in above comment, hypervisor.get_all_block_devices() return all vm attached device WITHOUT current detaching one. but in this new code, your hook return ALL attached device INCLUDE current detaching one. this caused self._disconnect_mpath never be called.","commit_id":"5fd43697263553f89df0f842b1fc345ac0d6b76a"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ddca78a97f577afce7fd1d5d933135d958488c48","unresolved":false,"context_lines":[{"line_number":259,"context_line":"            return"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"        other_iqns \u003d [self._get_multipath_iqn(device)"},{"line_number":262,"context_line":"                      for device in devices]"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"        if connection_properties[\u0027target_iqn\u0027] not in other_iqns:"},{"line_number":265,"context_line":"            # disconnect if no other multipath devices with same iqn"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPn%2F%2Fw6o%3D","line":262,"in_reply_to":"AAAAPn%2F%2F1ls%3D","updated":"2013-06-21 19:21:08.000000000","message":"Unfortunately, the only real way to fix this is to fix the multipath code in here to begin with.   As you may have noticed, at no point in the multipath disconnect_volume code path, do we actually remove the LUN nor the multipath device from the system.  If we removed the multipath device and it\u0027s associated LUNs, then this code here would work.\n\nThe only thing this method is really trying to do is to determine if they should call iscsiadm logout.  That\u0027s not sufficient to disconnect a multipath volume in my opinion.   So my next patch is going to try and do the \u0027right\u0027 thing which is this.\n\n1) for ever LUN associated with the multipath device remove each LUN\n2) then remove the multipath device itself by flushing the multipath entry from the daemon.\n3) then call this method to determine if we should iscsiadm logout.   \n\nIf 1 and 2 are done prior to this method call, then the call to self.driver.get_all_block_devices() will result in a list of devices minus the device we are detaching and then there is no hacks to add to our own driver.get_all_block_devices.","commit_id":"5fd43697263553f89df0f842b1fc345ac0d6b76a"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"7824b770448e7525da772999101682cb8940dc57","unresolved":false,"context_lines":[{"line_number":259,"context_line":"            return"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"        other_iqns \u003d [self._get_multipath_iqn(device)"},{"line_number":262,"context_line":"                      for device in devices]"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"        if connection_properties[\u0027target_iqn\u0027] not in other_iqns:"},{"line_number":265,"context_line":"            # disconnect if no other multipath devices with same iqn"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPn%2F%2Fwd0%3D","line":262,"in_reply_to":"AAAAPn%2F%2Fw6o%3D","updated":"2013-06-21 23:09:15.000000000","message":"Done","commit_id":"5fd43697263553f89df0f842b1fc345ac0d6b76a"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"a91d7b3bb3cc9c0eea7b8266b289b42af78c282d","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"brick_opts \u003d ["},{"line_number":36,"context_line":"    cfg.BoolOpt(\u0027brick_use_multipath\u0027,"},{"line_number":37,"context_line":"                default\u003dFalse,"},{"line_number":38,"context_line":"                help\u003d\u0027Use multipath for volume attach\u0027), ]"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAPn%2F%2FsY0%3D","line":35,"updated":"2013-06-25 05:19:31.000000000","message":"I was thinking about trying to avoid declaring CONF settings in brick to avoid namespace issues.  In other words have them declared and set by the caller and possible passed in via init?\n\nEither that or a parent class model like we have with the Cinder drivers that each user needs to wrap the brick code in.\n\nThoughts?","commit_id":"7ea7a7859a734cc9e29e9e8c7033e183d9248277"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"857732318736af0cc18e0707cf254b7572d74819","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"brick_opts \u003d ["},{"line_number":36,"context_line":"    cfg.BoolOpt(\u0027brick_use_multipath\u0027,"},{"line_number":37,"context_line":"                default\u003dFalse,"},{"line_number":38,"context_line":"                help\u003d\u0027Use multipath for volume attach\u0027), ]"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAPn%2F%2Fq4A%3D","line":35,"in_reply_to":"AAAAPn%2F%2FsY0%3D","updated":"2013-06-25 15:52:00.000000000","message":"I can easily make the conf item passable in the constructor.\nI\u0027ll default the use_multipath to False.  If you want to use it, you have to pass it in and set it to True.","commit_id":"7ea7a7859a734cc9e29e9e8c7033e183d9248277"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"dca5bf274f060f5361c5c57823b2c27fc4edfa4b","unresolved":false,"context_lines":[{"line_number":19,"context_line":"import host_driver"},{"line_number":20,"context_line":"import linuxscsi"},{"line_number":21,"context_line":"import os"},{"line_number":22,"context_line":"import re"},{"line_number":23,"context_line":"import time"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from oslo.config import cfg"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAPn%2F%2Fp5s%3D","line":22,"updated":"2013-06-25 21:17:57.000000000","message":"re is never used.","commit_id":"2c95b2495ede87ee943c5979606a352c4909ab95"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"f1a27f539034fef6bb61aea5dc8dfa910d6647e8","unresolved":false,"context_lines":[{"line_number":19,"context_line":"import host_driver"},{"line_number":20,"context_line":"import linuxscsi"},{"line_number":21,"context_line":"import os"},{"line_number":22,"context_line":"import re"},{"line_number":23,"context_line":"import time"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from oslo.config import cfg"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAPn%2F%2Fng0%3D","line":22,"in_reply_to":"AAAAPn%2F%2Fp5s%3D","updated":"2013-06-26 17:14:15.000000000","message":"Done","commit_id":"2c95b2495ede87ee943c5979606a352c4909ab95"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"e55d8b5f847d292f84c7d13b2d1b6360f112e5d1","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        self._linuxscsi \u003d linuxscsi.LinuxSCSI(execute, root_helper)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def set_driver(self, driver):"},{"line_number":50,"context_line":"        \"\"\"The driver is used for a connection to"},{"line_number":51,"context_line":"           a VM driver for ensuring no busy luns to a VM"},{"line_number":52,"context_line":"        \"\"\""},{"line_number":53,"context_line":"        self.driver \u003d driver"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAPn%2F%2Fpzs%3D","line":50,"updated":"2013-06-26 04:27:38.000000000","message":"fix doc string https://github.com/openstack/cinder/blob/master/HACKING.rst#docstrings","commit_id":"2c95b2495ede87ee943c5979606a352c4909ab95"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"f1a27f539034fef6bb61aea5dc8dfa910d6647e8","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        self._linuxscsi \u003d linuxscsi.LinuxSCSI(execute, root_helper)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def set_driver(self, driver):"},{"line_number":50,"context_line":"        \"\"\"The driver is used for a connection to"},{"line_number":51,"context_line":"           a VM driver for ensuring no busy luns to a VM"},{"line_number":52,"context_line":"        \"\"\""},{"line_number":53,"context_line":"        self.driver \u003d driver"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAPn%2F%2Fngw%3D","line":50,"in_reply_to":"AAAAPn%2F%2Fpzs%3D","updated":"2013-06-26 17:14:15.000000000","message":"Done","commit_id":"2c95b2495ede87ee943c5979606a352c4909ab95"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"e55d8b5f847d292f84c7d13b2d1b6360f112e5d1","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        target_portal - ip and optional port"},{"line_number":78,"context_line":"        target_iqn - iSCSI Qualified Name"},{"line_number":79,"context_line":"        target_lun - LUN id of the volume"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        \"\"\""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        device_info \u003d {\u0027type\u0027: \u0027block\u0027}"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAPn%2F%2Fpz0%3D","line":80,"updated":"2013-06-26 04:27:38.000000000","message":"nit: no new line here. https://github.com/openstack/cinder/blob/master/HACKING.rst#docstrings","commit_id":"2c95b2495ede87ee943c5979606a352c4909ab95"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"f1a27f539034fef6bb61aea5dc8dfa910d6647e8","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        target_portal - ip and optional port"},{"line_number":78,"context_line":"        target_iqn - iSCSI Qualified Name"},{"line_number":79,"context_line":"        target_lun - LUN id of the volume"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        \"\"\""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        device_info \u003d {\u0027type\u0027: \u0027block\u0027}"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAPn%2F%2Fngs%3D","line":80,"in_reply_to":"AAAAPn%2F%2Fpz0%3D","updated":"2013-06-26 17:14:15.000000000","message":"Done","commit_id":"2c95b2495ede87ee943c5979606a352c4909ab95"}],"cinder/brick/initiator/linuxscsi.py":[{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"4852e61c8c1f69feebec2275a4c7b17d46800b1c","unresolved":false,"context_lines":[{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class LinuxSCSI(executor.Executor):"},{"line_number":30,"context_line":"    def __init__(self, execute\u003dputils.execute, root_helper\u003d\"sudo\","},{"line_number":31,"context_line":"                 *args, **kwargs):"},{"line_number":32,"context_line":"        super(LinuxSCSI, self).__init__(execute, root_helper,"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAPn%2F%2FwDU%3D","line":29,"updated":"2013-06-22 11:47:47.000000000","message":"You\u0027d better add the necessary doc here, allow other developers can follow this up well later. IMO, some methods can live in ISCSIConnector but also have reason to move it here, as a part of \u0027linux iscsi handlers\u0027. If you consider this class is be designed to give iscsi support for \u0027Linux\u0027 platform only (as it named), then a lot of functions should move here, sush as ISCSIConnector ._get_device_path, it implemented path making format can only work for Linux.\nI know, you just copied those code from Nova to ISCSIConnector, and keep minimum change for there currently, so for this brick attaching/detaching patch release, could you give some necessary descriptions to this class/abstract, maybe be you prepared it for follow development.","commit_id":"44426f3036458d52d06d074b5151d37ff35aa59c"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"398a4eea0738b9738532dc5bd0d4b2c824f6dc8c","unresolved":false,"context_lines":[{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class LinuxSCSI(executor.Executor):"},{"line_number":30,"context_line":"    def __init__(self, execute\u003dputils.execute, root_helper\u003d\"sudo\","},{"line_number":31,"context_line":"                 *args, **kwargs):"},{"line_number":32,"context_line":"        super(LinuxSCSI, self).__init__(execute, root_helper,"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAPn%2F%2Fv%2B4%3D","line":29,"in_reply_to":"AAAAPn%2F%2Fv%2Fc%3D","updated":"2013-06-22 16:03:52.000000000","message":"Oops, noticed :)","commit_id":"44426f3036458d52d06d074b5151d37ff35aa59c"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"dc07f18369d87d79e0561c1cf5e6a03ad49834f0","unresolved":false,"context_lines":[{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class LinuxSCSI(executor.Executor):"},{"line_number":30,"context_line":"    def __init__(self, execute\u003dputils.execute, root_helper\u003d\"sudo\","},{"line_number":31,"context_line":"                 *args, **kwargs):"},{"line_number":32,"context_line":"        super(LinuxSCSI, self).__init__(execute, root_helper,"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAPn%2F%2Fv%2Fc%3D","line":29,"in_reply_to":"AAAAPn%2F%2FwDU%3D","updated":"2013-06-22 15:13:25.000000000","message":"This class is for dealing with Linux SCSI subsystem, not for iSCSI :-) I\u0027ll add a doc block here to explain that.","commit_id":"44426f3036458d52d06d074b5151d37ff35aa59c"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"dca5bf274f060f5361c5c57823b2c27fc4edfa4b","unresolved":false,"context_lines":[{"line_number":23,"context_line":"import os"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":26,"context_line":"from cinder.openstack.common import loopingcall"},{"line_number":27,"context_line":"from cinder.openstack.common import processutils as putils"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAPn%2F%2Fp5o%3D","line":26,"updated":"2013-06-25 21:17:57.000000000","message":"loopingcall is never used.","commit_id":"2c95b2495ede87ee943c5979606a352c4909ab95"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"f1a27f539034fef6bb61aea5dc8dfa910d6647e8","unresolved":false,"context_lines":[{"line_number":23,"context_line":"import os"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":26,"context_line":"from cinder.openstack.common import loopingcall"},{"line_number":27,"context_line":"from cinder.openstack.common import processutils as putils"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAPn%2F%2Fngk%3D","line":26,"in_reply_to":"AAAAPn%2F%2Fp5o%3D","updated":"2013-06-26 17:14:15.000000000","message":"Done","commit_id":"2c95b2495ede87ee943c5979606a352c4909ab95"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"e55d8b5f847d292f84c7d13b2d1b6360f112e5d1","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        self._execute(\u0027tee\u0027, *args, **kwargs)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def get_name_from_path(self, path):"},{"line_number":47,"context_line":"        \"\"\"Finds the /dev/sdX device name for an entry in"},{"line_number":48,"context_line":"        /dev/disk/by-path entry."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        /dev/disk/by-path entries are symlinks to a /dev/sdX"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAPn%2F%2Fp0w%3D","line":47,"updated":"2013-06-26 04:27:38.000000000","message":"fix doc string https://github.com/openstack/cinder/blob/master/HACKING.rst#docstrings","commit_id":"2c95b2495ede87ee943c5979606a352c4909ab95"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"f1a27f539034fef6bb61aea5dc8dfa910d6647e8","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        self._execute(\u0027tee\u0027, *args, **kwargs)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def get_name_from_path(self, path):"},{"line_number":47,"context_line":"        \"\"\"Finds the /dev/sdX device name for an entry in"},{"line_number":48,"context_line":"        /dev/disk/by-path entry."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        /dev/disk/by-path entries are symlinks to a /dev/sdX"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAPn%2F%2FneY%3D","line":47,"in_reply_to":"AAAAPn%2F%2Fp0w%3D","updated":"2013-06-26 17:14:15.000000000","message":"Done","commit_id":"2c95b2495ede87ee943c5979606a352c4909ab95"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"e55d8b5f847d292f84c7d13b2d1b6360f112e5d1","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            self.echo_scsi_command(path, \"1\")"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def remove_multipath_device(self, multipath_name):"},{"line_number":67,"context_line":"        \"\"\"This removes LUNs associated with a multipath device"},{"line_number":68,"context_line":"        and the multipath device itself."},{"line_number":69,"context_line":"        \"\"\""},{"line_number":70,"context_line":"        LOG.debug(\"remove multipath device %s\" % multipath_name)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAPn%2F%2Fp0s%3D","line":67,"updated":"2013-06-26 04:27:38.000000000","message":"fix doc string https://github.com/openstack/cinder/blob/master/HACKING.rst#docstrings","commit_id":"2c95b2495ede87ee943c5979606a352c4909ab95"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"f1a27f539034fef6bb61aea5dc8dfa910d6647e8","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            self.echo_scsi_command(path, \"1\")"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def remove_multipath_device(self, multipath_name):"},{"line_number":67,"context_line":"        \"\"\"This removes LUNs associated with a multipath device"},{"line_number":68,"context_line":"        and the multipath device itself."},{"line_number":69,"context_line":"        \"\"\""},{"line_number":70,"context_line":"        LOG.debug(\"remove multipath device %s\" % multipath_name)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAPn%2F%2FngA%3D","line":67,"in_reply_to":"AAAAPn%2F%2Fp0s%3D","updated":"2013-06-26 17:14:15.000000000","message":"Done","commit_id":"2c95b2495ede87ee943c5979606a352c4909ab95"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"e55d8b5f847d292f84c7d13b2d1b6360f112e5d1","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                     % {\u0027code\u0027: exc.exit_code})"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def find_multipath_device(self, device):"},{"line_number":96,"context_line":"        \"\"\"Find a multipath device associated with a raw LUN device name"},{"line_number":97,"context_line":"        or multipath device id."},{"line_number":98,"context_line":"        The device could be /dev/sdm or"},{"line_number":99,"context_line":"        a multipath id"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAPn%2F%2Fp0k%3D","line":96,"updated":"2013-06-26 04:27:38.000000000","message":"fix doc string https://github.com/openstack/cinder/blob/master/HACKING.rst#docstrings","commit_id":"2c95b2495ede87ee943c5979606a352c4909ab95"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"f1a27f539034fef6bb61aea5dc8dfa910d6647e8","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                     % {\u0027code\u0027: exc.exit_code})"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def find_multipath_device(self, device):"},{"line_number":96,"context_line":"        \"\"\"Find a multipath device associated with a raw LUN device name"},{"line_number":97,"context_line":"        or multipath device id."},{"line_number":98,"context_line":"        The device could be /dev/sdm or"},{"line_number":99,"context_line":"        a multipath id"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAPn%2F%2Fnf8%3D","line":96,"in_reply_to":"AAAAPn%2F%2Fp0k%3D","updated":"2013-06-26 17:14:15.000000000","message":"Done","commit_id":"2c95b2495ede87ee943c5979606a352c4909ab95"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"e55d8b5f847d292f84c7d13b2d1b6360f112e5d1","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"                if mdev is None:"},{"line_number":131,"context_line":"                    LOG.warn(_(\"Couldn\u0027t find multipath device %(line)s\")"},{"line_number":132,"context_line":"                             % locals())"},{"line_number":133,"context_line":"                    return None"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"                LOG.debug(_(\"Found multipath device \u003d %(mdev)s\") % locals())"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAPn%2F%2FpzY%3D","line":132,"updated":"2013-06-26 04:27:38.000000000","message":"no locals https://github.com/openstack/cinder/blob/master/HACKING.rst#general","commit_id":"2c95b2495ede87ee943c5979606a352c4909ab95"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"f1a27f539034fef6bb61aea5dc8dfa910d6647e8","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"                if mdev is None:"},{"line_number":131,"context_line":"                    LOG.warn(_(\"Couldn\u0027t find multipath device %(line)s\")"},{"line_number":132,"context_line":"                             % locals())"},{"line_number":133,"context_line":"                    return None"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"                LOG.debug(_(\"Found multipath device \u003d %(mdev)s\") % locals())"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAPn%2F%2Fnfs%3D","line":132,"in_reply_to":"AAAAPn%2F%2FpzY%3D","updated":"2013-06-26 17:14:15.000000000","message":"Done","commit_id":"2c95b2495ede87ee943c5979606a352c4909ab95"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"e55d8b5f847d292f84c7d13b2d1b6360f112e5d1","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                             % locals())"},{"line_number":133,"context_line":"                    return None"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"                LOG.debug(_(\"Found multipath device \u003d %(mdev)s\") % locals())"},{"line_number":136,"context_line":"                device_lines \u003d lines[3:]"},{"line_number":137,"context_line":"                for dev_line in device_lines:"},{"line_number":138,"context_line":"                    if dev_line.find(\"policy\") !\u003d -1:"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAPn%2F%2FpzU%3D","line":135,"updated":"2013-06-26 04:27:38.000000000","message":"no locals https://github.com/openstack/cinder/blob/master/HACKING.rst#general","commit_id":"2c95b2495ede87ee943c5979606a352c4909ab95"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"f1a27f539034fef6bb61aea5dc8dfa910d6647e8","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                             % locals())"},{"line_number":133,"context_line":"                    return None"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"                LOG.debug(_(\"Found multipath device \u003d %(mdev)s\") % locals())"},{"line_number":136,"context_line":"                device_lines \u003d lines[3:]"},{"line_number":137,"context_line":"                for dev_line in device_lines:"},{"line_number":138,"context_line":"                    if dev_line.find(\"policy\") !\u003d -1:"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAPn%2F%2Fnfo%3D","line":135,"in_reply_to":"AAAAPn%2F%2FpzU%3D","updated":"2013-06-26 17:14:15.000000000","message":"Done","commit_id":"2c95b2495ede87ee943c5979606a352c4909ab95"}],"cinder/tests/test_brick_initiator.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"dca5bf274f060f5361c5c57823b2c27fc4edfa4b","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import os.path"},{"line_number":18,"context_line":"import shutil"},{"line_number":19,"context_line":"import string"},{"line_number":20,"context_line":"import tempfile"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAPn%2F%2Fp6E%3D","line":18,"updated":"2013-06-25 21:17:57.000000000","message":"shutil is never used.","commit_id":"2c95b2495ede87ee943c5979606a352c4909ab95"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"f1a27f539034fef6bb61aea5dc8dfa910d6647e8","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import os.path"},{"line_number":18,"context_line":"import shutil"},{"line_number":19,"context_line":"import string"},{"line_number":20,"context_line":"import tempfile"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAPn%2F%2FnhA%3D","line":18,"in_reply_to":"AAAAPn%2F%2Fp6E%3D","updated":"2013-06-26 17:14:15.000000000","message":"Done","commit_id":"2c95b2495ede87ee943c5979606a352c4909ab95"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"dca5bf274f060f5361c5c57823b2c27fc4edfa4b","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import os.path"},{"line_number":18,"context_line":"import shutil"},{"line_number":19,"context_line":"import string"},{"line_number":20,"context_line":"import tempfile"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from cinder.brick.initiator import connector"},{"line_number":23,"context_line":"from cinder.brick.initiator import host_driver"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAPn%2F%2Fp54%3D","line":20,"updated":"2013-06-25 21:17:57.000000000","message":"tempfile is never used.","commit_id":"2c95b2495ede87ee943c5979606a352c4909ab95"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"f1a27f539034fef6bb61aea5dc8dfa910d6647e8","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import os.path"},{"line_number":18,"context_line":"import shutil"},{"line_number":19,"context_line":"import string"},{"line_number":20,"context_line":"import tempfile"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from cinder.brick.initiator import connector"},{"line_number":23,"context_line":"from cinder.brick.initiator import host_driver"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAPn%2F%2Fng8%3D","line":20,"in_reply_to":"AAAAPn%2F%2Fp54%3D","updated":"2013-06-26 17:14:15.000000000","message":"Done","commit_id":"2c95b2495ede87ee943c5979606a352c4909ab95"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"dca5bf274f060f5361c5c57823b2c27fc4edfa4b","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from cinder.brick.initiator import linuxscsi"},{"line_number":25,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":26,"context_line":"from cinder import test"},{"line_number":27,"context_line":"from cinder.volume import utils as volume_utils"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAPn%2F%2Fp6A%3D","line":27,"updated":"2013-06-25 21:17:57.000000000","message":"volume_utils never used.","commit_id":"2c95b2495ede87ee943c5979606a352c4909ab95"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"f1a27f539034fef6bb61aea5dc8dfa910d6647e8","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from cinder.brick.initiator import linuxscsi"},{"line_number":25,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":26,"context_line":"from cinder import test"},{"line_number":27,"context_line":"from cinder.volume import utils as volume_utils"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAPn%2F%2Fng4%3D","line":27,"in_reply_to":"AAAAPn%2F%2Fp6A%3D","updated":"2013-06-26 17:14:15.000000000","message":"Done","commit_id":"2c95b2495ede87ee943c5979606a352c4909ab95"}],"cinder/volume/driver.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"7de38910464db79c224a2029d99faf185c57fc98","unresolved":false,"context_lines":[{"line_number":442,"context_line":"        LOG.debug(\"Volume attached %s\" % host_device)"},{"line_number":443,"context_line":"        return iscsi_properties, host_device"},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"    def _detatch_volume(self, iscsi_properties):"},{"line_number":446,"context_line":"        LOG.debug(\"Detach volume %s:%s:%s\" %"},{"line_number":447,"context_line":"                  (iscsi_properties[\"target_portal\"],"},{"line_number":448,"context_line":"                   iscsi_properties[\"target_iqn\"],"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPX%2F%2Frlw%3D","line":445,"updated":"2013-06-12 21:33:35.000000000","message":"detatch -\u003e detach","commit_id":"0d86ba8275339b5d792bc37eb3409dbca6d9ba88"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"a1f492f3414d17ccad5a70db5b630a6a1059e832","unresolved":false,"context_lines":[{"line_number":442,"context_line":"        LOG.debug(\"Volume attached %s\" % host_device)"},{"line_number":443,"context_line":"        return iscsi_properties, host_device"},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"    def _detatch_volume(self, iscsi_properties):"},{"line_number":446,"context_line":"        LOG.debug(\"Detach volume %s:%s:%s\" %"},{"line_number":447,"context_line":"                  (iscsi_properties[\"target_portal\"],"},{"line_number":448,"context_line":"                   iscsi_properties[\"target_iqn\"],"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPX%2F%2Frlg%3D","line":445,"in_reply_to":"AAAAPX%2F%2Frlw%3D","updated":"2013-06-12 21:34:11.000000000","message":"thanks I\u0027ll fix that.","commit_id":"0d86ba8275339b5d792bc37eb3409dbca6d9ba88"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"ad985282fc9cfc15733a64f8c3e5c1f27e737db1","unresolved":false,"context_lines":[{"line_number":299,"context_line":"            properties[\u0027auth_password\u0027] \u003d auth_secret"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"        return properties"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"    def _run_iscsiadm(self, iscsi_properties, iscsi_command, **kwargs):"},{"line_number":304,"context_line":"        check_exit_code \u003d kwargs.pop(\u0027check_exit_code\u0027, 0)"},{"line_number":305,"context_line":"        (out, err) \u003d self._execute(\u0027iscsiadm\u0027, \u0027-m\u0027, \u0027node\u0027, \u0027-T\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2F%2FKw%3D","line":302,"updated":"2013-06-15 09:20:08.000000000","message":"Seems we no longer need it here.","commit_id":"0bbc97a2067bc1166033e2126a994ca6ddda6063"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"98eed606553d15e132f4329821dba40773c75cf8","unresolved":false,"context_lines":[{"line_number":299,"context_line":"            properties[\u0027auth_password\u0027] \u003d auth_secret"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"        return properties"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"    def _run_iscsiadm(self, iscsi_properties, iscsi_command, **kwargs):"},{"line_number":304,"context_line":"        check_exit_code \u003d kwargs.pop(\u0027check_exit_code\u0027, 0)"},{"line_number":305,"context_line":"        (out, err) \u003d self._execute(\u0027iscsiadm\u0027, \u0027-m\u0027, \u0027node\u0027, \u0027-T\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2F8Lk%3D","line":302,"in_reply_to":"AAAAPn%2F%2F%2FKw%3D","updated":"2013-06-17 20:07:27.000000000","message":"Child classes need this.","commit_id":"0bbc97a2067bc1166033e2126a994ca6ddda6063"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"ad985282fc9cfc15733a64f8c3e5c1f27e737db1","unresolved":false,"context_lines":[{"line_number":310,"context_line":"        LOG.debug(\"iscsiadm %s: stdout\u003d%s stderr\u003d%s\" %"},{"line_number":311,"context_line":"                  (iscsi_command, out, err))"},{"line_number":312,"context_line":"        return (out, err)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    def _run_iscsiadm_bare(self, iscsi_command, **kwargs):"},{"line_number":315,"context_line":"        check_exit_code \u003d kwargs.pop(\u0027check_exit_code\u0027, 0)"},{"line_number":316,"context_line":"        (out, err) \u003d self._execute(\u0027iscsiadm\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2F%2FKs%3D","line":313,"updated":"2013-06-15 09:20:08.000000000","message":"Seems we no longer need it here.","commit_id":"0bbc97a2067bc1166033e2126a994ca6ddda6063"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"98eed606553d15e132f4329821dba40773c75cf8","unresolved":false,"context_lines":[{"line_number":310,"context_line":"        LOG.debug(\"iscsiadm %s: stdout\u003d%s stderr\u003d%s\" %"},{"line_number":311,"context_line":"                  (iscsi_command, out, err))"},{"line_number":312,"context_line":"        return (out, err)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    def _run_iscsiadm_bare(self, iscsi_command, **kwargs):"},{"line_number":315,"context_line":"        check_exit_code \u003d kwargs.pop(\u0027check_exit_code\u0027, 0)"},{"line_number":316,"context_line":"        (out, err) \u003d self._execute(\u0027iscsiadm\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2F8Lg%3D","line":313,"in_reply_to":"AAAAPn%2F%2F%2FKs%3D","updated":"2013-06-17 20:07:27.000000000","message":"Child classes need this.","commit_id":"0bbc97a2067bc1166033e2126a994ca6ddda6063"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"ad985282fc9cfc15733a64f8c3e5c1f27e737db1","unresolved":false,"context_lines":[{"line_number":321,"context_line":"                  (iscsi_command, out, err))"},{"line_number":322,"context_line":"        return (out, err)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    def _iscsiadm_update(self, iscsi_properties, property_key, property_value,"},{"line_number":325,"context_line":"                         **kwargs):"},{"line_number":326,"context_line":"        iscsi_command \u003d (\u0027--op\u0027, \u0027update\u0027, \u0027-n\u0027, property_key,"},{"line_number":327,"context_line":"                         \u0027-v\u0027, property_value)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2F%2FK0%3D","line":324,"updated":"2013-06-15 09:20:08.000000000","message":"Seems we no longer need it here.","commit_id":"0bbc97a2067bc1166033e2126a994ca6ddda6063"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"98eed606553d15e132f4329821dba40773c75cf8","unresolved":false,"context_lines":[{"line_number":321,"context_line":"                  (iscsi_command, out, err))"},{"line_number":322,"context_line":"        return (out, err)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    def _iscsiadm_update(self, iscsi_properties, property_key, property_value,"},{"line_number":325,"context_line":"                         **kwargs):"},{"line_number":326,"context_line":"        iscsi_command \u003d (\u0027--op\u0027, \u0027update\u0027, \u0027-n\u0027, property_key,"},{"line_number":327,"context_line":"                         \u0027-v\u0027, property_value)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2F8Lc%3D","line":324,"in_reply_to":"AAAAPn%2F%2F%2FK0%3D","updated":"2013-06-17 20:07:27.000000000","message":"Child classes need this.","commit_id":"0bbc97a2067bc1166033e2126a994ca6ddda6063"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"ade0c66cd5772b6fc0adf7f4f165b383921b6537","unresolved":false,"context_lines":[{"line_number":443,"context_line":"        return iscsi_properties, host_device"},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"    def _detach_volume(self, iscsi_properties):"},{"line_number":446,"context_line":"        LOG.debug(\"Detach volume %s:%s:%s\" %"},{"line_number":447,"context_line":"                  (iscsi_properties[\"target_portal\"],"},{"line_number":448,"context_line":"                   iscsi_properties[\"target_iqn\"],"},{"line_number":449,"context_line":"                   iscsi_properties[\"target_lun\"]))"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPn%2F%2F2qg%3D","line":446,"updated":"2013-06-19 18:51:09.000000000","message":"Perhaps use named substitutions here for clarity and consistency.  Again, cinder isn\u0027t as picky about multiple place-holders when running through pep8 as other projects.","commit_id":"35d4ea49988ddb71d03322cb2ca9f421a91af552"}]}
