)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"273fcd42b4df9764faebe481ccf38d895c7a5841","unresolved":false,"context_lines":[{"line_number":42,"context_line":"return {\u0027driver_volume_type\u0027: \u0027fibrechan\u0027,"},{"line_number":43,"context_line":"        \u0027data\u0027: {\u0027target_lun\u0027, 1,"},{"line_number":44,"context_line":"                 \u0027target_wwn\u0027: [\u00271234567890123\u0027,"},{"line_number":45,"context_line":"                                \u00270987654321321\u0027]}}"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"Change-Id: Ifccc56f960ef434f7cb56a9367e4cad288358440"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"AAAAM3%2F%2FGUs%3D","line":45,"updated":"2013-02-07 04:25:41.000000000","message":"This should probably be flagged DocImpact.","commit_id":"888f327a58505010631e9f6669651c43d1b4f67a"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"bdbc12ac09a33a64e1a993375602d9fdb982e8cb","unresolved":false,"context_lines":[{"line_number":42,"context_line":"return {\u0027driver_volume_type\u0027: \u0027fibrechan\u0027,"},{"line_number":43,"context_line":"        \u0027data\u0027: {\u0027target_lun\u0027, 1,"},{"line_number":44,"context_line":"                 \u0027target_wwn\u0027: [\u00271234567890123\u0027,"},{"line_number":45,"context_line":"                                \u00270987654321321\u0027]}}"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"Change-Id: Ifccc56f960ef434f7cb56a9367e4cad288358440"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"AAAAM3%2F%2FFak%3D","line":45,"in_reply_to":"AAAAM3%2F%2FGUs%3D","updated":"2013-02-07 16:51:05.000000000","message":"This will be documented in our driver in cinder.  How do I flag this as DocImpact?","commit_id":"888f327a58505010631e9f6669651c43d1b4f67a"}],"nova/storage/__init__.py":[{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"668792788a568e8536ab4e41da30491be2226b7b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright (c) 2012 Hewlett-Packard, Inc."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2FKJA%3D","line":3,"updated":"2013-02-05 09:44:17.000000000","message":"s/2012/2013/ - check other files for this too","commit_id":"d40dd5b0828432dfe1c07ce66bf95ee7607b4917"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"33b2cc8b7ef508e145257e75ce9630aee7abf2aa","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright (c) 2012 Hewlett-Packard, Inc."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2FJfQ%3D","line":3,"in_reply_to":"AAAAM3%2F%2FKJA%3D","updated":"2013-02-05 16:48:52.000000000","message":"Done","commit_id":"d40dd5b0828432dfe1c07ce66bf95ee7607b4917"}],"nova/storage/linuxscsi.py":[{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"7b9424b1fc9c50621a214436b6a056e5d2d787a3","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        if not device[\"device\"] in devices:"},{"line_number":85,"context_line":"            done \u003d True"},{"line_number":86,"context_line":"        else:"},{"line_number":87,"context_line":"            time.sleep(2)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"def find_multipath_device(device):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FO44%3D","line":87,"updated":"2013-02-01 00:40:20.000000000","message":"Don\u0027t use sleep here. Use nova.utils.FixedIntervalLoopingCall so it doesn\u0027t block Nova.","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"592877a5979a461be4bc8fb16a70c45e8884bb9b","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        if not device[\"device\"] in devices:"},{"line_number":85,"context_line":"            done \u003d True"},{"line_number":86,"context_line":"        else:"},{"line_number":87,"context_line":"            time.sleep(2)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"def find_multipath_device(device):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FLEw%3D","line":87,"in_reply_to":"AAAAM3%2F%2FO44%3D","updated":"2013-02-04 21:53:11.000000000","message":"Done","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":24,"name":"Chuck Short","email":"charles.short@windriver.com","username":"zulcss"},"change_message_id":"36076a2f7ced65f47edf38cf9a2c65d7f140e194","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        (out, err) \u003d utils.execute(\u0027multipath\u0027, \u0027-ll\u0027, device,"},{"line_number":97,"context_line":"                               run_as_root\u003dTrue)"},{"line_number":98,"context_line":"    except exception.ProcessExecutionError as exc:"},{"line_number":99,"context_line":"        LOG.warn(\"Multipath call failed exit(%s)\" % exc.exit_code)"},{"line_number":100,"context_line":"        return None"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    if out:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FMBQ%3D","line":99,"updated":"2013-02-04 14:06:55.000000000","message":"this needs a _ for il8n","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"592877a5979a461be4bc8fb16a70c45e8884bb9b","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        (out, err) \u003d utils.execute(\u0027multipath\u0027, \u0027-ll\u0027, device,"},{"line_number":97,"context_line":"                               run_as_root\u003dTrue)"},{"line_number":98,"context_line":"    except exception.ProcessExecutionError as exc:"},{"line_number":99,"context_line":"        LOG.warn(\"Multipath call failed exit(%s)\" % exc.exit_code)"},{"line_number":100,"context_line":"        return None"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    if out:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FLEs%3D","line":99,"in_reply_to":"AAAAM3%2F%2FMBQ%3D","updated":"2013-02-04 21:53:11.000000000","message":"Done","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":24,"name":"Chuck Short","email":"charles.short@windriver.com","username":"zulcss"},"change_message_id":"36076a2f7ced65f47edf38cf9a2c65d7f140e194","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        if lines:"},{"line_number":106,"context_line":"            line \u003d lines[0]"},{"line_number":107,"context_line":"            info \u003d line.split(\" \")"},{"line_number":108,"context_line":"            #device line output is different depending"},{"line_number":109,"context_line":"            #on /etc/multipath.conf settings."},{"line_number":110,"context_line":"            if info[1][:2] \u003d\u003d \"dm\":"},{"line_number":111,"context_line":"                mdev \u003d \"/dev/%s\" % info[1]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FMBM%3D","line":108,"updated":"2013-02-04 14:06:55.000000000","message":"space needed after #","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"592877a5979a461be4bc8fb16a70c45e8884bb9b","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        if lines:"},{"line_number":106,"context_line":"            line \u003d lines[0]"},{"line_number":107,"context_line":"            info \u003d line.split(\" \")"},{"line_number":108,"context_line":"            #device line output is different depending"},{"line_number":109,"context_line":"            #on /etc/multipath.conf settings."},{"line_number":110,"context_line":"            if info[1][:2] \u003d\u003d \"dm\":"},{"line_number":111,"context_line":"                mdev \u003d \"/dev/%s\" % info[1]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FLEo%3D","line":108,"in_reply_to":"AAAAM3%2F%2FMBM%3D","updated":"2013-02-04 21:53:11.000000000","message":"Done","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":24,"name":"Chuck Short","email":"charles.short@windriver.com","username":"zulcss"},"change_message_id":"36076a2f7ced65f47edf38cf9a2c65d7f140e194","unresolved":false,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"            if mdev is None:"},{"line_number":116,"context_line":"                LOG.warn(\"Couldn\u0027t find multipath device %s\" % line)"},{"line_number":117,"context_line":"                return None"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"            LOG.debug(\"Found multipath device \u003d %s\" % mdev)"},{"line_number":120,"context_line":"            device_lines \u003d lines[3:]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FMBI%3D","line":117,"updated":"2013-02-04 14:06:55.000000000","message":"il8n as well","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"592877a5979a461be4bc8fb16a70c45e8884bb9b","unresolved":false,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"            if mdev is None:"},{"line_number":116,"context_line":"                LOG.warn(\"Couldn\u0027t find multipath device %s\" % line)"},{"line_number":117,"context_line":"                return None"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"            LOG.debug(\"Found multipath device \u003d %s\" % mdev)"},{"line_number":120,"context_line":"            device_lines \u003d lines[3:]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FLEk%3D","line":117,"in_reply_to":"AAAAM3%2F%2FMBI%3D","updated":"2013-02-04 21:53:11.000000000","message":"Done","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"668792788a568e8536ab4e41da30491be2226b7b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright (c) 2012 Hewlett-Packard, Inc."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2FKJE%3D","line":3,"updated":"2013-02-05 09:44:17.000000000","message":"s/2012/2013/ !","commit_id":"d40dd5b0828432dfe1c07ce66bf95ee7607b4917"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"33b2cc8b7ef508e145257e75ce9630aee7abf2aa","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright (c) 2012 Hewlett-Packard, Inc."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2FJfM%3D","line":3,"in_reply_to":"AAAAM3%2F%2FKJE%3D","updated":"2013-02-05 16:48:52.000000000","message":"Done","commit_id":"d40dd5b0828432dfe1c07ce66bf95ee7607b4917"},{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"0408da19888ef8235b331140e4568e126c6e9012","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        info \u003d {\"device\": mdev,"},{"line_number":135,"context_line":"                \"devices\": devices}"},{"line_number":136,"context_line":"        return info"},{"line_number":137,"context_line":"    else:"},{"line_number":138,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FGc8%3D","line":137,"updated":"2013-02-07 02:57:54.000000000","message":"do we need the else?\n\n    if mdev is not None:\n        info \u003d {\"device\": mdev,\n                  \"devices\": devices}\n        return info\n    return None","commit_id":"888f327a58505010631e9f6669651c43d1b4f67a"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"bdbc12ac09a33a64e1a993375602d9fdb982e8cb","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        info \u003d {\"device\": mdev,"},{"line_number":135,"context_line":"                \"devices\": devices}"},{"line_number":136,"context_line":"        return info"},{"line_number":137,"context_line":"    else:"},{"line_number":138,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FFb8%3D","line":137,"in_reply_to":"AAAAM3%2F%2FGc8%3D","updated":"2013-02-07 16:51:05.000000000","message":"Done","commit_id":"888f327a58505010631e9f6669651c43d1b4f67a"},{"author":{"_account_id":4141,"name":"Boris Fiuczynski","email":"boris_fiuczynski@de.ibm.com","username":"boris-fiuczynski"},"change_message_id":"cab74f3229acc86c7d28d9827f49c05df1a9b665","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"def get_device_info(device):"},{"line_number":50,"context_line":"    (out, err) \u003d utils.execute(\u0027sg_scan\u0027, device, run_as_root\u003dTrue)"},{"line_number":51,"context_line":"    dev_info \u003d {\u0027device\u0027: device, \u0027host\u0027: None,"},{"line_number":52,"context_line":"                \u0027channel\u0027: None, \u0027id\u0027: None, \u0027lun\u0027: None}"},{"line_number":53,"context_line":"    if out:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FEKA%3D","line":50,"updated":"2013-02-11 11:29:02.000000000","message":"sg_scan returns lun as a storage device specific value and not the complete LUN, e.g. for a DS8000 this just returns the bytes 2 and 3 from the lun.\nA solution could be to use e.g. /sys/class/scsi_generic/{scsi_device_name}/device","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"23c56c97da0df98e5e5587ed50335914e11a6649","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"def get_device_info(device):"},{"line_number":50,"context_line":"    (out, err) \u003d utils.execute(\u0027sg_scan\u0027, device, run_as_root\u003dTrue)"},{"line_number":51,"context_line":"    dev_info \u003d {\u0027device\u0027: device, \u0027host\u0027: None,"},{"line_number":52,"context_line":"                \u0027channel\u0027: None, \u0027id\u0027: None, \u0027lun\u0027: None}"},{"line_number":53,"context_line":"    if out:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2B8iA%3D","line":50,"in_reply_to":"AAAAM3%2F%2B%2FC4%3D","updated":"2013-02-13 17:47:55.000000000","message":"There currently is no cinder volume driver for the DS8000 that I can see.  There are drivers for the IBM XIV and IBM Storwize storage arrays, but not a DS8000.   This code has been tested and drivers implemented against this for the Storwize arrays and it works.  I\u0027d rather not change code unless it\u0027s proven not to work against an existing or Grizzly pending driver.\n\nThe pending Storwize driver for FC\nhttps://review.openstack.org/#/c/21457/5","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"467dd6bd6c61c4b142ffb34faf9969d107c91df2","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"def get_device_info(device):"},{"line_number":50,"context_line":"    (out, err) \u003d utils.execute(\u0027sg_scan\u0027, device, run_as_root\u003dTrue)"},{"line_number":51,"context_line":"    dev_info \u003d {\u0027device\u0027: device, \u0027host\u0027: None,"},{"line_number":52,"context_line":"                \u0027channel\u0027: None, \u0027id\u0027: None, \u0027lun\u0027: None}"},{"line_number":53,"context_line":"    if out:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2B53U%3D","line":50,"in_reply_to":"AAAAM3%2F%2B7JQ%3D","updated":"2013-02-14 22:37:28.000000000","message":"The first release of the FC code here only supports a small amount of arrays that can actually be tested against.   No DS8000 cinder volume driver exists to even tests against.","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"},{"author":{"_account_id":4141,"name":"Boris Fiuczynski","email":"boris_fiuczynski@de.ibm.com","username":"boris-fiuczynski"},"change_message_id":"6da31187752f42f753791d5fe0e3cb0b95327603","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"def get_device_info(device):"},{"line_number":50,"context_line":"    (out, err) \u003d utils.execute(\u0027sg_scan\u0027, device, run_as_root\u003dTrue)"},{"line_number":51,"context_line":"    dev_info \u003d {\u0027device\u0027: device, \u0027host\u0027: None,"},{"line_number":52,"context_line":"                \u0027channel\u0027: None, \u0027id\u0027: None, \u0027lun\u0027: None}"},{"line_number":53,"context_line":"    if out:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2B7JQ%3D","line":50,"in_reply_to":"AAAAM3%2F%2B8iA%3D","updated":"2013-02-14 22:25:50.000000000","message":"Isn\u0027t this supposed to be generic linux scsi code as you stated in line #17?","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"},{"author":{"_account_id":4141,"name":"Boris Fiuczynski","email":"boris_fiuczynski@de.ibm.com","username":"boris-fiuczynski"},"change_message_id":"75f73041df27e3d6b78a1373c9977f6107857df4","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"def get_device_info(device):"},{"line_number":50,"context_line":"    (out, err) \u003d utils.execute(\u0027sg_scan\u0027, device, run_as_root\u003dTrue)"},{"line_number":51,"context_line":"    dev_info \u003d {\u0027device\u0027: device, \u0027host\u0027: None,"},{"line_number":52,"context_line":"                \u0027channel\u0027: None, \u0027id\u0027: None, \u0027lun\u0027: None}"},{"line_number":53,"context_line":"    if out:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2B%2FC4%3D","line":50,"in_reply_to":"AAAAM3%2F%2FAUs%3D","updated":"2013-02-13 11:45:20.000000000","message":"Try this\n# echo -e \"device\\thost\\tchannel\\tid\\tlun\"; for d in /sys/class/scsi_device/*/device/block/*; do echo $d | sed \u0027s/\\/sys\\/class\\/scsi_device\\/\\([[:digit:]]\\+\\):\\([[:digit:]]\\+\\):\\([[:digit:]]\\+\\):\\([[:digit:]]\\+\\)\\/device\\/block\\/\\([[:alpha:]]\\+\\)/\\5\\t\\1\\t\\2\\t\\3\\t\\4/\u0027; done\n\nHopefully you get something like this as output:\ndevice\thost\tchannel\tid\tlun\nsda\t\t0\t0\t\t0\t1082343457\nsdc\t\t0\t0\t\t10\t1086668832\nsdb\t\t0\t0\t\t1\t1082343457\n...\nsde\t\t1\t0\t\t0\t1082343457\n...","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"6cfc7bdb7c925904b75ebd4d6c9c9b1e57d063f3","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"def get_device_info(device):"},{"line_number":50,"context_line":"    (out, err) \u003d utils.execute(\u0027sg_scan\u0027, device, run_as_root\u003dTrue)"},{"line_number":51,"context_line":"    dev_info \u003d {\u0027device\u0027: device, \u0027host\u0027: None,"},{"line_number":52,"context_line":"                \u0027channel\u0027: None, \u0027id\u0027: None, \u0027lun\u0027: None}"},{"line_number":53,"context_line":"    if out:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FAUs%3D","line":50,"in_reply_to":"AAAAM3%2F%2FEKA%3D","updated":"2013-02-11 21:51:41.000000000","message":"There is no file that has the LUN id there.","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"},{"author":{"_account_id":4141,"name":"Boris Fiuczynski","email":"boris_fiuczynski@de.ibm.com","username":"boris-fiuczynski"},"change_message_id":"cab74f3229acc86c7d28d9827f49c05df1a9b665","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    echo_scsi_command(\"/proc/scsi/scsi\","},{"line_number":73,"context_line":"                      \"scsi remove-single-device %s %s %s %s\""},{"line_number":74,"context_line":"                           % (device[\"host\"], device[\"channel\"],"},{"line_number":75,"context_line":"                              device[\"id\"], device[\"lun\"]))"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    devices \u003d get_device_list()"},{"line_number":78,"context_line":"    if device[\"device\"] not in devices:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FEJ8%3D","line":75,"updated":"2013-02-11 11:29:02.000000000","message":"This uses a kernel 2.4 deprecated interface. Since in rescan_hosts() you are using the current model for scanning instead of also deprecated \"scsi add-single-device\" you should also use the current model here.\nA solution could be to use e.g. echo 1 \u003e /sys/bus/scsi/devices/{host:channel:id:lun}/delete","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"9d9bab1b4efe484cd2b7784b7b6a1fcff421a347","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    echo_scsi_command(\"/proc/scsi/scsi\","},{"line_number":73,"context_line":"                      \"scsi remove-single-device %s %s %s %s\""},{"line_number":74,"context_line":"                           % (device[\"host\"], device[\"channel\"],"},{"line_number":75,"context_line":"                              device[\"id\"], device[\"lun\"]))"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    devices \u003d get_device_list()"},{"line_number":78,"context_line":"    if device[\"device\"] not in devices:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2B7yA%3D","line":75,"in_reply_to":"AAAAM3%2F%2FAUM%3D","updated":"2013-02-14 19:34:41.000000000","message":"Done","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"6cfc7bdb7c925904b75ebd4d6c9c9b1e57d063f3","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    echo_scsi_command(\"/proc/scsi/scsi\","},{"line_number":73,"context_line":"                      \"scsi remove-single-device %s %s %s %s\""},{"line_number":74,"context_line":"                           % (device[\"host\"], device[\"channel\"],"},{"line_number":75,"context_line":"                              device[\"id\"], device[\"lun\"]))"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    devices \u003d get_device_list()"},{"line_number":78,"context_line":"    if device[\"device\"] not in devices:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FAUM%3D","line":75,"in_reply_to":"AAAAM3%2F%2FEJ8%3D","updated":"2013-02-11 21:51:41.000000000","message":"I\u0027ll update this to the newer method.","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"},{"author":{"_account_id":4141,"name":"Boris Fiuczynski","email":"boris_fiuczynski@de.ibm.com","username":"boris-fiuczynski"},"change_message_id":"cab74f3229acc86c7d28d9827f49c05df1a9b665","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                              device[\"id\"], device[\"lun\"]))"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    devices \u003d get_device_list()"},{"line_number":78,"context_line":"    if device[\"device\"] not in devices:"},{"line_number":79,"context_line":"        raise utils.LoopingCallDone()"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FEJ4%3D","line":78,"updated":"2013-02-11 11:29:02.000000000","message":"Shouldn\u0027t you actually wait for \"udevadm settle\" which blocks until all udev rules have completed?","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"23c56c97da0df98e5e5587ed50335914e11a6649","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                              device[\"id\"], device[\"lun\"]))"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    devices \u003d get_device_list()"},{"line_number":78,"context_line":"    if device[\"device\"] not in devices:"},{"line_number":79,"context_line":"        raise utils.LoopingCallDone()"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2B8hg%3D","line":78,"in_reply_to":"AAAAM3%2F%2B%2FhQ%3D","updated":"2013-02-13 17:47:55.000000000","message":"So you are saying that I need to continue to wait for some udev settle is done?   How do I detect that?","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"},{"author":{"_account_id":4141,"name":"Boris Fiuczynski","email":"boris_fiuczynski@de.ibm.com","username":"boris-fiuczynski"},"change_message_id":"6da31187752f42f753791d5fe0e3cb0b95327603","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                              device[\"id\"], device[\"lun\"]))"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    devices \u003d get_device_list()"},{"line_number":78,"context_line":"    if device[\"device\"] not in devices:"},{"line_number":79,"context_line":"        raise utils.LoopingCallDone()"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2B7JY%3D","line":78,"in_reply_to":"AAAAM3%2F%2B8hg%3D","updated":"2013-02-14 22:25:50.000000000","message":"When the command \u0027udevadm settle\u0027 returns udev is done.","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"},{"author":{"_account_id":4141,"name":"Boris Fiuczynski","email":"boris_fiuczynski@de.ibm.com","username":"boris-fiuczynski"},"change_message_id":"75f73041df27e3d6b78a1373c9977f6107857df4","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                              device[\"id\"], device[\"lun\"]))"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    devices \u003d get_device_list()"},{"line_number":78,"context_line":"    if device[\"device\"] not in devices:"},{"line_number":79,"context_line":"        raise utils.LoopingCallDone()"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2B%2FhQ%3D","line":78,"in_reply_to":"AAAAM3%2F%2FAUQ%3D","updated":"2013-02-13 11:45:20.000000000","message":"Your loop might exit before all udev rules have been completed. udevadm settle waits for udevd to process the device deletion events for all hardware devices, thus ensuring that any device nodes have been deleted successfully before proceeding. Otherwise there is a risk of services failing due to device nodes belatedly being deleted.","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"6cfc7bdb7c925904b75ebd4d6c9c9b1e57d063f3","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                              device[\"id\"], device[\"lun\"]))"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    devices \u003d get_device_list()"},{"line_number":78,"context_line":"    if device[\"device\"] not in devices:"},{"line_number":79,"context_line":"        raise utils.LoopingCallDone()"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FAUQ%3D","line":78,"in_reply_to":"AAAAM3%2F%2FEJ4%3D","updated":"2013-02-11 21:51:41.000000000","message":"we don\u0027t need to block here, we just loop until all the devices are gone.","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"},{"author":{"_account_id":4141,"name":"Boris Fiuczynski","email":"boris_fiuczynski@de.ibm.com","username":"boris-fiuczynski"},"change_message_id":"cab74f3229acc86c7d28d9827f49c05df1a9b665","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    devices \u003d []"},{"line_number":93,"context_line":"    out \u003d None"},{"line_number":94,"context_line":"    try:"},{"line_number":95,"context_line":"        (out, err) \u003d utils.execute(\u0027multipath\u0027, \u0027-ll\u0027, device,"},{"line_number":96,"context_line":"                               run_as_root\u003dTrue)"},{"line_number":97,"context_line":"    except exception.ProcessExecutionError as exc:"},{"line_number":98,"context_line":"        LOG.warn(_(\"Multipath call failed exit (%(code)s)\")"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FEAE%3D","line":95,"updated":"2013-02-11 11:29:02.000000000","message":"Here the -ll option is used triggering the path checker.\nIn the parsing below the states are ignored.\nTherefore the overhead is not needed.","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"23c56c97da0df98e5e5587ed50335914e11a6649","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    devices \u003d []"},{"line_number":93,"context_line":"    out \u003d None"},{"line_number":94,"context_line":"    try:"},{"line_number":95,"context_line":"        (out, err) \u003d utils.execute(\u0027multipath\u0027, \u0027-ll\u0027, device,"},{"line_number":96,"context_line":"                               run_as_root\u003dTrue)"},{"line_number":97,"context_line":"    except exception.ProcessExecutionError as exc:"},{"line_number":98,"context_line":"        LOG.warn(_(\"Multipath call failed exit (%(code)s)\")"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2B8hw%3D","line":95,"in_reply_to":"AAAAM3%2F%2B%2FhA%3D","updated":"2013-02-13 17:47:55.000000000","message":"I\u0027ll change this back to -l","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"9d9bab1b4efe484cd2b7784b7b6a1fcff421a347","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    devices \u003d []"},{"line_number":93,"context_line":"    out \u003d None"},{"line_number":94,"context_line":"    try:"},{"line_number":95,"context_line":"        (out, err) \u003d utils.execute(\u0027multipath\u0027, \u0027-ll\u0027, device,"},{"line_number":96,"context_line":"                               run_as_root\u003dTrue)"},{"line_number":97,"context_line":"    except exception.ProcessExecutionError as exc:"},{"line_number":98,"context_line":"        LOG.warn(_(\"Multipath call failed exit (%(code)s)\")"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2B7x8%3D","line":95,"in_reply_to":"AAAAM3%2F%2B8hw%3D","updated":"2013-02-14 19:34:41.000000000","message":"Done","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"},{"author":{"_account_id":4141,"name":"Boris Fiuczynski","email":"boris_fiuczynski@de.ibm.com","username":"boris-fiuczynski"},"change_message_id":"75f73041df27e3d6b78a1373c9977f6107857df4","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    devices \u003d []"},{"line_number":93,"context_line":"    out \u003d None"},{"line_number":94,"context_line":"    try:"},{"line_number":95,"context_line":"        (out, err) \u003d utils.execute(\u0027multipath\u0027, \u0027-ll\u0027, device,"},{"line_number":96,"context_line":"                               run_as_root\u003dTrue)"},{"line_number":97,"context_line":"    except exception.ProcessExecutionError as exc:"},{"line_number":98,"context_line":"        LOG.warn(_(\"Multipath call failed exit (%(code)s)\")"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2B%2FhA%3D","line":95,"in_reply_to":"AAAAM3%2F%2FAT8%3D","updated":"2013-02-13 11:45:20.000000000","message":"I think that the -l option should be sufficient since that does not trigger the path checker which would create io traffic for information that you do not look at during parsing anyway.","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"6cfc7bdb7c925904b75ebd4d6c9c9b1e57d063f3","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    devices \u003d []"},{"line_number":93,"context_line":"    out \u003d None"},{"line_number":94,"context_line":"    try:"},{"line_number":95,"context_line":"        (out, err) \u003d utils.execute(\u0027multipath\u0027, \u0027-ll\u0027, device,"},{"line_number":96,"context_line":"                               run_as_root\u003dTrue)"},{"line_number":97,"context_line":"    except exception.ProcessExecutionError as exc:"},{"line_number":98,"context_line":"        LOG.warn(_(\"Multipath call failed exit (%(code)s)\")"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FAT8%3D","line":95,"in_reply_to":"AAAAM3%2F%2FEAE%3D","updated":"2013-02-11 21:51:41.000000000","message":"I\u0027m not sure I follow what you are saying here.  We need the -ll option for multipath so it gives us output we need for device discovery.","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"},{"author":{"_account_id":4141,"name":"Boris Fiuczynski","email":"boris_fiuczynski@de.ibm.com","username":"boris-fiuczynski"},"change_message_id":"cab74f3229acc86c7d28d9827f49c05df1a9b665","unresolved":false,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"            LOG.debug(_(\"Found multipath device \u003d %(mdev)s\") % locals())"},{"line_number":121,"context_line":"            device_lines \u003d lines[3:]"},{"line_number":122,"context_line":"            for dev_line in device_lines:"},{"line_number":123,"context_line":"                dev_line \u003d dev_line.strip()"},{"line_number":124,"context_line":"                dev_line \u003d dev_line[3:]"},{"line_number":125,"context_line":"                dev_info \u003d dev_line.split(\" \")"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FEAA%3D","line":122,"updated":"2013-02-11 11:29:02.000000000","message":"This parsing is broken if priority groups are setup.\nCheck e.g. the output of multipath here:\nhttps://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/6-Beta/html-single/DM_Multipath/index.html#multipath_queries","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"9d9bab1b4efe484cd2b7784b7b6a1fcff421a347","unresolved":false,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"            LOG.debug(_(\"Found multipath device \u003d %(mdev)s\") % locals())"},{"line_number":121,"context_line":"            device_lines \u003d lines[3:]"},{"line_number":122,"context_line":"            for dev_line in device_lines:"},{"line_number":123,"context_line":"                dev_line \u003d dev_line.strip()"},{"line_number":124,"context_line":"                dev_line \u003d dev_line[3:]"},{"line_number":125,"context_line":"                dev_info \u003d dev_line.split(\" \")"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2B7xE%3D","line":122,"in_reply_to":"AAAAM3%2F%2FARg%3D","updated":"2013-02-14 19:34:41.000000000","message":"Done","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"6cfc7bdb7c925904b75ebd4d6c9c9b1e57d063f3","unresolved":false,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"            LOG.debug(_(\"Found multipath device \u003d %(mdev)s\") % locals())"},{"line_number":121,"context_line":"            device_lines \u003d lines[3:]"},{"line_number":122,"context_line":"            for dev_line in device_lines:"},{"line_number":123,"context_line":"                dev_line \u003d dev_line.strip()"},{"line_number":124,"context_line":"                dev_line \u003d dev_line[3:]"},{"line_number":125,"context_line":"                dev_info \u003d dev_line.split(\" \")"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FARg%3D","line":122,"in_reply_to":"AAAAM3%2F%2FEAA%3D","updated":"2013-02-11 21:51:41.000000000","message":"good catch.  I\u0027ll fix this.","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"36429d6071538d0510d88a5b8139c94b6c314f5f","unresolved":false,"context_lines":[{"line_number":23,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"def echo_scsi_command(path, content):"},{"line_number":27,"context_line":"    \"\"\"Used to echo strings to scsi subsystem.\"\"\""},{"line_number":28,"context_line":"    args \u003d [\"-a\", path]"},{"line_number":29,"context_line":"    kwargs \u003d dict(process_input\u003dcontent, run_as_root\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAM3%2F%2ByHM%3D","line":26,"updated":"2013-02-19 11:32:08.000000000","message":"I\u0027d like to see doc strings added for all the methods in this file, but given feature freeze for Grizzly, I\u0027m not going to -1 the patch just for that. Please do send a followup patch to add doc strings though.","commit_id":"052859fbdb10f7f796512ef4f9a3d6e87fd3f87f"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"e3befad274ff0524fcbe5af9a2d52bf0bf43bfaf","unresolved":false,"context_lines":[{"line_number":23,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"def echo_scsi_command(path, content):"},{"line_number":27,"context_line":"    \"\"\"Used to echo strings to scsi subsystem.\"\"\""},{"line_number":28,"context_line":"    args \u003d [\"-a\", path]"},{"line_number":29,"context_line":"    kwargs \u003d dict(process_input\u003dcontent, run_as_root\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAM3%2F%2Bw8M%3D","line":26,"in_reply_to":"AAAAM3%2F%2ByHM%3D","updated":"2013-02-19 18:20:39.000000000","message":"Ok I can add this post G3.   Maybe file a bug on it and I can patch for the bug?","commit_id":"052859fbdb10f7f796512ef4f9a3d6e87fd3f87f"}],"nova/tests/fake_libvirt_utils.py":[{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"273fcd42b4df9764faebe481ccf38d895c7a5841","unresolved":false,"context_lines":[{"line_number":37,"context_line":"def get_fc_hbas():"},{"line_number":38,"context_line":"    return [{\u0027ClassDevice\u0027: \u0027host1\u0027,"},{"line_number":39,"context_line":"             \u0027ClassDevicePath\u0027:"},{"line_number":40,"context_line":"     \u0027/sys/devices/pci0000:00/0000:00:03.0/0000:05:00.2/host1/fc_host/host1\u0027,"},{"line_number":41,"context_line":"             \u0027dev_loss_tmo\u0027: \u002730\u0027,"},{"line_number":42,"context_line":"             \u0027fabric_name\u0027: \u00270x1000000533f55566\u0027,"},{"line_number":43,"context_line":"             \u0027issue_lip\u0027: \u0027\u003cstore method only\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FGUo%3D","line":40,"updated":"2013-02-07 04:25:41.000000000","message":"I\u0027m a little surprised this isn\u0027t a pep8 violation.","commit_id":"888f327a58505010631e9f6669651c43d1b4f67a"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"bdbc12ac09a33a64e1a993375602d9fdb982e8cb","unresolved":false,"context_lines":[{"line_number":37,"context_line":"def get_fc_hbas():"},{"line_number":38,"context_line":"    return [{\u0027ClassDevice\u0027: \u0027host1\u0027,"},{"line_number":39,"context_line":"             \u0027ClassDevicePath\u0027:"},{"line_number":40,"context_line":"     \u0027/sys/devices/pci0000:00/0000:00:03.0/0000:05:00.2/host1/fc_host/host1\u0027,"},{"line_number":41,"context_line":"             \u0027dev_loss_tmo\u0027: \u002730\u0027,"},{"line_number":42,"context_line":"             \u0027fabric_name\u0027: \u00270x1000000533f55566\u0027,"},{"line_number":43,"context_line":"             \u0027issue_lip\u0027: \u0027\u003cstore method only\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FFbo%3D","line":40,"in_reply_to":"AAAAM3%2F%2FGUo%3D","updated":"2013-02-07 16:51:05.000000000","message":"It doesn\u0027t, but I have updated this.","commit_id":"888f327a58505010631e9f6669651c43d1b4f67a"}],"nova/tests/test_libvirt.py":[{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"7b9424b1fc9c50621a214436b6a056e5d2d787a3","unresolved":false,"context_lines":[{"line_number":479,"context_line":"        libvirt_driver.disconnect_volume(connection_info, mount_device)"},{"line_number":480,"context_line":"        expected_commands \u003d []"},{"line_number":481,"context_line":"        self.assertEqual(self.executes, expected_commands)"},{"line_number":482,"context_line":""},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"class CacheConcurrencyTestCase(test.TestCase):"},{"line_number":485,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FO4s%3D","line":482,"updated":"2013-02-01 00:40:20.000000000","message":"You should test failure modes here too. What happens when sg_info returns an error -- is this caught and handled well?","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"428754e9d00fa4dd64c2b8b7c1be38b073a1e5fa","unresolved":false,"context_lines":[{"line_number":479,"context_line":"        libvirt_driver.disconnect_volume(connection_info, mount_device)"},{"line_number":480,"context_line":"        expected_commands \u003d []"},{"line_number":481,"context_line":"        self.assertEqual(self.executes, expected_commands)"},{"line_number":482,"context_line":""},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"class CacheConcurrencyTestCase(test.TestCase):"},{"line_number":485,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FNiI%3D","line":482,"in_reply_to":"AAAAM3%2F%2FO4s%3D","updated":"2013-02-02 01:13:03.000000000","message":"I\u0027ll add a new negative test for the case when we can\u0027t find any HBAs.","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"}],"nova/tests/test_libvirt_volume.py":[{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"273fcd42b4df9764faebe481ccf38d895c7a5841","unresolved":false,"context_lines":[{"line_number":385,"context_line":"                       fake_libvirt_utils.get_fc_hbas)"},{"line_number":386,"context_line":"        self.stubs.Set(libvirt_utils, \u0027get_fc_hbas_info\u0027,"},{"line_number":387,"context_line":"                       fake_libvirt_utils.get_fc_hbas_info)"},{"line_number":388,"context_line":"        # NOTE(vish) exists is to make driver assume connecting worked"},{"line_number":389,"context_line":"        self.stubs.Set(os.path, \u0027exists\u0027, lambda x: True)"},{"line_number":390,"context_line":"        self.stubs.Set(os.path, \u0027realpath\u0027, lambda x: \u0027/dev/sdb\u0027)"},{"line_number":391,"context_line":"        libvirt_driver \u003d volume.LibvirtFibreChannelVolumeDriver(self.fake_conn)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FGUA%3D","line":388,"updated":"2013-02-07 04:25:41.000000000","message":"Does this indicate this is cut and pasted from somewhere else? Can we perhaps refactor away the duplication if that is the case?","commit_id":"888f327a58505010631e9f6669651c43d1b4f67a"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"bdbc12ac09a33a64e1a993375602d9fdb982e8cb","unresolved":false,"context_lines":[{"line_number":385,"context_line":"                       fake_libvirt_utils.get_fc_hbas)"},{"line_number":386,"context_line":"        self.stubs.Set(libvirt_utils, \u0027get_fc_hbas_info\u0027,"},{"line_number":387,"context_line":"                       fake_libvirt_utils.get_fc_hbas_info)"},{"line_number":388,"context_line":"        # NOTE(vish) exists is to make driver assume connecting worked"},{"line_number":389,"context_line":"        self.stubs.Set(os.path, \u0027exists\u0027, lambda x: True)"},{"line_number":390,"context_line":"        self.stubs.Set(os.path, \u0027realpath\u0027, lambda x: \u0027/dev/sdb\u0027)"},{"line_number":391,"context_line":"        libvirt_driver \u003d volume.LibvirtFibreChannelVolumeDriver(self.fake_conn)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FFbU%3D","line":388,"in_reply_to":"AAAAM3%2F%2FGUA%3D","updated":"2013-02-07 16:51:05.000000000","message":"the dupe is in this specific test and it\u0027s only 2 lines.  Setting up the stubs.  I don\u0027t believe it\u0027s worth refactoring.","commit_id":"888f327a58505010631e9f6669651c43d1b4f67a"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":67,"name":"Vish Ishaya","email":"vishvananda@gmail.com","username":"vishvananda"},"change_message_id":"1e40a9f9cd589c9672a7c49a287be7f3f4734f87","unresolved":false,"context_lines":[{"line_number":151,"context_line":"                  \u0027rbd\u003dnova.virt.libvirt.volume.LibvirtNetVolumeDriver\u0027,"},{"line_number":152,"context_line":"                  \u0027sheepdog\u003dnova.virt.libvirt.volume.LibvirtNetVolumeDriver\u0027,"},{"line_number":153,"context_line":"                  \u0027nfs\u003dnova.virt.libvirt.volume_nfs.NfsVolumeDriver\u0027,"},{"line_number":154,"context_line":"          \u0027fibrechan\u003dnova.virt.libvirt.volume.LibvirtFibreChannelVolumeDriver\u0027"},{"line_number":155,"context_line":"                  ],"},{"line_number":156,"context_line":"                help\u003d\u0027Libvirt handlers for remote volumes.\u0027),"},{"line_number":157,"context_line":"    cfg.StrOpt(\u0027libvirt_disk_prefix\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FWhY%3D","line":154,"updated":"2013-01-25 22:54:34.000000000","message":"this is ugly, you should probably split it on two lines so it lines up. (or remove channel so it is shorter) :)\n\n  \u0027nfs\u003dnova.virt.libvirt.volume_nfs.NfsVolumeDriver\u0027,\n  \u0027fibrechan\u003dnova.virt.libvirt.volume.\u0027\n  \u0027LibvirtFibreChannelVolumeDriver\u0027,","commit_id":"a561027e13a4e2edf413226b9eaf29366b2c40ff"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"a18fd5943784bebc44f8436e5b7ddb85e36105a2","unresolved":false,"context_lines":[{"line_number":151,"context_line":"                  \u0027rbd\u003dnova.virt.libvirt.volume.LibvirtNetVolumeDriver\u0027,"},{"line_number":152,"context_line":"                  \u0027sheepdog\u003dnova.virt.libvirt.volume.LibvirtNetVolumeDriver\u0027,"},{"line_number":153,"context_line":"                  \u0027nfs\u003dnova.virt.libvirt.volume_nfs.NfsVolumeDriver\u0027,"},{"line_number":154,"context_line":"          \u0027fibrechan\u003dnova.virt.libvirt.volume.LibvirtFibreChannelVolumeDriver\u0027"},{"line_number":155,"context_line":"                  ],"},{"line_number":156,"context_line":"                help\u003d\u0027Libvirt handlers for remote volumes.\u0027),"},{"line_number":157,"context_line":"    cfg.StrOpt(\u0027libvirt_disk_prefix\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FWeA%3D","line":154,"in_reply_to":"AAAAM3%2F%2FWhY%3D","updated":"2013-01-26 00:12:41.000000000","message":"Done","commit_id":"a561027e13a4e2edf413226b9eaf29366b2c40ff"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"7b9424b1fc9c50621a214436b6a056e5d2d787a3","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                  \u0027sheepdog\u003dnova.virt.libvirt.volume.LibvirtNetVolumeDriver\u0027,"},{"line_number":153,"context_line":"                  \u0027nfs\u003dnova.virt.libvirt.volume_nfs.NfsVolumeDriver\u0027,"},{"line_number":154,"context_line":"                  \u0027fibrechan\u003dnova.virt.libvirt.volume.\u0027"},{"line_number":155,"context_line":"                  \u0027LibvirtFibreChannelVolumeDriver\u0027"},{"line_number":156,"context_line":"                  ],"},{"line_number":157,"context_line":"                help\u003d\u0027Libvirt handlers for remote volumes.\u0027),"},{"line_number":158,"context_line":"    cfg.StrOpt(\u0027libvirt_disk_prefix\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FO4k%3D","line":155,"updated":"2013-02-01 00:40:20.000000000","message":"Please indent the continued line for readability","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"592877a5979a461be4bc8fb16a70c45e8884bb9b","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                  \u0027sheepdog\u003dnova.virt.libvirt.volume.LibvirtNetVolumeDriver\u0027,"},{"line_number":153,"context_line":"                  \u0027nfs\u003dnova.virt.libvirt.volume_nfs.NfsVolumeDriver\u0027,"},{"line_number":154,"context_line":"                  \u0027fibrechan\u003dnova.virt.libvirt.volume.\u0027"},{"line_number":155,"context_line":"                  \u0027LibvirtFibreChannelVolumeDriver\u0027"},{"line_number":156,"context_line":"                  ],"},{"line_number":157,"context_line":"                help\u003d\u0027Libvirt handlers for remote volumes.\u0027),"},{"line_number":158,"context_line":"    cfg.StrOpt(\u0027libvirt_disk_prefix\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FLEc%3D","line":155,"in_reply_to":"AAAAM3%2F%2FO4k%3D","updated":"2013-02-04 21:53:11.000000000","message":"Done","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"273fcd42b4df9764faebe481ccf38d895c7a5841","unresolved":false,"context_lines":[{"line_number":6,"context_line":"# Copyright (c) 2010 Citrix Systems, Inc."},{"line_number":7,"context_line":"# Copyright (c) 2011 Piston Cloud Computing, Inc"},{"line_number":8,"context_line":"# Copyright (c) 2012 University Of Minho"},{"line_number":9,"context_line":"# Copyright (c) 2013 Hewlett-Packard, Inc."},{"line_number":10,"context_line":"#"},{"line_number":11,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":12,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FGUY%3D","line":9,"updated":"2013-02-07 04:25:41.000000000","message":"I don\u0027t love the proliferation of copyright statements in this file. This is a relatively small delta for this file. Is it really worth adding another line to the header?","commit_id":"888f327a58505010631e9f6669651c43d1b4f67a"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"bdbc12ac09a33a64e1a993375602d9fdb982e8cb","unresolved":false,"context_lines":[{"line_number":6,"context_line":"# Copyright (c) 2010 Citrix Systems, Inc."},{"line_number":7,"context_line":"# Copyright (c) 2011 Piston Cloud Computing, Inc"},{"line_number":8,"context_line":"# Copyright (c) 2012 University Of Minho"},{"line_number":9,"context_line":"# Copyright (c) 2013 Hewlett-Packard, Inc."},{"line_number":10,"context_line":"#"},{"line_number":11,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":12,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FFdM%3D","line":9,"in_reply_to":"AAAAM3%2F%2FGUY%3D","updated":"2013-02-07 16:51:05.000000000","message":"I\u0027m required by hp legal to do this for print publication protection.","commit_id":"888f327a58505010631e9f6669651c43d1b4f67a"},{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"0408da19888ef8235b331140e4568e126c6e9012","unresolved":false,"context_lines":[{"line_number":650,"context_line":"        if not self._fc_wwnns:"},{"line_number":651,"context_line":"            self._fc_wwnns \u003d libvirt_utils.get_fc_wwnns()"},{"line_number":652,"context_line":"            if not self._fc_wwnns or len(self._fc_wwnns) \u003d\u003d 0:"},{"line_number":653,"context_line":"                msg \u003d \\"},{"line_number":654,"context_line":"                _(\u0027Could not determine fibre channel world wide node names\u0027),"},{"line_number":655,"context_line":"                LOG.warn(msg, instance\u003dinstance)"},{"line_number":656,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FGfQ%3D","line":653,"updated":"2013-02-07 02:57:54.000000000","message":"can we please avoid \\ at the end of the line?","commit_id":"888f327a58505010631e9f6669651c43d1b4f67a"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"bdbc12ac09a33a64e1a993375602d9fdb982e8cb","unresolved":false,"context_lines":[{"line_number":650,"context_line":"        if not self._fc_wwnns:"},{"line_number":651,"context_line":"            self._fc_wwnns \u003d libvirt_utils.get_fc_wwnns()"},{"line_number":652,"context_line":"            if not self._fc_wwnns or len(self._fc_wwnns) \u003d\u003d 0:"},{"line_number":653,"context_line":"                msg \u003d \\"},{"line_number":654,"context_line":"                _(\u0027Could not determine fibre channel world wide node names\u0027),"},{"line_number":655,"context_line":"                LOG.warn(msg, instance\u003dinstance)"},{"line_number":656,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FFcM%3D","line":653,"in_reply_to":"AAAAM3%2F%2FGfQ%3D","updated":"2013-02-07 16:51:05.000000000","message":"Done","commit_id":"888f327a58505010631e9f6669651c43d1b4f67a"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"273fcd42b4df9764faebe481ccf38d895c7a5841","unresolved":false,"context_lines":[{"line_number":651,"context_line":"            self._fc_wwnns \u003d libvirt_utils.get_fc_wwnns()"},{"line_number":652,"context_line":"            if not self._fc_wwnns or len(self._fc_wwnns) \u003d\u003d 0:"},{"line_number":653,"context_line":"                msg \u003d \\"},{"line_number":654,"context_line":"                _(\u0027Could not determine fibre channel world wide node names\u0027),"},{"line_number":655,"context_line":"                LOG.warn(msg, instance\u003dinstance)"},{"line_number":656,"context_line":""},{"line_number":657,"context_line":"        if not self._fc_wwpns:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FGUk%3D","line":654,"updated":"2013-02-07 04:25:41.000000000","message":"Yeah, I\u0027d rewrite this to just be:\n\n LOG.warn(_(\u0027Could not determine fibre \u0027\n                        \u0027channel world wide node names\u0027),\n                    instance\u003dinstance)\n\nOr something like that.","commit_id":"888f327a58505010631e9f6669651c43d1b4f67a"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"bdbc12ac09a33a64e1a993375602d9fdb982e8cb","unresolved":false,"context_lines":[{"line_number":651,"context_line":"            self._fc_wwnns \u003d libvirt_utils.get_fc_wwnns()"},{"line_number":652,"context_line":"            if not self._fc_wwnns or len(self._fc_wwnns) \u003d\u003d 0:"},{"line_number":653,"context_line":"                msg \u003d \\"},{"line_number":654,"context_line":"                _(\u0027Could not determine fibre channel world wide node names\u0027),"},{"line_number":655,"context_line":"                LOG.warn(msg, instance\u003dinstance)"},{"line_number":656,"context_line":""},{"line_number":657,"context_line":"        if not self._fc_wwpns:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FFcU%3D","line":654,"in_reply_to":"AAAAM3%2F%2FGUk%3D","updated":"2013-02-07 16:51:05.000000000","message":"Done","commit_id":"888f327a58505010631e9f6669651c43d1b4f67a"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"273fcd42b4df9764faebe481ccf38d895c7a5841","unresolved":false,"context_lines":[{"line_number":659,"context_line":"            if not self._fc_wwpns or len(self._fc_wwpns) \u003d\u003d 0:"},{"line_number":660,"context_line":"                msg \u003d \\"},{"line_number":661,"context_line":"                _(\u0027Could not determine fibre channel world wide port names\u0027),"},{"line_number":662,"context_line":"                LOG.warn(msg, instance\u003dinstance)"},{"line_number":663,"context_line":""},{"line_number":664,"context_line":"        connector \u003d {\u0027ip\u0027: CONF.my_ip,"},{"line_number":665,"context_line":"                     \u0027initiator\u0027: self._initiator,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FGUg%3D","line":662,"updated":"2013-02-07 04:25:41.000000000","message":"Ditto","commit_id":"888f327a58505010631e9f6669651c43d1b4f67a"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"bdbc12ac09a33a64e1a993375602d9fdb982e8cb","unresolved":false,"context_lines":[{"line_number":659,"context_line":"            if not self._fc_wwpns or len(self._fc_wwpns) \u003d\u003d 0:"},{"line_number":660,"context_line":"                msg \u003d \\"},{"line_number":661,"context_line":"                _(\u0027Could not determine fibre channel world wide port names\u0027),"},{"line_number":662,"context_line":"                LOG.warn(msg, instance\u003dinstance)"},{"line_number":663,"context_line":""},{"line_number":664,"context_line":"        connector \u003d {\u0027ip\u0027: CONF.my_ip,"},{"line_number":665,"context_line":"                     \u0027initiator\u0027: self._initiator,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FFcQ%3D","line":662,"in_reply_to":"AAAAM3%2F%2FGUg%3D","updated":"2013-02-07 16:51:05.000000000","message":"Done","commit_id":"888f327a58505010631e9f6669651c43d1b4f67a"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"ed33000361966b16f86d4566d5ff4db04882cc1a","unresolved":false,"context_lines":[{"line_number":153,"context_line":"                  \u0027rbd\u003dnova.virt.libvirt.volume.LibvirtNetVolumeDriver\u0027,"},{"line_number":154,"context_line":"                  \u0027sheepdog\u003dnova.virt.libvirt.volume.LibvirtNetVolumeDriver\u0027,"},{"line_number":155,"context_line":"                  \u0027nfs\u003dnova.virt.libvirt.volume.LibvirtNFSVolumeDriver\u0027,"},{"line_number":156,"context_line":"                  \u0027fibrechan\u003dnova.virt.libvirt.volume.\u0027"},{"line_number":157,"context_line":"                      \u0027LibvirtFibreChannelVolumeDriver\u0027"},{"line_number":158,"context_line":"                  ],"},{"line_number":159,"context_line":"                help\u003d\u0027Libvirt handlers for remote volumes.\u0027),"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FCsM%3D","line":156,"updated":"2013-02-09 17:18:42.000000000","message":"why not use fibre_channel?","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"9d9bab1b4efe484cd2b7784b7b6a1fcff421a347","unresolved":false,"context_lines":[{"line_number":153,"context_line":"                  \u0027rbd\u003dnova.virt.libvirt.volume.LibvirtNetVolumeDriver\u0027,"},{"line_number":154,"context_line":"                  \u0027sheepdog\u003dnova.virt.libvirt.volume.LibvirtNetVolumeDriver\u0027,"},{"line_number":155,"context_line":"                  \u0027nfs\u003dnova.virt.libvirt.volume.LibvirtNFSVolumeDriver\u0027,"},{"line_number":156,"context_line":"                  \u0027fibrechan\u003dnova.virt.libvirt.volume.\u0027"},{"line_number":157,"context_line":"                      \u0027LibvirtFibreChannelVolumeDriver\u0027"},{"line_number":158,"context_line":"                  ],"},{"line_number":159,"context_line":"                help\u003d\u0027Libvirt handlers for remote volumes.\u0027),"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2B7w0%3D","line":156,"in_reply_to":"AAAAM3%2F%2FB%2Fc%3D","updated":"2013-02-14 19:34:41.000000000","message":"Done","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"5eeb2c525884172d4c1cececc27fa7aa396272fe","unresolved":false,"context_lines":[{"line_number":153,"context_line":"                  \u0027rbd\u003dnova.virt.libvirt.volume.LibvirtNetVolumeDriver\u0027,"},{"line_number":154,"context_line":"                  \u0027sheepdog\u003dnova.virt.libvirt.volume.LibvirtNetVolumeDriver\u0027,"},{"line_number":155,"context_line":"                  \u0027nfs\u003dnova.virt.libvirt.volume.LibvirtNFSVolumeDriver\u0027,"},{"line_number":156,"context_line":"                  \u0027fibrechan\u003dnova.virt.libvirt.volume.\u0027"},{"line_number":157,"context_line":"                      \u0027LibvirtFibreChannelVolumeDriver\u0027"},{"line_number":158,"context_line":"                  ],"},{"line_number":159,"context_line":"                help\u003d\u0027Libvirt handlers for remote volumes.\u0027),"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FB%2Fc%3D","line":156,"in_reply_to":"AAAAM3%2F%2FCsM%3D","updated":"2013-02-11 04:59:52.000000000","message":"ok will do.","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"49edc13cb602b8656f7e51e0e0b18a4878026cd5","unresolved":false,"context_lines":[{"line_number":664,"context_line":"            if not self._fc_wwpns or len(self._fc_wwpns) \u003d\u003d 0:"},{"line_number":665,"context_line":"                LOG.warn(_(\u0027Could not determine fibre channel \u0027"},{"line_number":666,"context_line":"                               \u0027world wide port names\u0027),"},{"line_number":667,"context_line":"                         instance\u003dinstance)"},{"line_number":668,"context_line":""},{"line_number":669,"context_line":"        connector \u003d {\u0027ip\u0027: CONF.my_ip,"},{"line_number":670,"context_line":"                     \u0027initiator\u0027: self._initiator,"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAM3%2F%2B51k%3D","line":667,"updated":"2013-02-14 22:58:04.000000000","message":"These additions look dubious.  Is a system not using FC going to end upw ith warnings in their logs?","commit_id":"d754c8912b82334bc00834eab73c805ce3360d2d"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"f3f0f7c5f2a51ec32fd028c5bdbb3417c5057d0d","unresolved":false,"context_lines":[{"line_number":664,"context_line":"            if not self._fc_wwpns or len(self._fc_wwpns) \u003d\u003d 0:"},{"line_number":665,"context_line":"                LOG.warn(_(\u0027Could not determine fibre channel \u0027"},{"line_number":666,"context_line":"                               \u0027world wide port names\u0027),"},{"line_number":667,"context_line":"                         instance\u003dinstance)"},{"line_number":668,"context_line":""},{"line_number":669,"context_line":"        connector \u003d {\u0027ip\u0027: CONF.my_ip,"},{"line_number":670,"context_line":"                     \u0027initiator\u0027: self._initiator,"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAM3%2F%2B5zk%3D","line":667,"in_reply_to":"AAAAM3%2F%2B51Y%3D","updated":"2013-02-14 23:18:59.000000000","message":"or can I change them to debug output?  info?","commit_id":"d754c8912b82334bc00834eab73c805ce3360d2d"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"6a4c8d762f34602004521249abb16a10549307d5","unresolved":false,"context_lines":[{"line_number":664,"context_line":"            if not self._fc_wwpns or len(self._fc_wwpns) \u003d\u003d 0:"},{"line_number":665,"context_line":"                LOG.warn(_(\u0027Could not determine fibre channel \u0027"},{"line_number":666,"context_line":"                               \u0027world wide port names\u0027),"},{"line_number":667,"context_line":"                         instance\u003dinstance)"},{"line_number":668,"context_line":""},{"line_number":669,"context_line":"        connector \u003d {\u0027ip\u0027: CONF.my_ip,"},{"line_number":670,"context_line":"                     \u0027initiator\u0027: self._initiator,"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAM3%2F%2B51Y%3D","line":667,"in_reply_to":"AAAAM3%2F%2B51k%3D","updated":"2013-02-14 23:01:26.000000000","message":"I can remove the warnings if you think that is good?","commit_id":"d754c8912b82334bc00834eab73c805ce3360d2d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"34c1c6683103df17dfccd2eee2d6c5db0c2d486d","unresolved":false,"context_lines":[{"line_number":664,"context_line":"            if not self._fc_wwpns or len(self._fc_wwpns) \u003d\u003d 0:"},{"line_number":665,"context_line":"                LOG.warn(_(\u0027Could not determine fibre channel \u0027"},{"line_number":666,"context_line":"                               \u0027world wide port names\u0027),"},{"line_number":667,"context_line":"                         instance\u003dinstance)"},{"line_number":668,"context_line":""},{"line_number":669,"context_line":"        connector \u003d {\u0027ip\u0027: CONF.my_ip,"},{"line_number":670,"context_line":"                     \u0027initiator\u0027: self._initiator,"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAM3%2F%2B5ic%3D","line":667,"in_reply_to":"AAAAM3%2F%2B5zk%3D","updated":"2013-02-15 06:50:25.000000000","message":"+1 avishay-il\u0027s suggestion.  The check for iscsi initiator, wwpn, wwnn should be handled the same way.","commit_id":"d754c8912b82334bc00834eab73c805ce3360d2d"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"90257780310b7cd0a248382f6e80691ce1f757ce","unresolved":false,"context_lines":[{"line_number":664,"context_line":"            if not self._fc_wwpns or len(self._fc_wwpns) \u003d\u003d 0:"},{"line_number":665,"context_line":"                LOG.warn(_(\u0027Could not determine fibre channel \u0027"},{"line_number":666,"context_line":"                               \u0027world wide port names\u0027),"},{"line_number":667,"context_line":"                         instance\u003dinstance)"},{"line_number":668,"context_line":""},{"line_number":669,"context_line":"        connector \u003d {\u0027ip\u0027: CONF.my_ip,"},{"line_number":670,"context_line":"                     \u0027initiator\u0027: self._initiator,"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAM3%2F%2B5bY%3D","line":667,"in_reply_to":"AAAAM3%2F%2B5zk%3D","updated":"2013-02-15 04:32:21.000000000","message":"Maybe change the 3 cases (iscsi/wwnns/wwpns) to debug, and add a check that if none are configured, print a warning (or error?) message?","commit_id":"d754c8912b82334bc00834eab73c805ce3360d2d"}],"nova/virt/libvirt/utils.py":[{"author":{"_account_id":67,"name":"Vish Ishaya","email":"vishvananda@gmail.com","username":"vishvananda"},"change_message_id":"1e40a9f9cd589c9672a7c49a287be7f3f4734f87","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    \"\"\"Get the Fibre Channel HBA information.\"\"\""},{"line_number":54,"context_line":"    try:"},{"line_number":55,"context_line":"        out, err \u003d execute(\u0027systool\u0027, \u0027-c\u0027, \u0027fc_host\u0027, \u0027-v\u0027,"},{"line_number":56,"context_line":"                           run_as_root\u003dTrue)"},{"line_number":57,"context_line":"    except exception.ProcessExecutionError as exc:"},{"line_number":58,"context_line":"        if exc.exit_code \u003d\u003d 96:"},{"line_number":59,"context_line":"            LOG.warn(\"systool is not installed\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FWhM%3D","line":56,"updated":"2013-01-25 22:54:34.000000000","message":"if you need to run this as root, you need to add it to nova-rootwrap","commit_id":"a561027e13a4e2edf413226b9eaf29366b2c40ff"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"a18fd5943784bebc44f8436e5b7ddb85e36105a2","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    \"\"\"Get the Fibre Channel HBA information.\"\"\""},{"line_number":54,"context_line":"    try:"},{"line_number":55,"context_line":"        out, err \u003d execute(\u0027systool\u0027, \u0027-c\u0027, \u0027fc_host\u0027, \u0027-v\u0027,"},{"line_number":56,"context_line":"                           run_as_root\u003dTrue)"},{"line_number":57,"context_line":"    except exception.ProcessExecutionError as exc:"},{"line_number":58,"context_line":"        if exc.exit_code \u003d\u003d 96:"},{"line_number":59,"context_line":"            LOG.warn(\"systool is not installed\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FWd4%3D","line":56,"in_reply_to":"AAAAM3%2F%2FWhM%3D","updated":"2013-01-26 00:12:41.000000000","message":"I added it to the nova/rootwrap.d/compute.filters","commit_id":"a561027e13a4e2edf413226b9eaf29366b2c40ff"},{"author":{"_account_id":67,"name":"Vish Ishaya","email":"vishvananda@gmail.com","username":"vishvananda"},"change_message_id":"1e40a9f9cd589c9672a7c49a287be7f3f4734f87","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    except exception.ProcessExecutionError as exc:"},{"line_number":58,"context_line":"        if exc.exit_code \u003d\u003d 96:"},{"line_number":59,"context_line":"            LOG.warn(\"systool is not installed\")"},{"line_number":60,"context_line":"        return None"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    if out is None:"},{"line_number":63,"context_line":"        raise RuntimeError(_(\"Cannot find any Fibre Channel HBAs\"))"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FWgs%3D","line":60,"updated":"2013-01-25 22:54:34.000000000","message":"we return none if we can\u0027t list HBAs with a warn?\n\n...","commit_id":"a561027e13a4e2edf413226b9eaf29366b2c40ff"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"a977ce5be08ef56a583998d89676e473d18294c6","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    except exception.ProcessExecutionError as exc:"},{"line_number":58,"context_line":"        if exc.exit_code \u003d\u003d 96:"},{"line_number":59,"context_line":"            LOG.warn(\"systool is not installed\")"},{"line_number":60,"context_line":"        return None"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    if out is None:"},{"line_number":63,"context_line":"        raise RuntimeError(_(\"Cannot find any Fibre Channel HBAs\"))"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FWck%3D","line":60,"in_reply_to":"AAAAM3%2F%2FWgs%3D","updated":"2013-01-26 00:21:57.000000000","message":"Returning None is ok, and the warning is simply a notification.","commit_id":"a561027e13a4e2edf413226b9eaf29366b2c40ff"},{"author":{"_account_id":67,"name":"Vish Ishaya","email":"vishvananda@gmail.com","username":"vishvananda"},"change_message_id":"1e40a9f9cd589c9672a7c49a287be7f3f4734f87","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        return None"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    if out is None:"},{"line_number":63,"context_line":"        raise RuntimeError(_(\"Cannot find any Fibre Channel HBAs\"))"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    lines \u003d out.split(\u0027\\n\u0027)"},{"line_number":66,"context_line":"    #ignore the first 2 lines"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FWhA%3D","line":63,"updated":"2013-01-25 22:54:34.000000000","message":"but we raise an exception if we don\u0027t get a result from systool?\n\nSeems like we should be consistent in these two cases.","commit_id":"a561027e13a4e2edf413226b9eaf29366b2c40ff"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"a18fd5943784bebc44f8436e5b7ddb85e36105a2","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        return None"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    if out is None:"},{"line_number":63,"context_line":"        raise RuntimeError(_(\"Cannot find any Fibre Channel HBAs\"))"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    lines \u003d out.split(\u0027\\n\u0027)"},{"line_number":66,"context_line":"    #ignore the first 2 lines"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FWdw%3D","line":63,"in_reply_to":"AAAAM3%2F%2FWhA%3D","updated":"2013-01-26 00:12:41.000000000","message":"yah good catch.  I\u0027ll just return None","commit_id":"a561027e13a4e2edf413226b9eaf29366b2c40ff"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"7b9424b1fc9c50621a214436b6a056e5d2d787a3","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    except exception.ProcessExecutionError as exc:"},{"line_number":58,"context_line":"        if exc.exit_code \u003d\u003d 96:"},{"line_number":59,"context_line":"            LOG.warn(\"systool is not installed\")"},{"line_number":60,"context_line":"        return None"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    if out is None:"},{"line_number":63,"context_line":"        LOG.warn(\"Could not find any FibreChannel HBAs\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FO4g%3D","line":60,"updated":"2013-02-01 00:40:20.000000000","message":"Hiding the exception here is probably not a good thing.\n\nAlso,  this should return [], not none","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ca3e089b129761cd28aa672ae152ccbde057b0c2","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    except exception.ProcessExecutionError as exc:"},{"line_number":58,"context_line":"        if exc.exit_code \u003d\u003d 96:"},{"line_number":59,"context_line":"            LOG.warn(\"systool is not installed\")"},{"line_number":60,"context_line":"        return None"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    if out is None:"},{"line_number":63,"context_line":"        LOG.warn(\"Could not find any FibreChannel HBAs\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FOAA%3D","line":60,"in_reply_to":"AAAAM3%2F%2FO4g%3D","updated":"2013-02-01 18:38:51.000000000","message":"This is called every time by get_volume_connector.  For hosts that don\u0027t have HBAs (Fibre Channel), this will typically always fail.   I\u0027m not sure it\u0027s a good thing to throw an exception for the majority of folks that use nova that don\u0027t have FC HBAs and don\u0027t have sysfstools installed.   Only folks that will be using FC will have this installed.   This is why I\u0027m just logging a warning.\n\nI will change this to return [] though.","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"7b9424b1fc9c50621a214436b6a056e5d2d787a3","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    if out is None:"},{"line_number":63,"context_line":"        LOG.warn(\"Could not find any FibreChannel HBAs\")"},{"line_number":64,"context_line":"        return None"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    lines \u003d out.split(\u0027\\n\u0027)"},{"line_number":67,"context_line":"    #ignore the first 2 lines"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FO4E%3D","line":64,"updated":"2013-02-01 00:40:20.000000000","message":"Return [], not none","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"7b9424b1fc9c50621a214436b6a056e5d2d787a3","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    # and are obtainable via the systool app"},{"line_number":94,"context_line":"    hbas \u003d get_fc_hbas()"},{"line_number":95,"context_line":"    hbas_info \u003d []"},{"line_number":96,"context_line":"    for hba in hbas:"},{"line_number":97,"context_line":"        wwpn \u003d hba[\u0027port_name\u0027].replace(\u00270x\u0027, \u0027\u0027)"},{"line_number":98,"context_line":"        wwnn \u003d hba[\u0027node_name\u0027].replace(\u00270x\u0027, \u0027\u0027)"},{"line_number":99,"context_line":"        device_path \u003d hba[\u0027ClassDevicepath\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FO4Q%3D","line":96,"updated":"2013-02-01 00:40:20.000000000","message":"This will raise an exception of get_fc_hbas returned None.  This is why get_fc_hbas should return []","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"380ff45763689118c3e48611c572268b3dd54012","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    # and are obtainable via the systool app"},{"line_number":94,"context_line":"    hbas \u003d get_fc_hbas()"},{"line_number":95,"context_line":"    hbas_info \u003d []"},{"line_number":96,"context_line":"    for hba in hbas:"},{"line_number":97,"context_line":"        wwpn \u003d hba[\u0027port_name\u0027].replace(\u00270x\u0027, \u0027\u0027)"},{"line_number":98,"context_line":"        wwnn \u003d hba[\u0027node_name\u0027].replace(\u00270x\u0027, \u0027\u0027)"},{"line_number":99,"context_line":"        device_path \u003d hba[\u0027ClassDevicepath\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FLno%3D","line":96,"in_reply_to":"AAAAM3%2F%2FO4Q%3D","updated":"2013-02-04 19:06:59.000000000","message":"Done","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"7b9424b1fc9c50621a214436b6a056e5d2d787a3","unresolved":false,"context_lines":[{"line_number":112,"context_line":"    hbas \u003d get_fc_hbas()"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    wwpns \u003d []"},{"line_number":115,"context_line":"    if hbas:"},{"line_number":116,"context_line":"        for hba in hbas:"},{"line_number":117,"context_line":"            wwpn \u003d hba[\u0027port_name\u0027].replace(\u00270x\u0027, \u0027\u0027)"},{"line_number":118,"context_line":"            wwpns.append(wwpn)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FO4A%3D","line":115,"updated":"2013-02-01 00:40:20.000000000","message":"This if is unnecessary, once get_fc_hbas stops returning none","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"380ff45763689118c3e48611c572268b3dd54012","unresolved":false,"context_lines":[{"line_number":112,"context_line":"    hbas \u003d get_fc_hbas()"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    wwpns \u003d []"},{"line_number":115,"context_line":"    if hbas:"},{"line_number":116,"context_line":"        for hba in hbas:"},{"line_number":117,"context_line":"            wwpn \u003d hba[\u0027port_name\u0027].replace(\u00270x\u0027, \u0027\u0027)"},{"line_number":118,"context_line":"            wwpns.append(wwpn)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FLnk%3D","line":115,"in_reply_to":"AAAAM3%2F%2FO4A%3D","updated":"2013-02-04 19:06:59.000000000","message":"Done","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"234958d82b2e6524260ac1143c17379e4a03e02f","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    if hbas:"},{"line_number":116,"context_line":"        for hba in hbas:"},{"line_number":117,"context_line":"            wwpn \u003d hba[\u0027port_name\u0027].replace(\u00270x\u0027, \u0027\u0027)"},{"line_number":118,"context_line":"            wwpns.append(wwpn)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    return wwpns"},{"line_number":121,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FMvQ%3D","line":118,"updated":"2013-02-03 16:42:18.000000000","message":"I think we should make sure that port_state \u003d\u003d \u0027Online\u0027 before adding","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"380ff45763689118c3e48611c572268b3dd54012","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    if hbas:"},{"line_number":116,"context_line":"        for hba in hbas:"},{"line_number":117,"context_line":"            wwpn \u003d hba[\u0027port_name\u0027].replace(\u00270x\u0027, \u0027\u0027)"},{"line_number":118,"context_line":"            wwpns.append(wwpn)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    return wwpns"},{"line_number":121,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FLns%3D","line":118,"in_reply_to":"AAAAM3%2F%2FMvQ%3D","updated":"2013-02-04 19:06:59.000000000","message":"Done","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"7b9424b1fc9c50621a214436b6a056e5d2d787a3","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    hbas \u003d get_fc_hbas()"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    wwnns \u003d []"},{"line_number":130,"context_line":"    if hbas:"},{"line_number":131,"context_line":"        for hba in hbas:"},{"line_number":132,"context_line":"            wwnn \u003d hba[\u0027node_name\u0027].replace(\u00270x\u0027, \u0027\u0027)"},{"line_number":133,"context_line":"            wwnns.append(wwnn)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FO38%3D","line":130,"updated":"2013-02-01 00:40:20.000000000","message":"Ditto","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"380ff45763689118c3e48611c572268b3dd54012","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    hbas \u003d get_fc_hbas()"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    wwnns \u003d []"},{"line_number":130,"context_line":"    if hbas:"},{"line_number":131,"context_line":"        for hba in hbas:"},{"line_number":132,"context_line":"            wwnn \u003d hba[\u0027node_name\u0027].replace(\u00270x\u0027, \u0027\u0027)"},{"line_number":133,"context_line":"            wwnns.append(wwnn)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FLng%3D","line":130,"in_reply_to":"AAAAM3%2F%2FO38%3D","updated":"2013-02-04 19:06:59.000000000","message":"Done","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"36429d6071538d0510d88a5b8139c94b6c314f5f","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    \"\"\"Get the Fibre Channel HBA information.\"\"\""},{"line_number":62,"context_line":"    try:"},{"line_number":63,"context_line":"        out, err \u003d execute(\u0027systool\u0027, \u0027-c\u0027, \u0027fc_host\u0027, \u0027-v\u0027,"},{"line_number":64,"context_line":"                           run_as_root\u003dTrue)"},{"line_number":65,"context_line":"    except exception.ProcessExecutionError as exc:"},{"line_number":66,"context_line":"        if exc.exit_code \u003d\u003d 96:"},{"line_number":67,"context_line":"            LOG.warn(_(\"systool is not installed\"))"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAM3%2F%2ByGw%3D","line":64,"updated":"2013-02-19 11:32:08.000000000","message":"This tool was not present on my system - on Fedora it seems to require the \u0027sysfsutils\u0027 RPM to be installed. Can you also submit a change to \u0027devstack\u0027 which adds suitable line to files/rpms/nova and files/apts/nova to ensure the right packages are installed on Debian/Ubuntu/Fedora/RHEL systems to make this work.","commit_id":"052859fbdb10f7f796512ef4f9a3d6e87fd3f87f"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"30a913e341b3b5550ebec68f664b6ae873f78cc8","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    \"\"\"Get the Fibre Channel HBA information.\"\"\""},{"line_number":62,"context_line":"    try:"},{"line_number":63,"context_line":"        out, err \u003d execute(\u0027systool\u0027, \u0027-c\u0027, \u0027fc_host\u0027, \u0027-v\u0027,"},{"line_number":64,"context_line":"                           run_as_root\u003dTrue)"},{"line_number":65,"context_line":"    except exception.ProcessExecutionError as exc:"},{"line_number":66,"context_line":"        if exc.exit_code \u003d\u003d 96:"},{"line_number":67,"context_line":"            LOG.warn(_(\"systool is not installed\"))"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAM3%2F%2Bxns%3D","line":64,"in_reply_to":"AAAAM3%2F%2ByGw%3D","updated":"2013-02-19 15:05:40.000000000","message":"https://review.openstack.org/#/c/20003/","commit_id":"052859fbdb10f7f796512ef4f9a3d6e87fd3f87f"}],"nova/virt/libvirt/volume.py":[{"author":{"_account_id":67,"name":"Vish Ishaya","email":"vishvananda@gmail.com","username":"vishvananda"},"change_message_id":"1e40a9f9cd589c9672a7c49a287be7f3f4734f87","unresolved":false,"context_lines":[{"line_number":229,"context_line":"            self._run_iscsiadm(iscsi_properties, (\"--logout\",),"},{"line_number":230,"context_line":"                               check_exit_code\u003d[0, 21, 255])"},{"line_number":231,"context_line":"            self._run_iscsiadm(iscsi_properties, (\u0027--op\u0027, \u0027delete\u0027),"},{"line_number":232,"context_line":"                               check_exit_code\u003d[0, 21, 255])"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"class LibvirtFibreChannelVolumeDriver(LibvirtVolumeDriver):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FWgc%3D","line":232,"updated":"2013-01-25 22:54:34.000000000","message":"odd to create the linuxiscsi file but leave a bunch of iscsi commands still here. Is the plan to move them in a later patch?","commit_id":"a561027e13a4e2edf413226b9eaf29366b2c40ff"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"a18fd5943784bebc44f8436e5b7ddb85e36105a2","unresolved":false,"context_lines":[{"line_number":229,"context_line":"            self._run_iscsiadm(iscsi_properties, (\"--logout\",),"},{"line_number":230,"context_line":"                               check_exit_code\u003d[0, 21, 255])"},{"line_number":231,"context_line":"            self._run_iscsiadm(iscsi_properties, (\u0027--op\u0027, \u0027delete\u0027),"},{"line_number":232,"context_line":"                               check_exit_code\u003d[0, 21, 255])"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"class LibvirtFibreChannelVolumeDriver(LibvirtVolumeDriver):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FWdo%3D","line":232,"in_reply_to":"AAAAM3%2F%2FWgc%3D","updated":"2013-01-26 00:12:41.000000000","message":"These are iscsiadm commands, which are for iscsi.   The linuxscsi is for the scsi subsystem (Linux Generic sg)","commit_id":"a561027e13a4e2edf413226b9eaf29366b2c40ff"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"c3554f51f1665130e66d761e0757e95d64c3a237","unresolved":false,"context_lines":[{"line_number":232,"context_line":"                               check_exit_code\u003d[0, 21, 255])"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"class LibvirtFibreChannelVolumeDriver(LibvirtVolumeDriver):"},{"line_number":236,"context_line":"    \"\"\"Driver to attach Fibre Channel Network volumes to libvirt.\"\"\""},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    @lockutils.synchronized(\u0027connect_volume\u0027, \u0027nova-\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FMLg%3D","line":235,"updated":"2013-02-04 10:37:39.000000000","message":"With recent refactoring you should be inheriting from \"LibvirtBaseVolumeDriver\" rather than relying on \"LibvirtVolumeDriver\" todo the right thing for you.","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"380ff45763689118c3e48611c572268b3dd54012","unresolved":false,"context_lines":[{"line_number":232,"context_line":"                               check_exit_code\u003d[0, 21, 255])"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"class LibvirtFibreChannelVolumeDriver(LibvirtVolumeDriver):"},{"line_number":236,"context_line":"    \"\"\"Driver to attach Fibre Channel Network volumes to libvirt.\"\"\""},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    @lockutils.synchronized(\u0027connect_volume\u0027, \u0027nova-\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FLnY%3D","line":235,"in_reply_to":"AAAAM3%2F%2FMLg%3D","updated":"2013-02-04 19:06:59.000000000","message":"Done","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"7b9424b1fc9c50621a214436b6a056e5d2d787a3","unresolved":false,"context_lines":[{"line_number":249,"context_line":"        elif isinstance(ports, str):"},{"line_number":250,"context_line":"            wwns.append(ports)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"        #We need to look for wwns on every hba"},{"line_number":253,"context_line":"        #because we don\u0027t know ahead of time"},{"line_number":254,"context_line":"        #where they will show up."},{"line_number":255,"context_line":"        hbas \u003d virtutils.get_fc_hbas_info()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FO30%3D","line":252,"updated":"2013-02-01 00:40:20.000000000","message":"Comments need a space after #","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"380ff45763689118c3e48611c572268b3dd54012","unresolved":false,"context_lines":[{"line_number":249,"context_line":"        elif isinstance(ports, str):"},{"line_number":250,"context_line":"            wwns.append(ports)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"        #We need to look for wwns on every hba"},{"line_number":253,"context_line":"        #because we don\u0027t know ahead of time"},{"line_number":254,"context_line":"        #where they will show up."},{"line_number":255,"context_line":"        hbas \u003d virtutils.get_fc_hbas_info()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FLnQ%3D","line":252,"in_reply_to":"AAAAM3%2F%2FO30%3D","updated":"2013-02-04 19:06:59.000000000","message":"Done","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"7b9424b1fc9c50621a214436b6a056e5d2d787a3","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        host_device \u003d None"},{"line_number":275,"context_line":"        done \u003d False"},{"line_number":276,"context_line":"        device_name \u003d None"},{"line_number":277,"context_line":"        while not done:"},{"line_number":278,"context_line":"            for device in host_devices:"},{"line_number":279,"context_line":"                LOG.debug(\"Looking for Fibre Channel dev %s\" % device)"},{"line_number":280,"context_line":"                if os.path.exists(device):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FO3U%3D","line":277,"updated":"2013-02-01 00:40:20.000000000","message":"If hbas is [], then host_devices will also be [], and this will loop unnecessarily until the max retries is reached","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"428754e9d00fa4dd64c2b8b7c1be38b073a1e5fa","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        host_device \u003d None"},{"line_number":275,"context_line":"        done \u003d False"},{"line_number":276,"context_line":"        device_name \u003d None"},{"line_number":277,"context_line":"        while not done:"},{"line_number":278,"context_line":"            for device in host_devices:"},{"line_number":279,"context_line":"                LOG.debug(\"Looking for Fibre Channel dev %s\" % device)"},{"line_number":280,"context_line":"                if os.path.exists(device):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FNjk%3D","line":277,"in_reply_to":"AAAAM3%2F%2FO3U%3D","updated":"2013-02-02 01:13:03.000000000","message":"nice catch thank you.","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"7b9424b1fc9c50621a214436b6a056e5d2d787a3","unresolved":false,"context_lines":[{"line_number":297,"context_line":"                linuxscsi.rescan_hosts(hbas)"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"                tries \u003d tries + 1"},{"line_number":300,"context_line":"                time.sleep(tries ** 2)"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        if host_device is not None and device_name is not None:"},{"line_number":303,"context_line":"            LOG.debug(_(\"Found Fibre Channel volume %(mount_device)s \""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FO3k%3D","line":300,"updated":"2013-02-01 00:40:20.000000000","message":"Don\u0027t use sleep. Use utils looping call","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"380ff45763689118c3e48611c572268b3dd54012","unresolved":false,"context_lines":[{"line_number":297,"context_line":"                linuxscsi.rescan_hosts(hbas)"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"                tries \u003d tries + 1"},{"line_number":300,"context_line":"                time.sleep(tries ** 2)"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        if host_device is not None and device_name is not None:"},{"line_number":303,"context_line":"            LOG.debug(_(\"Found Fibre Channel volume %(mount_device)s \""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FLnM%3D","line":300,"in_reply_to":"AAAAM3%2F%2FO3k%3D","updated":"2013-02-04 19:06:59.000000000","message":"Done","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":24,"name":"Chuck Short","email":"charles.short@windriver.com","username":"zulcss"},"change_message_id":"36076a2f7ced65f47edf38cf9a2c65d7f140e194","unresolved":false,"context_lines":[{"line_number":313,"context_line":"            connection_info[\u0027data\u0027][\u0027devices\u0027] \u003d mdev_info[\u0027devices\u0027]"},{"line_number":314,"context_line":"        else:"},{"line_number":315,"context_line":"            #we didn\u0027t find a multipath device."},{"line_number":316,"context_line":"            #so we assume the kernel only sees 1 device"},{"line_number":317,"context_line":"            connection_info[\u0027data\u0027][\u0027device_path\u0027] \u003d host_device"},{"line_number":318,"context_line":"            device_info \u003d linuxscsi.get_device_info(device_name)"},{"line_number":319,"context_line":"            connection_info[\u0027data\u0027][\u0027devices\u0027] \u003d [device_info]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FMBc%3D","line":316,"updated":"2013-02-04 14:06:55.000000000","message":"comments need a space here.","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"592877a5979a461be4bc8fb16a70c45e8884bb9b","unresolved":false,"context_lines":[{"line_number":313,"context_line":"            connection_info[\u0027data\u0027][\u0027devices\u0027] \u003d mdev_info[\u0027devices\u0027]"},{"line_number":314,"context_line":"        else:"},{"line_number":315,"context_line":"            #we didn\u0027t find a multipath device."},{"line_number":316,"context_line":"            #so we assume the kernel only sees 1 device"},{"line_number":317,"context_line":"            connection_info[\u0027data\u0027][\u0027device_path\u0027] \u003d host_device"},{"line_number":318,"context_line":"            device_info \u003d linuxscsi.get_device_info(device_name)"},{"line_number":319,"context_line":"            connection_info[\u0027data\u0027][\u0027devices\u0027] \u003d [device_info]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FLD8%3D","line":316,"in_reply_to":"AAAAM3%2F%2FMBc%3D","updated":"2013-02-04 21:53:11.000000000","message":"Done","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"c3554f51f1665130e66d761e0757e95d64c3a237","unresolved":false,"context_lines":[{"line_number":316,"context_line":"            #so we assume the kernel only sees 1 device"},{"line_number":317,"context_line":"            connection_info[\u0027data\u0027][\u0027device_path\u0027] \u003d host_device"},{"line_number":318,"context_line":"            device_info \u003d linuxscsi.get_device_info(device_name)"},{"line_number":319,"context_line":"            connection_info[\u0027data\u0027][\u0027devices\u0027] \u003d [device_info]"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"        sup \u003d super(LibvirtFibreChannelVolumeDriver, self)"},{"line_number":322,"context_line":"        return sup.connect_volume(connection_info, mount_device)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FMLI%3D","line":319,"updated":"2013-02-04 10:37:39.000000000","message":"Don\u0027t modify the passed in \u0027connection_info\u0027 struct - that should be considered immutable. See next comment for how to deal with setting the config properly","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"c3554f51f1665130e66d761e0757e95d64c3a237","unresolved":false,"context_lines":[{"line_number":319,"context_line":"            connection_info[\u0027data\u0027][\u0027devices\u0027] \u003d [device_info]"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"        sup \u003d super(LibvirtFibreChannelVolumeDriver, self)"},{"line_number":322,"context_line":"        return sup.connect_volume(connection_info, mount_device)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    @lockutils.synchronized(\u0027connect_volume\u0027, \u0027nova-\u0027)"},{"line_number":325,"context_line":"    def disconnect_volume(self, connection_info, mount_device):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FMLY%3D","line":322,"updated":"2013-02-04 10:37:39.000000000","message":"After fixing inheritance, change these to\n\n        conf \u003d super(LibvirtFibreChannelVolumeDriver,\n                     self).connect_volume(connection_info, mount_device)\n        conf.source_type \u003d \"block\"\n        conf.source_path \u003d ....device path...\n        return conf","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"d7487c54ff53ea87befeb61a409f22e16bb48616","unresolved":false,"context_lines":[{"line_number":319,"context_line":"            connection_info[\u0027data\u0027][\u0027devices\u0027] \u003d [device_info]"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"        sup \u003d super(LibvirtFibreChannelVolumeDriver, self)"},{"line_number":322,"context_line":"        return sup.connect_volume(connection_info, mount_device)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    @lockutils.synchronized(\u0027connect_volume\u0027, \u0027nova-\u0027)"},{"line_number":325,"context_line":"    def disconnect_volume(self, connection_info, mount_device):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FLOk%3D","line":322,"in_reply_to":"AAAAM3%2F%2FLVw%3D","updated":"2013-02-04 19:51:22.000000000","message":"Ah, ok, I did not realize you were relying on this to bre preserved across to disconnect_volume - ignore my comment about not modifying  \u0027connection_info\u0027.","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"380ff45763689118c3e48611c572268b3dd54012","unresolved":false,"context_lines":[{"line_number":319,"context_line":"            connection_info[\u0027data\u0027][\u0027devices\u0027] \u003d [device_info]"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"        sup \u003d super(LibvirtFibreChannelVolumeDriver, self)"},{"line_number":322,"context_line":"        return sup.connect_volume(connection_info, mount_device)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    @lockutils.synchronized(\u0027connect_volume\u0027, \u0027nova-\u0027)"},{"line_number":325,"context_line":"    def disconnect_volume(self, connection_info, mount_device):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FLVw%3D","line":322,"in_reply_to":"AAAAM3%2F%2FMLY%3D","updated":"2013-02-04 19:06:59.000000000","message":"This is a problem.   I need to get access to the device path that is stored in conf.source_path at disconnect_volume time.   It appears that the conf object is not stored anywhere.   I need access to the source_path so I can determine if it\u0027s a multipath device or not at disconnect_volume time.   For a multipath device there are multiple devices attached to the kernel and I need to disconnect all of them.   This is why I was storing the devices in the\nconnection_info[\u0027data\u0027][\u0027devices\u0027] list.   The connection_info struct doesn\u0027t contain the actual device on disk that is exposed to the kernel.   Only the /dev/vdX device is stored in the connection_info, and that is basically useless.  How can I get access to the conf.source_path at disconnect_volume time?","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"c3554f51f1665130e66d761e0757e95d64c3a237","unresolved":false,"context_lines":[{"line_number":325,"context_line":"    def disconnect_volume(self, connection_info, mount_device):"},{"line_number":326,"context_line":"        \"\"\"Detach the volume from instance_name.\"\"\""},{"line_number":327,"context_line":"        sup \u003d super(LibvirtFibreChannelVolumeDriver, self)"},{"line_number":328,"context_line":"        sup.disconnect_volume(connection_info, mount_device)"},{"line_number":329,"context_line":"        devices \u003d connection_info[\u0027data\u0027][\u0027devices\u0027]"},{"line_number":330,"context_line":"        #There may have been more than 1 device mounted"},{"line_number":331,"context_line":"        #by the kernel for this volume.  We have to remove"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FMLM%3D","line":328,"updated":"2013-02-04 10:37:39.000000000","message":"Please keep a consistent style with the rest of this file, eg write these two lines as\n\n        super(LibvirtFibreChannelVolumeDriver,\n              self).disconnect_volume(connection_info, mount_device)","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"592877a5979a461be4bc8fb16a70c45e8884bb9b","unresolved":false,"context_lines":[{"line_number":325,"context_line":"    def disconnect_volume(self, connection_info, mount_device):"},{"line_number":326,"context_line":"        \"\"\"Detach the volume from instance_name.\"\"\""},{"line_number":327,"context_line":"        sup \u003d super(LibvirtFibreChannelVolumeDriver, self)"},{"line_number":328,"context_line":"        sup.disconnect_volume(connection_info, mount_device)"},{"line_number":329,"context_line":"        devices \u003d connection_info[\u0027data\u0027][\u0027devices\u0027]"},{"line_number":330,"context_line":"        #There may have been more than 1 device mounted"},{"line_number":331,"context_line":"        #by the kernel for this volume.  We have to remove"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FLE4%3D","line":328,"in_reply_to":"AAAAM3%2F%2FMLM%3D","updated":"2013-02-04 21:53:11.000000000","message":"Done","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"7b9424b1fc9c50621a214436b6a056e5d2d787a3","unresolved":false,"context_lines":[{"line_number":327,"context_line":"        sup \u003d super(LibvirtFibreChannelVolumeDriver, self)"},{"line_number":328,"context_line":"        sup.disconnect_volume(connection_info, mount_device)"},{"line_number":329,"context_line":"        devices \u003d connection_info[\u0027data\u0027][\u0027devices\u0027]"},{"line_number":330,"context_line":"        #There may have been more than 1 device mounted"},{"line_number":331,"context_line":"        #by the kernel for this volume.  We have to remove"},{"line_number":332,"context_line":"        #all of them"},{"line_number":333,"context_line":"        for device in devices:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FO3I%3D","line":330,"updated":"2013-02-01 00:40:20.000000000","message":"Again, comment should have leading space","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"380ff45763689118c3e48611c572268b3dd54012","unresolved":false,"context_lines":[{"line_number":327,"context_line":"        sup \u003d super(LibvirtFibreChannelVolumeDriver, self)"},{"line_number":328,"context_line":"        sup.disconnect_volume(connection_info, mount_device)"},{"line_number":329,"context_line":"        devices \u003d connection_info[\u0027data\u0027][\u0027devices\u0027]"},{"line_number":330,"context_line":"        #There may have been more than 1 device mounted"},{"line_number":331,"context_line":"        #by the kernel for this volume.  We have to remove"},{"line_number":332,"context_line":"        #all of them"},{"line_number":333,"context_line":"        for device in devices:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FLV8%3D","line":330,"in_reply_to":"AAAAM3%2F%2FO3I%3D","updated":"2013-02-04 19:06:59.000000000","message":"Done","commit_id":"d87c2ec8373f88fc89ff03129aa652ee33bd41d0"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"668792788a568e8536ab4e41da30491be2226b7b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2011 OpenStack LLC."},{"line_number":4,"context_line":"# Copyright (c) 2012 Hewlett-Packard, Inc."},{"line_number":5,"context_line":"# All Rights Reserved."},{"line_number":6,"context_line":"#"},{"line_number":7,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2FKJM%3D","line":4,"updated":"2013-02-05 09:44:17.000000000","message":"We\u0027re in 2013 !","commit_id":"d40dd5b0828432dfe1c07ce66bf95ee7607b4917"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"33b2cc8b7ef508e145257e75ce9630aee7abf2aa","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2011 OpenStack LLC."},{"line_number":4,"context_line":"# Copyright (c) 2012 Hewlett-Packard, Inc."},{"line_number":5,"context_line":"# All Rights Reserved."},{"line_number":6,"context_line":"#"},{"line_number":7,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2FJfA%3D","line":4,"in_reply_to":"AAAAM3%2F%2FKJM%3D","updated":"2013-02-05 16:48:52.000000000","message":"Done","commit_id":"d40dd5b0828432dfe1c07ce66bf95ee7607b4917"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"668792788a568e8536ab4e41da30491be2226b7b","unresolved":false,"context_lines":[{"line_number":357,"context_line":"    def disconnect_volume(self, connection_info, mount_device):"},{"line_number":358,"context_line":"        \"\"\"Detach the volume from instance_name.\"\"\""},{"line_number":359,"context_line":"        sup \u003d super(LibvirtFibreChannelVolumeDriver,"},{"line_number":360,"context_line":"                    self).disconnect_volume(connection_info, mount_device)"},{"line_number":361,"context_line":"        devices \u003d connection_info[\u0027data\u0027][\u0027devices\u0027]"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"        # There may have been more than 1 device mounted"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2FKJU%3D","line":360,"updated":"2013-02-05 09:44:17.000000000","message":"You can still remove the \u0027sup \u003d\u0027 assignment here","commit_id":"d40dd5b0828432dfe1c07ce66bf95ee7607b4917"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"33b2cc8b7ef508e145257e75ce9630aee7abf2aa","unresolved":false,"context_lines":[{"line_number":357,"context_line":"    def disconnect_volume(self, connection_info, mount_device):"},{"line_number":358,"context_line":"        \"\"\"Detach the volume from instance_name.\"\"\""},{"line_number":359,"context_line":"        sup \u003d super(LibvirtFibreChannelVolumeDriver,"},{"line_number":360,"context_line":"                    self).disconnect_volume(connection_info, mount_device)"},{"line_number":361,"context_line":"        devices \u003d connection_info[\u0027data\u0027][\u0027devices\u0027]"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"        # There may have been more than 1 device mounted"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2FJew%3D","line":360,"in_reply_to":"AAAAM3%2F%2FKJU%3D","updated":"2013-02-05 16:48:52.000000000","message":"Done","commit_id":"d40dd5b0828432dfe1c07ce66bf95ee7607b4917"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"668792788a568e8536ab4e41da30491be2226b7b","unresolved":false,"context_lines":[{"line_number":365,"context_line":"        # all of them"},{"line_number":366,"context_line":"        for device in devices:"},{"line_number":367,"context_line":"            linuxscsi.remove_device(device)"},{"line_number":368,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2FKJQ%3D","line":368,"updated":"2013-02-05 09:44:17.000000000","message":"No need for \u0027return None\u0027 here - this method does return any data.","commit_id":"d40dd5b0828432dfe1c07ce66bf95ee7607b4917"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"33b2cc8b7ef508e145257e75ce9630aee7abf2aa","unresolved":false,"context_lines":[{"line_number":365,"context_line":"        # all of them"},{"line_number":366,"context_line":"        for device in devices:"},{"line_number":367,"context_line":"            linuxscsi.remove_device(device)"},{"line_number":368,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2FJes%3D","line":368,"in_reply_to":"AAAAM3%2F%2FKJQ%3D","updated":"2013-02-05 16:48:52.000000000","message":"Done","commit_id":"d40dd5b0828432dfe1c07ce66bf95ee7607b4917"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"3380552d20e0acfa4f87908ea79bc7bbabbf2423","unresolved":false,"context_lines":[{"line_number":279,"context_line":"        for hba in hbas:"},{"line_number":280,"context_line":"            device_path \u003d hba[\u0027device_path\u0027].split(\u0027/\u0027)"},{"line_number":281,"context_line":"            if len(device_path) \u003e\u003d 6:"},{"line_number":282,"context_line":"                pci_num \u003d device_path[5]"},{"line_number":283,"context_line":"                for wwn in wwns:"},{"line_number":284,"context_line":"                    target_wwn \u003d \"0x%s\" % wwn.lower()"},{"line_number":285,"context_line":"                    host_device \u003d (\"/dev/disk/by-path/pci-%s-fc-%s-lun-%s\" %"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2FI38%3D","line":282,"updated":"2013-02-05 22:00:46.000000000","message":"On my system it seems that [6] is what works...?\nWhat does this depend on?","commit_id":"a082bd1c710db3b3cb3062d82f54b406f766a289"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"43ada99fb0a1a5e079318035897f6d37fdc82df3","unresolved":false,"context_lines":[{"line_number":279,"context_line":"        for hba in hbas:"},{"line_number":280,"context_line":"            device_path \u003d hba[\u0027device_path\u0027].split(\u0027/\u0027)"},{"line_number":281,"context_line":"            if len(device_path) \u003e\u003d 6:"},{"line_number":282,"context_line":"                pci_num \u003d device_path[5]"},{"line_number":283,"context_line":"                for wwn in wwns:"},{"line_number":284,"context_line":"                    target_wwn \u003d \"0x%s\" % wwn.lower()"},{"line_number":285,"context_line":"                    host_device \u003d (\"/dev/disk/by-path/pci-%s-fc-%s-lun-%s\" %"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2FIvw%3D","line":282,"in_reply_to":"AAAAM3%2F%2FI38%3D","updated":"2013-02-05 23:08:09.000000000","message":"On my box the output of \"systool -c fc_host -v\" gives me an  entry of\n\nClass Device path \u003d \"/sys/devices/pci0000:00/0000:00:03.0/0000:05:00.2/host1/fc_host/host1\"\n\nwhich translates into device_path being\n\n[\u0027\u0027,\n \u0027sys\u0027,\n \u0027devices\u0027,\n \u0027pci0000:00\u0027,\n \u00270000:00:03.0\u0027,\n \u00270000:05:00.2\u0027,\n \u0027host1\u0027,\n \u0027fc_host\u0027,\n \u0027host1\u0027]","commit_id":"a082bd1c710db3b3cb3062d82f54b406f766a289"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ea4ee89e24280fa461053432833d916cede65e21","unresolved":false,"context_lines":[{"line_number":279,"context_line":"        for hba in hbas:"},{"line_number":280,"context_line":"            device_path \u003d hba[\u0027device_path\u0027].split(\u0027/\u0027)"},{"line_number":281,"context_line":"            if len(device_path) \u003e\u003d 6:"},{"line_number":282,"context_line":"                pci_num \u003d device_path[5]"},{"line_number":283,"context_line":"                for wwn in wwns:"},{"line_number":284,"context_line":"                    target_wwn \u003d \"0x%s\" % wwn.lower()"},{"line_number":285,"context_line":"                    host_device \u003d (\"/dev/disk/by-path/pci-%s-fc-%s-lun-%s\" %"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2FGtc%3D","line":282,"in_reply_to":"AAAAM3%2F%2FIRM%3D","updated":"2013-02-07 00:23:07.000000000","message":"I\u0027ve changed the algorithm for finding the needed pci_num in the next patch.   I also added a unit test for our 2 cases.","commit_id":"a082bd1c710db3b3cb3062d82f54b406f766a289"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"a6d51b886276b4468bb0954663ac4884a1fbe88a","unresolved":false,"context_lines":[{"line_number":279,"context_line":"        for hba in hbas:"},{"line_number":280,"context_line":"            device_path \u003d hba[\u0027device_path\u0027].split(\u0027/\u0027)"},{"line_number":281,"context_line":"            if len(device_path) \u003e\u003d 6:"},{"line_number":282,"context_line":"                pci_num \u003d device_path[5]"},{"line_number":283,"context_line":"                for wwn in wwns:"},{"line_number":284,"context_line":"                    target_wwn \u003d \"0x%s\" % wwn.lower()"},{"line_number":285,"context_line":"                    host_device \u003d (\"/dev/disk/by-path/pci-%s-fc-%s-lun-%s\" %"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2FIRM%3D","line":282,"in_reply_to":"AAAAM3%2F%2FIvw%3D","updated":"2013-02-06 06:04:20.000000000","message":"I get:\n\nClass Device path \u003d \"/sys/devices/pci0000:00/0000:00:02.0/0000:07:00.3/0000:08:01.1/host16/fc_host/host16\"\n\nAn example of a disk path:\n\n/dev/disk/by-path/pci-0000\\:08\\:01.1-fc-0x500507680230ae70-lun-0\n\nSo we want \"0000:08:01.1\" in this case, which is 6 by me?","commit_id":"a082bd1c710db3b3cb3062d82f54b406f766a289"},{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"0408da19888ef8235b331140e4568e126c6e9012","unresolved":false,"context_lines":[{"line_number":330,"context_line":"    \"\"\"Driver to attach Fibre Channel Network volumes to libvirt.\"\"\""},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    def __init__(self, connection):"},{"line_number":333,"context_line":"        super(LibvirtFibreChannelVolumeDriver,"},{"line_number":334,"context_line":"              self).__init__(connection, is_block_dev\u003dFalse)"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    def _get_pci_num(self, hba):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FGY8%3D","line":333,"updated":"2013-02-07 02:57:54.000000000","message":"Would it make sense to check if the commands that will be used by this driver is available in the system and warn the user otherwise?","commit_id":"888f327a58505010631e9f6669651c43d1b4f67a"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"bdbc12ac09a33a64e1a993375602d9fdb982e8cb","unresolved":false,"context_lines":[{"line_number":330,"context_line":"    \"\"\"Driver to attach Fibre Channel Network volumes to libvirt.\"\"\""},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    def __init__(self, connection):"},{"line_number":333,"context_line":"        super(LibvirtFibreChannelVolumeDriver,"},{"line_number":334,"context_line":"              self).__init__(connection, is_block_dev\u003dFalse)"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    def _get_pci_num(self, hba):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FGV8%3D","line":333,"in_reply_to":"AAAAM3%2F%2FGY8%3D","updated":"2013-02-07 16:51:05.000000000","message":"Correct, we don\u0027t do that for the other drivers, namely iscsi.  We notify the user if the commands we are calling fail, when we call them.","commit_id":"888f327a58505010631e9f6669651c43d1b4f67a"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"273fcd42b4df9764faebe481ccf38d895c7a5841","unresolved":false,"context_lines":[{"line_number":330,"context_line":"    \"\"\"Driver to attach Fibre Channel Network volumes to libvirt.\"\"\""},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    def __init__(self, connection):"},{"line_number":333,"context_line":"        super(LibvirtFibreChannelVolumeDriver,"},{"line_number":334,"context_line":"              self).__init__(connection, is_block_dev\u003dFalse)"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    def _get_pci_num(self, hba):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FGUQ%3D","line":333,"in_reply_to":"AAAAM3%2F%2FGY8%3D","updated":"2013-02-07 04:25:41.000000000","message":"I don\u0027t think we do that for anything else? The command failure will get logged if the command is missing, right?","commit_id":"888f327a58505010631e9f6669651c43d1b4f67a"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"273fcd42b4df9764faebe481ccf38d895c7a5841","unresolved":false,"context_lines":[{"line_number":420,"context_line":"        self.device_name \u003d None"},{"line_number":421,"context_line":"        self.tries \u003d 0"},{"line_number":422,"context_line":"        timer \u003d utils.FixedIntervalLoopingCall(_wait_for_device_discovery,"},{"line_number":423,"context_line":"                                               host_devices, mount_device)"},{"line_number":424,"context_line":"        timer.start(interval\u003d2).wait()"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"        tries \u003d self.tries"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FGUI%3D","line":423,"updated":"2013-02-07 04:25:41.000000000","message":"Need to indent this more.","commit_id":"888f327a58505010631e9f6669651c43d1b4f67a"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"ed33000361966b16f86d4566d5ff4db04882cc1a","unresolved":false,"context_lines":[{"line_number":339,"context_line":"        # /sys/devices/pci0000:00/0000:00:03.0/0000:05:00.3/host2/fc_host/host2"},{"line_number":340,"context_line":"        # sometimes an extra entry exists before the host2 value"},{"line_number":341,"context_line":"        # we always want the value prior to the host2 value"},{"line_number":342,"context_line":"        pci_num \u003d None"},{"line_number":343,"context_line":"        if hba is not None:"},{"line_number":344,"context_line":"            if \"device_path\" in hba:"},{"line_number":345,"context_line":"                index \u003d 0"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FCsA%3D","line":342,"updated":"2013-02-09 17:18:42.000000000","message":"have you considered using pythons udev to get this information?","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"09eea3e8967675a1a396b6eecab73370e9fecc68","unresolved":false,"context_lines":[{"line_number":339,"context_line":"        # /sys/devices/pci0000:00/0000:00:03.0/0000:05:00.3/host2/fc_host/host2"},{"line_number":340,"context_line":"        # sometimes an extra entry exists before the host2 value"},{"line_number":341,"context_line":"        # we always want the value prior to the host2 value"},{"line_number":342,"context_line":"        pci_num \u003d None"},{"line_number":343,"context_line":"        if hba is not None:"},{"line_number":344,"context_line":"            if \"device_path\" in hba:"},{"line_number":345,"context_line":"                index \u003d 0"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2B%2FRg%3D","line":342,"in_reply_to":"AAAAM3%2F%2FAPk%3D","updated":"2013-02-12 11:31:29.000000000","message":"Sure.","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"6cfc7bdb7c925904b75ebd4d6c9c9b1e57d063f3","unresolved":false,"context_lines":[{"line_number":339,"context_line":"        # /sys/devices/pci0000:00/0000:00:03.0/0000:05:00.3/host2/fc_host/host2"},{"line_number":340,"context_line":"        # sometimes an extra entry exists before the host2 value"},{"line_number":341,"context_line":"        # we always want the value prior to the host2 value"},{"line_number":342,"context_line":"        pci_num \u003d None"},{"line_number":343,"context_line":"        if hba is not None:"},{"line_number":344,"context_line":"            if \"device_path\" in hba:"},{"line_number":345,"context_line":"                index \u003d 0"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FAPk%3D","line":342,"in_reply_to":"AAAAM3%2F%2FCsA%3D","updated":"2013-02-11 21:51:41.000000000","message":"Is it possible to revisit this in H release?   This code currently works on several test beds and we have many drivers in cinder that are waiting on this to drop in Nova.","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"},{"author":{"_account_id":4141,"name":"Boris Fiuczynski","email":"boris_fiuczynski@de.ibm.com","username":"boris-fiuczynski"},"change_message_id":"cab74f3229acc86c7d28d9827f49c05df1a9b665","unresolved":false,"context_lines":[{"line_number":369,"context_line":"        elif isinstance(ports, str):"},{"line_number":370,"context_line":"            wwns.append(ports)"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"        # We need to look for wwns on every hba"},{"line_number":373,"context_line":"        # because we don\u0027t know ahead of time"},{"line_number":374,"context_line":"        # where they will show up."},{"line_number":375,"context_line":"        hbas \u003d virtutils.get_fc_hbas_info()"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FDvQ%3D","line":372,"updated":"2013-02-11 11:29:02.000000000","message":"From this line until line 431 the code is not hba bus type generic but pci specific. If a generic approach is not possible than please provided an interface that other bus types can plug into providing their own comparisons.\nHere is a try to outline a generic solution:\n\tloop over /sys/bus/scsi/devices/*:*:*:*  (wildecards in order scsi_host:scsi_channel:scsi_target:scsi_lun\n\t\tloop over /sys/class/fc_remote_ports/rport-*:*-*/port_name (wildcards in order scsi_host:scsi_channel-scsi_target)\n\t\t\tmatch \u0027cat port_name\u0027 with wwn in wwns\n\t\t\tif match found \n\t\t\t\tloop over fcp luns \u003c\u003d Take scsi_lun (last * from above) calc like kernel function int_to_scsilun and append with 8 zero digits.\n\t\t\t\t\tmatch with target_lun in target_luns (from connection_info)\n\t\t\t\t\tif match iterate linuxscsi.get_device_info and match with *:*:*:* to get \u0027device\u0027 \u003d\u003e /dev/sdXYZ\n\t\t\t\t\t\tassign /dev/sdXYZ to self.device_name\n\t\t\t\t\t\traise utils.LoopingCallDone()\n\tkeep same rescan_hosts code and retry","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"467dd6bd6c61c4b142ffb34faf9969d107c91df2","unresolved":false,"context_lines":[{"line_number":369,"context_line":"        elif isinstance(ports, str):"},{"line_number":370,"context_line":"            wwns.append(ports)"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"        # We need to look for wwns on every hba"},{"line_number":373,"context_line":"        # because we don\u0027t know ahead of time"},{"line_number":374,"context_line":"        # where they will show up."},{"line_number":375,"context_line":"        hbas \u003d virtutils.get_fc_hbas_info()"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2B53M%3D","line":372,"in_reply_to":"AAAAM3%2F%2B7HM%3D","updated":"2013-02-14 22:37:28.000000000","message":"I don\u0027t believe this is a strong enough requirement for Grizzly.   Remember, this is the first release of FC supporting a small set of HBA hardware on PCI only.","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"},{"author":{"_account_id":4141,"name":"Boris Fiuczynski","email":"boris_fiuczynski@de.ibm.com","username":"boris-fiuczynski"},"change_message_id":"6da31187752f42f753791d5fe0e3cb0b95327603","unresolved":false,"context_lines":[{"line_number":369,"context_line":"        elif isinstance(ports, str):"},{"line_number":370,"context_line":"            wwns.append(ports)"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"        # We need to look for wwns on every hba"},{"line_number":373,"context_line":"        # because we don\u0027t know ahead of time"},{"line_number":374,"context_line":"        # where they will show up."},{"line_number":375,"context_line":"        hbas \u003d virtutils.get_fc_hbas_info()"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2B7HM%3D","line":372,"in_reply_to":"AAAAM3%2F%2B8g4%3D","updated":"2013-02-14 22:25:50.000000000","message":"It would really be nice if FCP would be separated from PCI. OpenStack should in my opinion not have bus type specific drivers but instead try to have as much common code as possible. Could you at least try to have connect_volume implement the common pattern and the bus type specific code is plugged in with an e.g. interface or via a config setting? I also think that following garyk\u0027s suggestion on line 342 also would improve generics with regard to bus types.","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"23c56c97da0df98e5e5587ed50335914e11a6649","unresolved":false,"context_lines":[{"line_number":369,"context_line":"        elif isinstance(ports, str):"},{"line_number":370,"context_line":"            wwns.append(ports)"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"        # We need to look for wwns on every hba"},{"line_number":373,"context_line":"        # because we don\u0027t know ahead of time"},{"line_number":374,"context_line":"        # where they will show up."},{"line_number":375,"context_line":"        hbas \u003d virtutils.get_fc_hbas_info()"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2B8g4%3D","line":372,"in_reply_to":"AAAAM3%2F%2FBKs%3D","updated":"2013-02-13 17:47:55.000000000","message":"This code has been tested against several HBA cards and against existing and pending FC cinder volume drivers and it works.   We only need to detect one of the possible devices and then multipath takes care of the rest.   I\u0027d rather not change this code this late in the game unless it\u0027s proven to not work with existing cinder volume drivers and supported HBAs.   We are not going to support every HBA card for Grizzly.  If we find bugs against a particular HBA post Grizzly, we can revisit this.","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"},{"author":{"_account_id":4141,"name":"Boris Fiuczynski","email":"boris_fiuczynski@de.ibm.com","username":"boris-fiuczynski"},"change_message_id":"d5e7e90fe404fb959b711557aef0c66f908db378","unresolved":false,"context_lines":[{"line_number":369,"context_line":"        elif isinstance(ports, str):"},{"line_number":370,"context_line":"            wwns.append(ports)"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"        # We need to look for wwns on every hba"},{"line_number":373,"context_line":"        # because we don\u0027t know ahead of time"},{"line_number":374,"context_line":"        # where they will show up."},{"line_number":375,"context_line":"        hbas \u003d virtutils.get_fc_hbas_info()"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FBKs%3D","line":372,"in_reply_to":"AAAAM3%2F%2FDvQ%3D","updated":"2013-02-11 15:15:16.000000000","message":"Actually the second and third loop can be replaced with following the pattern described here: http://cgit.freedesktop.org/systemd/systemd/tree/src/udev/udev-builtin-path_id.c#n94","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"},{"author":{"_account_id":4141,"name":"Boris Fiuczynski","email":"boris_fiuczynski@de.ibm.com","username":"boris-fiuczynski"},"change_message_id":"cab74f3229acc86c7d28d9827f49c05df1a9b665","unresolved":false,"context_lines":[{"line_number":382,"context_line":"                    host_device \u003d (\"/dev/disk/by-path/pci-%s-fc-%s-lun-%s\" %"},{"line_number":383,"context_line":"                                  (pci_num,"},{"line_number":384,"context_line":"                                   target_wwn,"},{"line_number":385,"context_line":"                                   fc_properties.get(\u0027target_lun\u0027, 0)))"},{"line_number":386,"context_line":"                    host_devices.append(host_device)"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"        if len(host_devices) \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FD08%3D","line":385,"updated":"2013-02-11 11:29:02.000000000","message":"Actually here is a design flaw because storage targets do not need to use the same fcp lun for every path to the same exported disk. Hence we would need to be able to specify a target_lun for every target_wnn.","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"467dd6bd6c61c4b142ffb34faf9969d107c91df2","unresolved":false,"context_lines":[{"line_number":382,"context_line":"                    host_device \u003d (\"/dev/disk/by-path/pci-%s-fc-%s-lun-%s\" %"},{"line_number":383,"context_line":"                                  (pci_num,"},{"line_number":384,"context_line":"                                   target_wwn,"},{"line_number":385,"context_line":"                                   fc_properties.get(\u0027target_lun\u0027, 0)))"},{"line_number":386,"context_line":"                    host_devices.append(host_device)"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"        if len(host_devices) \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2B53E%3D","line":385,"in_reply_to":"AAAAM3%2F%2B7IU%3D","updated":"2013-02-14 22:37:28.000000000","message":"No it doesn\u0027t require it.  We simply populate a list to try and find the first device, the rest in the list is then never used/needed.","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"},{"author":{"_account_id":4141,"name":"Boris Fiuczynski","email":"boris_fiuczynski@de.ibm.com","username":"boris-fiuczynski"},"change_message_id":"6da31187752f42f753791d5fe0e3cb0b95327603","unresolved":false,"context_lines":[{"line_number":382,"context_line":"                    host_device \u003d (\"/dev/disk/by-path/pci-%s-fc-%s-lun-%s\" %"},{"line_number":383,"context_line":"                                  (pci_num,"},{"line_number":384,"context_line":"                                   target_wwn,"},{"line_number":385,"context_line":"                                   fc_properties.get(\u0027target_lun\u0027, 0)))"},{"line_number":386,"context_line":"                    host_devices.append(host_device)"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"        if len(host_devices) \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2B7IU%3D","line":385,"in_reply_to":"AAAAM3%2F%2B8g0%3D","updated":"2013-02-14 22:25:50.000000000","message":"Your code inserts for every found hba the same target_lun. That is actually a special case. In general you require for every target_wwn an associated target_lun and every target_wwn can have a different target_lun. Your code and the design seems to require that every target_wwn MUST have the same target_lun.","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"23c56c97da0df98e5e5587ed50335914e11a6649","unresolved":false,"context_lines":[{"line_number":382,"context_line":"                    host_device \u003d (\"/dev/disk/by-path/pci-%s-fc-%s-lun-%s\" %"},{"line_number":383,"context_line":"                                  (pci_num,"},{"line_number":384,"context_line":"                                   target_wwn,"},{"line_number":385,"context_line":"                                   fc_properties.get(\u0027target_lun\u0027, 0)))"},{"line_number":386,"context_line":"                    host_devices.append(host_device)"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"        if len(host_devices) \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2B8g0%3D","line":385,"in_reply_to":"AAAAM3%2F%2FD08%3D","updated":"2013-02-13 17:47:55.000000000","message":"We only need to find the first one, we don\u0027t need all of them.","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"},{"author":{"_account_id":4141,"name":"Boris Fiuczynski","email":"boris_fiuczynski@de.ibm.com","username":"boris-fiuczynski"},"change_message_id":"cab74f3229acc86c7d28d9827f49c05df1a9b665","unresolved":false,"context_lines":[{"line_number":405,"context_line":"                    self.device_name \u003d os.path.realpath(device)"},{"line_number":406,"context_line":"                    raise utils.LoopingCallDone()"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"            if self.tries \u003e\u003d CONF.num_iscsi_scan_tries:"},{"line_number":409,"context_line":"                msg \u003d _(\"Fibre Channel device not found.\")"},{"line_number":410,"context_line":"                raise exception.NovaException(msg)"},{"line_number":411,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2FD%2Bs%3D","line":408,"updated":"2013-02-11 11:29:02.000000000","message":"Is it ok to (re)use iscsi attributes in the fcp pattern?","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"23c56c97da0df98e5e5587ed50335914e11a6649","unresolved":false,"context_lines":[{"line_number":405,"context_line":"                    self.device_name \u003d os.path.realpath(device)"},{"line_number":406,"context_line":"                    raise utils.LoopingCallDone()"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"            if self.tries \u003e\u003d CONF.num_iscsi_scan_tries:"},{"line_number":409,"context_line":"                msg \u003d _(\"Fibre Channel device not found.\")"},{"line_number":410,"context_line":"                raise exception.NovaException(msg)"},{"line_number":411,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2B8gs%3D","line":408,"in_reply_to":"AAAAM3%2F%2FD%2Bs%3D","updated":"2013-02-13 17:47:55.000000000","message":"ok I\u0027ll add a new conf item for num_fc_scan_tries","commit_id":"ca7e2c981d77e1f2fb029117102e4e1f0bb7398c"}]}
