)]}'
{"cinder/brick/initiator/connector.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"24bacad0ad10de0046c51d415ff67994aee405bb","unresolved":false,"context_lines":[{"line_number":403,"context_line":"        if dev_name:"},{"line_number":404,"context_line":"            self._linuxscsi.remove_scsi_device(dev_name)"},{"line_number":405,"context_line":"            # make sure the volume is gone before moving on"},{"line_number":406,"context_line":"            # Bug #1437441 - Race removing iscsi device"},{"line_number":407,"context_line":"            self._linuxscsi.wait_for_volume_removal(host_device)"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"        # NOTE(vish): Only disconnect from the target if no luns from the"}],"source_content_type":"text/x-python","patch_set":3,"id":"da9b358b_10c5498d","line":406,"updated":"2015-03-30 16:07:36.000000000","message":"The LP bug doesn\u0027t really contain enough additional info to be a useful reference when reading the code.  Maybe just replace the Bug # reference with a one-liner about what is going on, instead?","commit_id":"1d6810f277467b512787e50df60d640052090217"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"9848d7cdf7c0b0b4cdc18d52bc991ef99af8db92","unresolved":false,"context_lines":[{"line_number":403,"context_line":"        if dev_name:"},{"line_number":404,"context_line":"            self._linuxscsi.remove_scsi_device(dev_name)"},{"line_number":405,"context_line":"            # make sure the volume is gone before moving on"},{"line_number":406,"context_line":"            # Bug #1437441 - Race removing iscsi device"},{"line_number":407,"context_line":"            self._linuxscsi.wait_for_volume_removal(host_device)"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"        # NOTE(vish): Only disconnect from the target if no luns from the"}],"source_content_type":"text/x-python","patch_set":3,"id":"da9b358b_2bb57ccc","line":406,"in_reply_to":"da9b358b_10c5498d","updated":"2015-03-30 16:27:01.000000000","message":"This seems like a problem with the bug, not this comment.   I\u0027ll ask Oliver to provide more details in the bug.","commit_id":"1d6810f277467b512787e50df60d640052090217"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"641e637c37b9e11eef44a277b9fe771bf6c4681a","unresolved":false,"context_lines":[{"line_number":403,"context_line":"        if dev_name:"},{"line_number":404,"context_line":"            self._linuxscsi.remove_scsi_device(dev_name)"},{"line_number":405,"context_line":"            # make sure the volume is gone before moving on"},{"line_number":406,"context_line":"            # Bug #1437441 - Race removing iscsi device"},{"line_number":407,"context_line":"            self._linuxscsi.wait_for_volume_removal(host_device)"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"        # NOTE(vish): Only disconnect from the target if no luns from the"}],"source_content_type":"text/x-python","patch_set":3,"id":"da9b358b_b1e7bee3","line":406,"in_reply_to":"da9b358b_2bb57ccc","updated":"2015-03-30 17:32:49.000000000","message":"It\u0027s a problem with the general idea of referencing bug trackers in code.  Which is why that\u0027s usually discouraged.","commit_id":"1d6810f277467b512787e50df60d640052090217"}],"cinder/brick/initiator/linuxscsi.py":[{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"90b1b8413bcadba5bd310d6b948eb0775bc41bff","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        \"\"\"This is used to ensure that volumes are gone.\"\"\""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        def _wait_for_volume_removal(volume_path):"},{"line_number":74,"context_line":"            LOG.warning(_LW(\"Looking for %s to dissapear\"), volume_path)"},{"line_number":75,"context_line":"            if os.path.exists(volume_path):"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"                if self.tries \u003e\u003d self.scan_attempts:"}],"source_content_type":"text/x-python","patch_set":1,"id":"da9b358b_84cee881","line":74,"updated":"2015-03-27 23:48:22.000000000","message":"Shouldn\u0027t be a warning I don\u0027t think, should be debug, and maybe something a bit cleaner like:\n\"Waiting for removal of iSCSI mount point: %s\".","commit_id":"b3f9096c9d3e65fb1a2b33cf0040f415c1d6616d"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"97fb3a1ffe73dce407ed4432df8bb12fe89de9fd","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        \"\"\"This is used to ensure that volumes are gone.\"\"\""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        def _wait_for_volume_removal(volume_path):"},{"line_number":74,"context_line":"            LOG.warning(_LW(\"Looking for %s to dissapear\"), volume_path)"},{"line_number":75,"context_line":"            if os.path.exists(volume_path):"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"                if self.tries \u003e\u003d self.scan_attempts:"}],"source_content_type":"text/x-python","patch_set":1,"id":"da9b358b_c4d070cc","line":74,"in_reply_to":"da9b358b_84cee881","updated":"2015-03-27 23:59:11.000000000","message":"ok I\u0027ll change it to debug.","commit_id":"b3f9096c9d3e65fb1a2b33cf0040f415c1d6616d"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ed36987b1b49989f5b08fa8475cf5be80689874a","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        \"\"\"This is used to ensure that volumes are gone.\"\"\""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        def _wait_for_volume_removal(volume_path):"},{"line_number":74,"context_line":"            LOG.warning(_LW(\"Looking for %s to dissapear\"), volume_path)"},{"line_number":75,"context_line":"            if os.path.exists(volume_path):"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"                if self.tries \u003e\u003d self.scan_attempts:"}],"source_content_type":"text/x-python","patch_set":1,"id":"da9b358b_64ff6435","line":74,"in_reply_to":"da9b358b_84cee881","updated":"2015-03-28 00:04:27.000000000","message":"this is also used by the FC connector.   This class is for SCSI subsystem commands, not iSCSI per say.","commit_id":"b3f9096c9d3e65fb1a2b33cf0040f415c1d6616d"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"90b1b8413bcadba5bd310d6b948eb0775bc41bff","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"                LOG.warning(_LW(\"%(path)s still exists, rescanning. Try number: \""},{"line_number":85,"context_line":"                                \"%(tries)s\"),"},{"line_number":86,"context_line":"                            {\u0027path\u0027: volume_path, \u0027tries\u0027: self.tries})"},{"line_number":87,"context_line":"                self.tries \u003d self.tries + 1"},{"line_number":88,"context_line":"            else:"},{"line_number":89,"context_line":"                LOG.debug(\"Volume %s is now gone.\", volume_path)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da9b358b_847ca821","line":86,"updated":"2015-03-27 23:48:22.000000000","message":"Debug should be sufficient here","commit_id":"b3f9096c9d3e65fb1a2b33cf0040f415c1d6616d"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"97fb3a1ffe73dce407ed4432df8bb12fe89de9fd","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"                LOG.warning(_LW(\"%(path)s still exists, rescanning. Try number: \""},{"line_number":85,"context_line":"                                \"%(tries)s\"),"},{"line_number":86,"context_line":"                            {\u0027path\u0027: volume_path, \u0027tries\u0027: self.tries})"},{"line_number":87,"context_line":"                self.tries \u003d self.tries + 1"},{"line_number":88,"context_line":"            else:"},{"line_number":89,"context_line":"                LOG.debug(\"Volume %s is now gone.\", volume_path)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da9b358b_a4d56cba","line":86,"in_reply_to":"da9b358b_847ca821","updated":"2015-03-27 23:59:11.000000000","message":"ok I\u0027ll change it to debug.","commit_id":"b3f9096c9d3e65fb1a2b33cf0040f415c1d6616d"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"90b1b8413bcadba5bd310d6b948eb0775bc41bff","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                            {\u0027path\u0027: volume_path, \u0027tries\u0027: self.tries})"},{"line_number":87,"context_line":"                self.tries \u003d self.tries + 1"},{"line_number":88,"context_line":"            else:"},{"line_number":89,"context_line":"                LOG.debug(\"Volume %s is now gone.\", volume_path)"},{"line_number":90,"context_line":"                raise loopingcall.LoopingCallDone()"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        # Setup a loop here to give the kernel time"}],"source_content_type":"text/x-python","patch_set":1,"id":"da9b358b_6492c459","line":89,"updated":"2015-03-27 23:48:22.000000000","message":"\"ISCSI mount point successfully removed\" ?","commit_id":"b3f9096c9d3e65fb1a2b33cf0040f415c1d6616d"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"90b1b8413bcadba5bd310d6b948eb0775bc41bff","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                self.tries \u003d self.tries + 1"},{"line_number":88,"context_line":"            else:"},{"line_number":89,"context_line":"                LOG.debug(\"Volume %s is now gone.\", volume_path)"},{"line_number":90,"context_line":"                raise loopingcall.LoopingCallDone()"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        # Setup a loop here to give the kernel time"},{"line_number":93,"context_line":"        # to remove the volume from /dev/disk/by-path/"}],"source_content_type":"text/x-python","patch_set":1,"id":"da9b358b_44ad8087","line":90,"updated":"2015-03-27 23:48:22.000000000","message":"What happens in the caller when this is raised?  Was going to wait for CI but it looks like it\u0027s going to be a while.","commit_id":"b3f9096c9d3e65fb1a2b33cf0040f415c1d6616d"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"97fb3a1ffe73dce407ed4432df8bb12fe89de9fd","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                self.tries \u003d self.tries + 1"},{"line_number":88,"context_line":"            else:"},{"line_number":89,"context_line":"                LOG.debug(\"Volume %s is now gone.\", volume_path)"},{"line_number":90,"context_line":"                raise loopingcall.LoopingCallDone()"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        # Setup a loop here to give the kernel time"},{"line_number":93,"context_line":"        # to remove the volume from /dev/disk/by-path/"}],"source_content_type":"text/x-python","patch_set":1,"id":"da9b358b_44e580a6","line":90,"in_reply_to":"da9b358b_44ad8087","updated":"2015-03-27 23:59:11.000000000","message":"The expected behavior is for this to raise the loopingcall  done here.   That\u0027s a success.","commit_id":"b3f9096c9d3e65fb1a2b33cf0040f415c1d6616d"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"90b1b8413bcadba5bd310d6b948eb0775bc41bff","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        timer \u003d loopingcall.FixedIntervalLoopingCall("},{"line_number":97,"context_line":"            _wait_for_volume_removal, volume_path)"},{"line_number":98,"context_line":"        timer.start(interval\u003d2).wait()"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def get_device_info(self, device):"},{"line_number":101,"context_line":"        (out, _err) \u003d self._execute(\u0027sg_scan\u0027, device, run_as_root\u003dTrue,"},{"line_number":102,"context_line":"                                    root_helper\u003dself._root_helper)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da9b358b_64a08491","line":99,"updated":"2015-03-27 23:48:22.000000000","message":"Don\u0027t suppose you\u0027d be interested in using the retry decorator instead of the crazy looping calls here?","commit_id":"b3f9096c9d3e65fb1a2b33cf0040f415c1d6616d"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ed36987b1b49989f5b08fa8475cf5be80689874a","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        timer \u003d loopingcall.FixedIntervalLoopingCall("},{"line_number":97,"context_line":"            _wait_for_volume_removal, volume_path)"},{"line_number":98,"context_line":"        timer.start(interval\u003d2).wait()"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def get_device_info(self, device):"},{"line_number":101,"context_line":"        (out, _err) \u003d self._execute(\u0027sg_scan\u0027, device, run_as_root\u003dTrue,"},{"line_number":102,"context_line":"                                    root_helper\u003dself._root_helper)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da9b358b_c4e750ab","line":99,"in_reply_to":"da9b358b_444ea0c2","updated":"2015-03-28 00:04:27.000000000","message":"If we switch to the retry mechanism, then I\u0027ll also need to pull that into the os-brick lib.   not a biggie.","commit_id":"b3f9096c9d3e65fb1a2b33cf0040f415c1d6616d"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"97fb3a1ffe73dce407ed4432df8bb12fe89de9fd","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        timer \u003d loopingcall.FixedIntervalLoopingCall("},{"line_number":97,"context_line":"            _wait_for_volume_removal, volume_path)"},{"line_number":98,"context_line":"        timer.start(interval\u003d2).wait()"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def get_device_info(self, device):"},{"line_number":101,"context_line":"        (out, _err) \u003d self._execute(\u0027sg_scan\u0027, device, run_as_root\u003dTrue,"},{"line_number":102,"context_line":"                                    root_helper\u003dself._root_helper)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da9b358b_444ea0c2","line":99,"in_reply_to":"da9b358b_64a08491","updated":"2015-03-27 23:59:11.000000000","message":"can the retry wait between retries ?","commit_id":"b3f9096c9d3e65fb1a2b33cf0040f415c1d6616d"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"310e807936d3569b7181db3510776949f68d394a","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        \"\"\"This is used to ensure that volumes are gone.\"\"\""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        def _wait_for_volume_removal(volume_path):"},{"line_number":74,"context_line":"            LOG.debug(\"Waiting for SCSI mount point %s to dissapear.\","},{"line_number":75,"context_line":"                      volume_path)"},{"line_number":76,"context_line":"            if os.path.exists(volume_path):"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"da9b358b_78e9321a","line":74,"updated":"2015-03-30 03:26:08.000000000","message":"s/to dissapear/to be removed/","commit_id":"70a4b78a614ff749de615a415bcef83aaf2a1662"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"17ac2d816bdf160634ffe003b001684f93045337","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        \"\"\"This is used to ensure that volumes are gone.\"\"\""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        def _wait_for_volume_removal(volume_path):"},{"line_number":74,"context_line":"            LOG.debug(\"Waiting for SCSI mount point %s to dissapear.\","},{"line_number":75,"context_line":"                      volume_path)"},{"line_number":76,"context_line":"            if os.path.exists(volume_path):"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"da9b358b_7a947436","line":74,"in_reply_to":"da9b358b_78e9321a","updated":"2015-03-30 15:37:16.000000000","message":"Done","commit_id":"70a4b78a614ff749de615a415bcef83aaf2a1662"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"24bacad0ad10de0046c51d415ff67994aee405bb","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            LOG.debug(\"Waiting for SCSI mount point %s to be removed.\","},{"line_number":75,"context_line":"                      volume_path)"},{"line_number":76,"context_line":"            if os.path.exists(volume_path):"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"                if self.tries \u003e\u003d self.scan_attempts:"},{"line_number":79,"context_line":"                    msg \u003d _LE(\"Exceeded the number of attempts to detect \""},{"line_number":80,"context_line":"                              \"volume removal.\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"da9b358b_10b0a942","line":77,"updated":"2015-03-30 16:07:36.000000000","message":"Extra blank line?","commit_id":"1d6810f277467b512787e50df60d640052090217"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"9848d7cdf7c0b0b4cdc18d52bc991ef99af8db92","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            LOG.debug(\"Waiting for SCSI mount point %s to be removed.\","},{"line_number":75,"context_line":"                      volume_path)"},{"line_number":76,"context_line":"            if os.path.exists(volume_path):"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"                if self.tries \u003e\u003d self.scan_attempts:"},{"line_number":79,"context_line":"                    msg \u003d _LE(\"Exceeded the number of attempts to detect \""},{"line_number":80,"context_line":"                              \"volume removal.\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"da9b358b_6b094495","line":77,"in_reply_to":"da9b358b_10b0a942","updated":"2015-03-30 16:27:01.000000000","message":"Done","commit_id":"1d6810f277467b512787e50df60d640052090217"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"60040f5c2b85b695317d726279b8825a6c154669","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        self.scan_attempts \u003d 3"},{"line_number":96,"context_line":"        timer \u003d loopingcall.FixedIntervalLoopingCall("},{"line_number":97,"context_line":"            _wait_for_volume_removal, volume_path)"},{"line_number":98,"context_line":"        timer.start(interval\u003d2).wait()"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def get_device_info(self, device):"},{"line_number":101,"context_line":"        (out, _err) \u003d self._execute(\u0027sg_scan\u0027, device, run_as_root\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":4,"id":"da9b358b_54961b4d","line":98,"updated":"2015-03-30 19:34:48.000000000","message":"May be it will be useful to make interval value configurable","commit_id":"43029941219505bc3861dd285e3393e08c76b433"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"c6d7df45874089b8470fdeee670fa0b85a8b16fc","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        self.scan_attempts \u003d 3"},{"line_number":96,"context_line":"        timer \u003d loopingcall.FixedIntervalLoopingCall("},{"line_number":97,"context_line":"            _wait_for_volume_removal, volume_path)"},{"line_number":98,"context_line":"        timer.start(interval\u003d2).wait()"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def get_device_info(self, device):"},{"line_number":101,"context_line":"        (out, _err) \u003d self._execute(\u0027sg_scan\u0027, device, run_as_root\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":4,"id":"da9b358b_aad85c54","line":98,"in_reply_to":"da9b358b_54961b4d","updated":"2015-03-30 20:33:30.000000000","message":"That can be added later if needed?","commit_id":"43029941219505bc3861dd285e3393e08c76b433"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"2ef9c79c37a2e682046235ed5c3708ac70d11b5b","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        self.scan_attempts \u003d 3"},{"line_number":96,"context_line":"        timer \u003d loopingcall.FixedIntervalLoopingCall("},{"line_number":97,"context_line":"            _wait_for_volume_removal, volume_path)"},{"line_number":98,"context_line":"        timer.start(interval\u003d2).wait()"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def get_device_info(self, device):"},{"line_number":101,"context_line":"        (out, _err) \u003d self._execute(\u0027sg_scan\u0027, device, run_as_root\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":4,"id":"da9b358b_88ab6089","line":98,"in_reply_to":"da9b358b_aad85c54","updated":"2015-03-30 21:40:11.000000000","message":"Sure, I won\u0027t block patch for it","commit_id":"43029941219505bc3861dd285e3393e08c76b433"}]}
