)]}'
{"os_brick/initiator/connectors/iscsi.py":[{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"c2a05f2698c51b77ca6548adc0eec1ff35d8741b","unresolved":false,"context_lines":[{"line_number":569,"context_line":"        # - All connection attempts have finished and none has logged in"},{"line_number":570,"context_line":"        # - Multipath has been found and connection attempts have either"},{"line_number":571,"context_line":"        #   finished or have already logged in"},{"line_number":572,"context_line":"        # - We have finished in all threads, logged in, found some device, and"},{"line_number":573,"context_line":"        #   5 seconds have passed."},{"line_number":574,"context_line":"        while not ((len(ips_iqns_luns) \u003d\u003d data[\u0027stopped_threads\u0027] and"},{"line_number":575,"context_line":"                    not data[\u0027num_logins\u0027]) or"},{"line_number":576,"context_line":"                   (mpath and len(ips_iqns_luns) \u003d\u003d data[\u0027num_logins\u0027] +"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_3d6241d9","line":573,"range":{"start_line":572,"start_character":74,"end_line":573,"end_character":34},"updated":"2017-04-11 21:41:56.000000000","message":"Where is the 5 seconds coming from?","commit_id":"5e849c885c5b371ba36023a3decfc0dface6cb30"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"56a792ea32d2e2b2b1f05186b3afb5d005a4ed35","unresolved":false,"context_lines":[{"line_number":569,"context_line":"        # - All connection attempts have finished and none has logged in"},{"line_number":570,"context_line":"        # - Multipath has been found and connection attempts have either"},{"line_number":571,"context_line":"        #   finished or have already logged in"},{"line_number":572,"context_line":"        # - We have finished in all threads, logged in, found some device, and"},{"line_number":573,"context_line":"        #   5 seconds have passed."},{"line_number":574,"context_line":"        while not ((len(ips_iqns_luns) \u003d\u003d data[\u0027stopped_threads\u0027] and"},{"line_number":575,"context_line":"                    not data[\u0027num_logins\u0027]) or"},{"line_number":576,"context_line":"                   (mpath and len(ips_iqns_luns) \u003d\u003d data[\u0027num_logins\u0027] +"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_10a4f7b8","line":573,"range":{"start_line":572,"start_character":74,"end_line":573,"end_character":34},"in_reply_to":"bff0334d_3d6241d9","updated":"2017-04-12 06:56:37.000000000","message":"Oh, it\u0027s 10 seconds now, will update the patch.  This time comes from my testings, with no error rate the mean time from login to having a DM is 1.21 seconds, and the standard deviation is 0.1 seconds, but with a 10% error rate we go up to 8.15 seconds and a standard deviation of 1.56 seconds, so I decided to give it 10 seconds to make sure that we would still detect a DM with a 10% network incomming packet drop.","commit_id":"5e849c885c5b371ba36023a3decfc0dface6cb30"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"c2a05f2698c51b77ca6548adc0eec1ff35d8741b","unresolved":false,"context_lines":[{"line_number":586,"context_line":"                    # multipathd to recheck all the devices we have just"},{"line_number":587,"context_line":"                    # connected.  We only do this once, since for any new"},{"line_number":588,"context_line":"                    # device multipathd will already know it is a multipath."},{"line_number":589,"context_line":"                    wwn_added \u003d self._linuxscsi.multipath_add_wwid(wwn)"},{"line_number":590,"context_line":"                    while not mpath and just_added_devices:"},{"line_number":591,"context_line":"                        device_path \u003d \u0027/dev/\u0027 + just_added_devices.pop(0)"},{"line_number":592,"context_line":"                        self._linuxscsi.multipath_add_path(device_path)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_5d48652b","line":589,"updated":"2017-04-11 21:41:56.000000000","message":"Does this play nicely with the \"find_multipaths\" option that will make it so you get a mapper device for the first volume path?","commit_id":"5e849c885c5b371ba36023a3decfc0dface6cb30"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"56a792ea32d2e2b2b1f05186b3afb5d005a4ed35","unresolved":false,"context_lines":[{"line_number":586,"context_line":"                    # multipathd to recheck all the devices we have just"},{"line_number":587,"context_line":"                    # connected.  We only do this once, since for any new"},{"line_number":588,"context_line":"                    # device multipathd will already know it is a multipath."},{"line_number":589,"context_line":"                    wwn_added \u003d self._linuxscsi.multipath_add_wwid(wwn)"},{"line_number":590,"context_line":"                    while not mpath and just_added_devices:"},{"line_number":591,"context_line":"                        device_path \u003d \u0027/dev/\u0027 + just_added_devices.pop(0)"},{"line_number":592,"context_line":"                        self._linuxscsi.multipath_add_path(device_path)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_d081efc4","line":589,"in_reply_to":"bff0334d_5d48652b","updated":"2017-04-12 06:56:37.000000000","message":"It looks like it does, regardless of whether find_multipaths is set to yes or no, and it makes sense, because all this really does is telling multipath to add the WWID to /etc/multipath/wwids if it\u0027s not already there, and with find_multipaths set to yes it will not be there, and with it set to no it will be there, so no harm.\n\nI\u0027ll update the comment to mention that it only helps when it\u0027s set to yes and it doesn\u0027t harm when set to no.","commit_id":"5e849c885c5b371ba36023a3decfc0dface6cb30"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"c2a05f2698c51b77ca6548adc0eec1ff35d8741b","unresolved":false,"context_lines":[{"line_number":608,"context_line":"        if not data[\u0027found_devices\u0027]:"},{"line_number":609,"context_line":"            raise exception.VolumeDeviceNotFound(device\u003d\u0027\u0027)"},{"line_number":610,"context_line":""},{"line_number":611,"context_line":"        # NOTE(geguileo): If we cannot find the dm it\u0027s because all paths are"},{"line_number":612,"context_line":"        # really bad, so we might as well raise a not found exception, but"},{"line_number":613,"context_line":"        # in our best effort we\u0027ll return a device even if it\u0027s probably"},{"line_number":614,"context_line":"        # useless."},{"line_number":615,"context_line":"        if not mpath:"},{"line_number":616,"context_line":"            LOG.warning(\u0027No dm was created, connection to volume is probably \u0027"},{"line_number":617,"context_line":"                        \u0027bad and will perform poorly.\u0027)"},{"line_number":618,"context_line":"            return {\u0027type\u0027: \u0027block\u0027, \u0027scsi_wwn\u0027: wwn,"},{"line_number":619,"context_line":"                    \u0027path\u0027: \u0027/dev/\u0027 + data[\u0027found_devices\u0027][0]}"},{"line_number":620,"context_line":"        return {\u0027type\u0027: \u0027block\u0027, \u0027scsi_wwn\u0027: wwn, \u0027multipath_id\u0027: mpath,"},{"line_number":621,"context_line":"                \u0027path\u0027: \u0027/dev/\u0027 + mpath}"},{"line_number":622,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_7d80c9f5","line":619,"range":{"start_line":611,"start_character":8,"end_line":619,"end_character":63},"updated":"2017-04-11 21:41:56.000000000","message":"+1 for just failing the attachment with a not found exception. Using the single path device when expecting a highly available one is just asking for trouble (something like, someone expects to be able to pull a redundant controller on the array, or cable on the node for maintenance and VM\u0027s crash that shouldn\u0027t have.\n\n\nI would be less concerned except there is no recovery path back to a multipath device once attached to the VM if any paths recover later on.\n\n\nA user would be better off having the attach fail, or reschedule booting the vm/volume from the error.","commit_id":"5e849c885c5b371ba36023a3decfc0dface6cb30"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"7f513fca7e3a0c0a7733daf50d38d20b3b2e4859","unresolved":false,"context_lines":[{"line_number":608,"context_line":"        if not data[\u0027found_devices\u0027]:"},{"line_number":609,"context_line":"            raise exception.VolumeDeviceNotFound(device\u003d\u0027\u0027)"},{"line_number":610,"context_line":""},{"line_number":611,"context_line":"        # NOTE(geguileo): If we cannot find the dm it\u0027s because all paths are"},{"line_number":612,"context_line":"        # really bad, so we might as well raise a not found exception, but"},{"line_number":613,"context_line":"        # in our best effort we\u0027ll return a device even if it\u0027s probably"},{"line_number":614,"context_line":"        # useless."},{"line_number":615,"context_line":"        if not mpath:"},{"line_number":616,"context_line":"            LOG.warning(\u0027No dm was created, connection to volume is probably \u0027"},{"line_number":617,"context_line":"                        \u0027bad and will perform poorly.\u0027)"},{"line_number":618,"context_line":"            return {\u0027type\u0027: \u0027block\u0027, \u0027scsi_wwn\u0027: wwn,"},{"line_number":619,"context_line":"                    \u0027path\u0027: \u0027/dev/\u0027 + data[\u0027found_devices\u0027][0]}"},{"line_number":620,"context_line":"        return {\u0027type\u0027: \u0027block\u0027, \u0027scsi_wwn\u0027: wwn, \u0027multipath_id\u0027: mpath,"},{"line_number":621,"context_line":"                \u0027path\u0027: \u0027/dev/\u0027 + mpath}"},{"line_number":622,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_606599b4","line":619,"range":{"start_line":611,"start_character":8,"end_line":619,"end_character":63},"in_reply_to":"bff0334d_50fcbf3c","updated":"2017-04-12 18:48:49.000000000","message":"I lean towards the error. I think that the consequences of having a single path issue later on (either perf problem or the connection breaking) is worse than just failing the attach. They are also more subtle and hard to notice... would you rather get a bug for a failed attachment where the log says it couldn\u0027t find the multipath device, or a bug for a VM crashing days or weeks after booting because the single path went down as they did some theoretically non-disruptive maintenance on the SAN somewhere?","commit_id":"5e849c885c5b371ba36023a3decfc0dface6cb30"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"56a792ea32d2e2b2b1f05186b3afb5d005a4ed35","unresolved":false,"context_lines":[{"line_number":608,"context_line":"        if not data[\u0027found_devices\u0027]:"},{"line_number":609,"context_line":"            raise exception.VolumeDeviceNotFound(device\u003d\u0027\u0027)"},{"line_number":610,"context_line":""},{"line_number":611,"context_line":"        # NOTE(geguileo): If we cannot find the dm it\u0027s because all paths are"},{"line_number":612,"context_line":"        # really bad, so we might as well raise a not found exception, but"},{"line_number":613,"context_line":"        # in our best effort we\u0027ll return a device even if it\u0027s probably"},{"line_number":614,"context_line":"        # useless."},{"line_number":615,"context_line":"        if not mpath:"},{"line_number":616,"context_line":"            LOG.warning(\u0027No dm was created, connection to volume is probably \u0027"},{"line_number":617,"context_line":"                        \u0027bad and will perform poorly.\u0027)"},{"line_number":618,"context_line":"            return {\u0027type\u0027: \u0027block\u0027, \u0027scsi_wwn\u0027: wwn,"},{"line_number":619,"context_line":"                    \u0027path\u0027: \u0027/dev/\u0027 + data[\u0027found_devices\u0027][0]}"},{"line_number":620,"context_line":"        return {\u0027type\u0027: \u0027block\u0027, \u0027scsi_wwn\u0027: wwn, \u0027multipath_id\u0027: mpath,"},{"line_number":621,"context_line":"                \u0027path\u0027: \u0027/dev/\u0027 + mpath}"},{"line_number":622,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_50fcbf3c","line":619,"range":{"start_line":611,"start_character":8,"end_line":619,"end_character":63},"in_reply_to":"bff0334d_7d80c9f5","updated":"2017-04-12 06:56:37.000000000","message":"I would normally agree, but if we fail here instead of just giving a warning I fear I\u0027ll be getting customer cases of people saying \"Why is OS-Brick failing? I can ping the backend, so the network is not the problem, it\u0027s OS-Brick that fails\", so I chose to go with the best effort approach.\n\nI am OK changing this to failure and just saying that the connection is no good.","commit_id":"5e849c885c5b371ba36023a3decfc0dface6cb30"}],"os_brick/initiator/linuxscsi.py":[{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"c2a05f2698c51b77ca6548adc0eec1ff35d8741b","unresolved":false,"context_lines":[{"line_number":226,"context_line":"            try:"},{"line_number":227,"context_line":"                self.wait_for_volumes_removal(devices_names)"},{"line_number":228,"context_line":"            finally:"},{"line_number":229,"context_line":"                # Since we use /dev/disk/by-id/wwn- links to get the wwn we"},{"line_number":230,"context_line":"                # must ensure they are always removed."},{"line_number":231,"context_line":"                self._remove_wwn_symlinks(devices_names)"},{"line_number":232,"context_line":"        return multipath_name"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    def _remove_wwn_symlinks(self, devices_names):"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_204e9837","line":231,"range":{"start_line":229,"start_character":15,"end_line":231,"end_character":56},"updated":"2017-04-11 21:41:56.000000000","message":"Looks it is is using /dev/disk/by-id/scsi- links?","commit_id":"5e849c885c5b371ba36023a3decfc0dface6cb30"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"56a792ea32d2e2b2b1f05186b3afb5d005a4ed35","unresolved":false,"context_lines":[{"line_number":226,"context_line":"            try:"},{"line_number":227,"context_line":"                self.wait_for_volumes_removal(devices_names)"},{"line_number":228,"context_line":"            finally:"},{"line_number":229,"context_line":"                # Since we use /dev/disk/by-id/wwn- links to get the wwn we"},{"line_number":230,"context_line":"                # must ensure they are always removed."},{"line_number":231,"context_line":"                self._remove_wwn_symlinks(devices_names)"},{"line_number":232,"context_line":"        return multipath_name"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    def _remove_wwn_symlinks(self, devices_names):"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_1034f7fa","line":231,"range":{"start_line":229,"start_character":15,"end_line":231,"end_character":56},"in_reply_to":"bff0334d_204e9837","updated":"2017-04-12 06:56:37.000000000","message":"Yes, good catch!! I\u0027ll update it.  I had to change it because the \"wwn-\" link didn\u0027t include the identifier type, only the identifier itself, and scsdi_id (that is used by udev and multipathd) prepends the type to the identifier when returning page 0x83, so we need the WWN with that info.  :-(","commit_id":"5e849c885c5b371ba36023a3decfc0dface6cb30"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"a94d66325f52f76cbe64da86d251a83dc23272cb","unresolved":false,"context_lines":[{"line_number":124,"context_line":"                        return wwn_path[len(glob_str):]"},{"line_number":125,"context_line":"            except OSError:"},{"line_number":126,"context_line":"                continue"},{"line_number":127,"context_line":"        return \u0027\u0027"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def get_sysfs_wwid(self, device_names):"},{"line_number":130,"context_line":"        \"\"\"Return the wwid from sysfs in any of devices in udev format.\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"7ffa3b31_5a4d52c2","line":127,"updated":"2017-04-19 22:50:28.000000000","message":"why is this better than simply reading the wwn/id from the standard scsi  page on the volume itself?  re: scsi_id   \n\nWe could have thousands of entries in the /dev/disk/by-id/* directory depending on how many paths are created per attach.","commit_id":"299c3d5c2a7b790a805701328638961dacbd64cc"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0654d7eab8bed477e6248d1dcf63180fd6d132ee","unresolved":false,"context_lines":[{"line_number":124,"context_line":"                        return wwn_path[len(glob_str):]"},{"line_number":125,"context_line":"            except OSError:"},{"line_number":126,"context_line":"                continue"},{"line_number":127,"context_line":"        return \u0027\u0027"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def get_sysfs_wwid(self, device_names):"},{"line_number":130,"context_line":"        \"\"\"Return the wwid from sysfs in any of devices in udev format.\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"7ffa3b31_a6976e48","line":127,"in_reply_to":"7ffa3b31_5a4d52c2","updated":"2017-04-21 08:42:11.000000000","message":"Calling scsi_id implies making a socket call to privsep, creating a subprocess to make the call, making a SCSI request, sending that through iSCSI, waiting for the response, and sending the data back through a pipe.\n\nI believe this process is longer, but that\u0027s not the important part, the real reasons why this is better are:\n\n- When network connection is not great this may take a long time.\n- If path goes down this will fail and we won\u0027t get a wwn for that device (we will have to keep checking the others).\n- Since privsep can only process 1 call at a time (it serializes all request and cannot proccess more that 1 in parallel) if this takes a long time, or even a little bit, it will delay any other privsep calls we try to make.","commit_id":"299c3d5c2a7b790a805701328638961dacbd64cc"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"a94d66325f52f76cbe64da86d251a83dc23272cb","unresolved":false,"context_lines":[{"line_number":229,"context_line":"            finally:"},{"line_number":230,"context_line":"                # Since we use /dev/disk/by-id/scsi- links to get the wwn we"},{"line_number":231,"context_line":"                # must ensure they are always removed."},{"line_number":232,"context_line":"                self._remove_scsi_symlinks(devices_names)"},{"line_number":233,"context_line":"        return multipath_name"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    def _remove_scsi_symlinks(self, devices_names):"}],"source_content_type":"text/x-python","patch_set":8,"id":"7ffa3b31_1a7b4af5","line":232,"updated":"2017-04-19 22:50:28.000000000","message":"I think this is dangerous to be removing dev mapper created links.   If dev mapper isn\u0027t removing those links when the volume is removed, then we have bigger problems elsewhere.   I\u0027m not sure we should be doing this.","commit_id":"299c3d5c2a7b790a805701328638961dacbd64cc"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0654d7eab8bed477e6248d1dcf63180fd6d132ee","unresolved":false,"context_lines":[{"line_number":229,"context_line":"            finally:"},{"line_number":230,"context_line":"                # Since we use /dev/disk/by-id/scsi- links to get the wwn we"},{"line_number":231,"context_line":"                # must ensure they are always removed."},{"line_number":232,"context_line":"                self._remove_scsi_symlinks(devices_names)"},{"line_number":233,"context_line":"        return multipath_name"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    def _remove_scsi_symlinks(self, devices_names):"}],"source_content_type":"text/x-python","patch_set":8,"id":"7ffa3b31_c6e83ab4","line":232,"in_reply_to":"7ffa3b31_1a7b4af5","updated":"2017-04-21 08:42:11.000000000","message":"I have seen scsi- links leftover in the system, and since we are relying on them pointing to the right device to get the wwn it\u0027s important to be sure that in no case we have this left behind.\n\nAs for removing it ourselves, it is not a problem, since our removal will not make anything fail, as I believe they are removed by a udev rule that\u0027s triggered when the dm is removed (I think at some point I even triggered that event to check everything was OK).","commit_id":"299c3d5c2a7b790a805701328638961dacbd64cc"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"a94d66325f52f76cbe64da86d251a83dc23272cb","unresolved":false,"context_lines":[{"line_number":610,"context_line":"                                       run_as_root\u003dTrue, timeout\u003d5,"},{"line_number":611,"context_line":"                                       check_exit_code\u003dFalse,"},{"line_number":612,"context_line":"                                       root_helper\u003dself._root_helper)"},{"line_number":613,"context_line":"        return stdout.strip() \u003d\u003d \u0027ok\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"7ffa3b31_7a936e5c","line":613,"updated":"2017-04-19 22:50:28.000000000","message":"I\u0027m very wary about adding more calls to the multipath command line, as it has shown to be very very slow as more and more volumes are attached to a host.  \n\nI think we should avoid calling multipath and multipathd if at all possible.","commit_id":"299c3d5c2a7b790a805701328638961dacbd64cc"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0654d7eab8bed477e6248d1dcf63180fd6d132ee","unresolved":false,"context_lines":[{"line_number":610,"context_line":"                                       run_as_root\u003dTrue, timeout\u003d5,"},{"line_number":611,"context_line":"                                       check_exit_code\u003dFalse,"},{"line_number":612,"context_line":"                                       root_helper\u003dself._root_helper)"},{"line_number":613,"context_line":"        return stdout.strip() \u003d\u003d \u0027ok\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"7ffa3b31_e6cfb626","line":613,"in_reply_to":"7ffa3b31_7a936e5c","updated":"2017-04-21 08:42:11.000000000","message":"I agree about removing calls to multipath and multipathd commands, as you can probably see in this and the disconnect patch since I\u0027ve removed almost every call.  But it is important to notice how this call is slightly different than some of the other calls that we made before, since this is a targeted call that will basically make multipathd try to get the wwid of the device and then it will match the wwid already present in the wwids file (we added it earlier) and therefore generate the dm, it will not require querying any of the other existing paths.\n\nAt least that what I understood in the code of multipathd and libmultipath.","commit_id":"299c3d5c2a7b790a805701328638961dacbd64cc"}],"os_brick/tests/initiator/connectors/test_iscsi.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cc0345f30d5e03b64f56c690b38ef8b7c2a23fb7","unresolved":false,"context_lines":[{"line_number":975,"context_line":"        expected \u003d {\u0027type\u0027: \u0027block\u0027, \u0027scsi_wwn\u0027: \u0027wwn\u0027, \u0027multipath_id\u0027: \u0027dm-0\u0027,"},{"line_number":976,"context_line":"                    \u0027path\u0027: \u0027/dev/dm-0\u0027}"},{"line_number":977,"context_line":"        self.assertEqual(expected, res)"},{"line_number":978,"context_line":"        get_wwn_mock.assert_has_calls([mock.call([\u0027sda\u0027, \u0027sdb\u0027, \u0027sdc\u0027,"},{"line_number":979,"context_line":"                                                  \u0027sdd\u0027])])"},{"line_number":980,"context_line":"        add_wwid_mock.assert_called_once_with(\u0027wwn\u0027)"},{"line_number":981,"context_line":"        self.assertNotEqual(0, add_path_mock.call_count)"}],"source_content_type":"text/x-python","patch_set":13,"id":"7f231b9d_7b26d3d0","line":978,"range":{"start_line":978,"start_character":21,"end_line":978,"end_character":37},"updated":"2017-06-14 16:50:44.000000000","message":"Looks like we need any_order\u003dTrue","commit_id":"b1fc9fa22a8c099c76ce21522d45f855953a3ce7"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f5119ce9d4dd0fba5d0a69b6f70d61002f240c09","unresolved":false,"context_lines":[{"line_number":975,"context_line":"        expected \u003d {\u0027type\u0027: \u0027block\u0027, \u0027scsi_wwn\u0027: \u0027wwn\u0027, \u0027multipath_id\u0027: \u0027dm-0\u0027,"},{"line_number":976,"context_line":"                    \u0027path\u0027: \u0027/dev/dm-0\u0027}"},{"line_number":977,"context_line":"        self.assertEqual(expected, res)"},{"line_number":978,"context_line":"        get_wwn_mock.assert_has_calls([mock.call([\u0027sda\u0027, \u0027sdb\u0027, \u0027sdc\u0027,"},{"line_number":979,"context_line":"                                                  \u0027sdd\u0027])])"},{"line_number":980,"context_line":"        add_wwid_mock.assert_called_once_with(\u0027wwn\u0027)"},{"line_number":981,"context_line":"        self.assertNotEqual(0, add_path_mock.call_count)"}],"source_content_type":"text/x-python","patch_set":13,"id":"7f231b9d_5e9c090d","line":978,"range":{"start_line":978,"start_character":21,"end_line":978,"end_character":37},"in_reply_to":"7f231b9d_7b26d3d0","updated":"2017-06-15 14:00:44.000000000","message":"Yes, we do have to take into account that the order may be different, but unfortunately it is only 1 call, so that parameter will be of no help.","commit_id":"b1fc9fa22a8c099c76ce21522d45f855953a3ce7"}]}
