)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"eae440e0742602fd446f59fe9c44a51383fb0802","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Ryan Lucio \u003crlucio@vmem.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-06-16 11:05:11 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix export verify routines to use proper state nodes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"These new \u0027state\u0027 nodes are actually reflecting the kernel/system"},{"line_number":10,"context_line":"state indicating lun accessibility on the data plane.  The nodes"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"fa32b979_02906deb","line":7,"updated":"2015-06-22 09:37:25.000000000","message":"Message needs to specify for which driver this is.","commit_id":"861e25675f8d76c7be8a4a77114fd8f26bb4b832"},{"author":{"_account_id":7860,"name":"Ryan Lucio","email":"ryan.lucio@fireeye.com","username":"rlucio"},"change_message_id":"6adcc7ace1a03f78c254f5d1bfe3bc9beb06e97f","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Ryan Lucio \u003crlucio@vmem.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-06-16 11:05:11 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix export verify routines to use proper state nodes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"These new \u0027state\u0027 nodes are actually reflecting the kernel/system"},{"line_number":10,"context_line":"state indicating lun accessibility on the data plane.  The nodes"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"ba3cc151_9206cb1e","line":7,"in_reply_to":"fa32b979_02906deb","updated":"2015-07-08 00:25:36.000000000","message":"Done","commit_id":"861e25675f8d76c7be8a4a77114fd8f26bb4b832"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"97e18c079b3ef06412768250d7293fc32053a681","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Ryan Lucio \u003crlucio@vmem.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-07-07 17:26:25 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"VMEM v6000: Fix export verify routines to use proper state nodes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"These new \u0027state\u0027 nodes are actually reflecting the kernel/system"},{"line_number":10,"context_line":"state indicating lun accessibility on the data plane.  The nodes"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"ba3cc151_e932b8a6","line":7,"updated":"2015-07-08 12:22:05.000000000","message":"First line must be limited to 50 chars: https://wiki.openstack.org/wiki/GitCommitMessages","commit_id":"e60713951c610c57b76555f7d36fdc419cb1728b"},{"author":{"_account_id":7860,"name":"Ryan Lucio","email":"ryan.lucio@fireeye.com","username":"rlucio"},"change_message_id":"cfadc524ee53597fdbf92fd71d9fa75aa4e05983","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Ryan Lucio \u003crlucio@vmem.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-07-07 17:26:25 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"VMEM v6000: Fix export verify routines to use proper state nodes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"These new \u0027state\u0027 nodes are actually reflecting the kernel/system"},{"line_number":10,"context_line":"state indicating lun accessibility on the data plane.  The nodes"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"ba3cc151_2574e633","line":7,"in_reply_to":"ba3cc151_e932b8a6","updated":"2015-07-09 19:08:20.000000000","message":"Wow, I honestly didn\u0027t know that.  Thanks for linking that info!","commit_id":"e60713951c610c57b76555f7d36fdc419cb1728b"}],"cinder/tests/unit/test_v6000_iscsi.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"eae440e0742602fd446f59fe9c44a51383fb0802","unresolved":false,"context_lines":[{"line_number":240,"context_line":"    def test_initialize_connection(self):"},{"line_number":241,"context_line":"        lun_id \u003d 1"},{"line_number":242,"context_line":"        igroup \u003d None"},{"line_number":243,"context_line":"        target_name \u003d \u0027openstack\u0027"},{"line_number":244,"context_line":"        tgt \u003d self.driver.array_info[0]"},{"line_number":245,"context_line":"        iqn \u003d \"%s%s:%s\" % (self.conf.iscsi_target_prefix,"},{"line_number":246,"context_line":"                           tgt[\u0027node\u0027], target_name)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_38f5a482","line":243,"updated":"2015-06-22 09:37:25.000000000","message":"If you create it as a class constant in V6000ISCSIDriver you could use self.driver to access it instead.","commit_id":"861e25675f8d76c7be8a4a77114fd8f26bb4b832"},{"author":{"_account_id":7860,"name":"Ryan Lucio","email":"ryan.lucio@fireeye.com","username":"rlucio"},"change_message_id":"6adcc7ace1a03f78c254f5d1bfe3bc9beb06e97f","unresolved":false,"context_lines":[{"line_number":240,"context_line":"    def test_initialize_connection(self):"},{"line_number":241,"context_line":"        lun_id \u003d 1"},{"line_number":242,"context_line":"        igroup \u003d None"},{"line_number":243,"context_line":"        target_name \u003d \u0027openstack\u0027"},{"line_number":244,"context_line":"        tgt \u003d self.driver.array_info[0]"},{"line_number":245,"context_line":"        iqn \u003d \"%s%s:%s\" % (self.conf.iscsi_target_prefix,"},{"line_number":246,"context_line":"                           tgt[\u0027node\u0027], target_name)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_d0f9ac81","line":243,"in_reply_to":"fa32b979_38f5a482","updated":"2015-07-08 00:25:36.000000000","message":"Done","commit_id":"861e25675f8d76c7be8a4a77114fd8f26bb4b832"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"eae440e0742602fd446f59fe9c44a51383fb0802","unresolved":false,"context_lines":[{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        self.driver.common.vip \u003d self.setup_mock_vshare()"},{"line_number":255,"context_line":"        self.driver._get_iscsi_target \u003d mock.Mock(return_value\u003dtgt)"},{"line_number":256,"context_line":"        self.driver._export_lun \u003d mock.Mock(return_value\u003dlun_id)"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        props \u003d self.driver.initialize_connection(volume, CONNECTOR)"},{"line_number":259,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_38cb6474","line":256,"updated":"2015-06-22 09:37:25.000000000","message":"This is not a nice way of using mocks, since you don\u0027t return things back to normal after usage this way.\n\nUsually it\u0027s better to use mock.patch.object instead, but since that\u0027s how it\u0027s done in the whole file I guess it\u0027s better to keep it consistent.","commit_id":"861e25675f8d76c7be8a4a77114fd8f26bb4b832"},{"author":{"_account_id":7860,"name":"Ryan Lucio","email":"ryan.lucio@fireeye.com","username":"rlucio"},"change_message_id":"6adcc7ace1a03f78c254f5d1bfe3bc9beb06e97f","unresolved":false,"context_lines":[{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        self.driver.common.vip \u003d self.setup_mock_vshare()"},{"line_number":255,"context_line":"        self.driver._get_iscsi_target \u003d mock.Mock(return_value\u003dtgt)"},{"line_number":256,"context_line":"        self.driver._export_lun \u003d mock.Mock(return_value\u003dlun_id)"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        props \u003d self.driver.initialize_connection(volume, CONNECTOR)"},{"line_number":259,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_901d64c0","line":256,"in_reply_to":"fa32b979_38cb6474","updated":"2015-07-08 00:25:36.000000000","message":"I\u0027m not an expert with the mocking libs but I think it works fine because the driver is re-instantiated during the setup between each test.  Different vendors seem to have pretty different strategies for using mock.patch.object and I know alot of them are frowned on by different people.  /shrug","commit_id":"861e25675f8d76c7be8a4a77114fd8f26bb4b832"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"eae440e0742602fd446f59fe9c44a51383fb0802","unresolved":false,"context_lines":[{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        props \u003d self.driver.initialize_connection(volume, CONNECTOR)"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"        self.driver._get_iscsi_target.assert_called_with()"},{"line_number":261,"context_line":"        self.driver._export_lun.assert_called_with(volume, CONNECTOR, igroup)"},{"line_number":262,"context_line":"        self.driver.common.vip.basic.save_config.assert_called_with()"},{"line_number":263,"context_line":"        self.assertEqual(\"1.2.3.4:3260\", props[\u0027data\u0027][\u0027target_portal\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_7886cc14","line":260,"updated":"2015-06-22 09:37:25.000000000","message":"If you expect only one call it\u0027s better to use assert_called_once_with","commit_id":"861e25675f8d76c7be8a4a77114fd8f26bb4b832"},{"author":{"_account_id":7860,"name":"Ryan Lucio","email":"ryan.lucio@fireeye.com","username":"rlucio"},"change_message_id":"6adcc7ace1a03f78c254f5d1bfe3bc9beb06e97f","unresolved":false,"context_lines":[{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        props \u003d self.driver.initialize_connection(volume, CONNECTOR)"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"        self.driver._get_iscsi_target.assert_called_with()"},{"line_number":261,"context_line":"        self.driver._export_lun.assert_called_with(volume, CONNECTOR, igroup)"},{"line_number":262,"context_line":"        self.driver.common.vip.basic.save_config.assert_called_with()"},{"line_number":263,"context_line":"        self.assertEqual(\"1.2.3.4:3260\", props[\u0027data\u0027][\u0027target_portal\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_1057145b","line":260,"in_reply_to":"fa32b979_7886cc14","updated":"2015-07-08 00:25:36.000000000","message":"sure","commit_id":"861e25675f8d76c7be8a4a77114fd8f26bb4b832"}],"cinder/volume/drivers/violin/v6000_common.py":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1bae7a3060236b66c3782ea2d56aaa0500b69326","unresolved":false,"context_lines":[{"line_number":46,"context_line":"if vxg:"},{"line_number":47,"context_line":"    LOG.info(_LI(\"Running with xg-tools version: %s.\"), vxg.__version__)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"# version vmos versions V6.3.0.4 or newer"},{"line_number":50,"context_line":"VMOS_SUPPORTED_VERSION_PATTERNS \u003d [\u0027V6.3.0.[4-9]\u0027, \u0027V6.3.[1-9].?[0-9]?\u0027]"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"violin_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_24a6990f","side":"PARENT","line":49,"updated":"2015-03-20 16:51:35.000000000","message":"Why did you remove this line?","commit_id":"4e3bee938ddfb4a2a3bc64c308b2baf782b34e46"},{"author":{"_account_id":7860,"name":"Ryan Lucio","email":"ryan.lucio@fireeye.com","username":"rlucio"},"change_message_id":"e5da03607cb013c7d709f33312cc497fc94c6a08","unresolved":false,"context_lines":[{"line_number":46,"context_line":"if vxg:"},{"line_number":47,"context_line":"    LOG.info(_LI(\"Running with xg-tools version: %s.\"), vxg.__version__)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"# version vmos versions V6.3.0.4 or newer"},{"line_number":50,"context_line":"VMOS_SUPPORTED_VERSION_PATTERNS \u003d [\u0027V6.3.0.[4-9]\u0027, \u0027V6.3.[1-9].?[0-9]?\u0027]"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"violin_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_fb897bca","side":"PARENT","line":49,"in_reply_to":"9a80dd14_24a6990f","updated":"2015-03-20 17:13:11.000000000","message":"I just thought that the pattern match made the comment redundant.  /shrug.","commit_id":"4e3bee938ddfb4a2a3bc64c308b2baf782b34e46"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1bae7a3060236b66c3782ea2d56aaa0500b69326","unresolved":false,"context_lines":[{"line_number":540,"context_line":""},{"line_number":541,"context_line":"                if state and (resp[bn] !\u003d \"(not exported)\"):"},{"line_number":542,"context_line":"                    status[node_id] \u003d True"},{"line_number":543,"context_line":"                elif (not state) and (resp[bn] \u003d\u003d \"(not exported)\"):"},{"line_number":544,"context_line":"                    status[node_id] \u003d True"},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"            if status[0] and status[1]:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_e4780191","line":543,"updated":"2015-03-20 16:51:35.000000000","message":"Why two separate checks here if you are setting true for state and not state?","commit_id":"7973afb16301d0eddf050394f5b8bb688c988e7b"},{"author":{"_account_id":7860,"name":"Ryan Lucio","email":"ryan.lucio@fireeye.com","username":"rlucio"},"change_message_id":"e5da03607cb013c7d709f33312cc497fc94c6a08","unresolved":false,"context_lines":[{"line_number":540,"context_line":""},{"line_number":541,"context_line":"                if state and (resp[bn] !\u003d \"(not exported)\"):"},{"line_number":542,"context_line":"                    status[node_id] \u003d True"},{"line_number":543,"context_line":"                elif (not state) and (resp[bn] \u003d\u003d \"(not exported)\"):"},{"line_number":544,"context_line":"                    status[node_id] \u003d True"},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"            if status[0] and status[1]:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_7e4e5970","line":543,"in_reply_to":"9a80dd14_e4780191","updated":"2015-03-20 17:13:11.000000000","message":"Actually I think this is confusing because of my variable names.  _wait_for_export_state() can be called either to very the creation of an export or the removal of an export.  \n\n-When called to verify creation of an export, the function checks that the usn_id in the \u0027resp\u0027 is !\u003d to \"not exported\".\n\n-When called to verify deletion of an export, the function checks that the usn_id in the \u0027resp\u0027 is \u003d\u003d to \"not exported\".\n\nThis logic could probably be adjusted for clarity.","commit_id":"7973afb16301d0eddf050394f5b8bb688c988e7b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"eae440e0742602fd446f59fe9c44a51383fb0802","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    LOG.info(_LI(\"Running with vmemclient version: %s.\"),"},{"line_number":48,"context_line":"             vmemclient.__version__)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"# version vmos versions V6.3.0.4 or newer"},{"line_number":51,"context_line":"VMOS_SUPPORTED_VERSION_PATTERNS \u003d [\u0027V6.3.0.[4-9]\u0027, \u0027V6.3.[1-9].?[0-9]?\u0027]"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"violin_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_02a70d50","side":"PARENT","line":50,"updated":"2015-06-22 09:37:25.000000000","message":"Why was this comment removed if it\u0027s still true?","commit_id":"6199485a71f1ab6ca8dac1f8ef966d7f1694fe3f"},{"author":{"_account_id":7860,"name":"Ryan Lucio","email":"ryan.lucio@fireeye.com","username":"rlucio"},"change_message_id":"6adcc7ace1a03f78c254f5d1bfe3bc9beb06e97f","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    LOG.info(_LI(\"Running with vmemclient version: %s.\"),"},{"line_number":48,"context_line":"             vmemclient.__version__)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"# version vmos versions V6.3.0.4 or newer"},{"line_number":51,"context_line":"VMOS_SUPPORTED_VERSION_PATTERNS \u003d [\u0027V6.3.0.[4-9]\u0027, \u0027V6.3.[1-9].?[0-9]?\u0027]"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"violin_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_905fa40e","side":"PARENT","line":50,"in_reply_to":"fa32b979_02a70d50","updated":"2015-07-08 00:25:36.000000000","message":"the comment isn\u0027t needed because its just stating the obvious","commit_id":"6199485a71f1ab6ca8dac1f8ef966d7f1694fe3f"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"eae440e0742602fd446f59fe9c44a51383fb0802","unresolved":false,"context_lines":[{"line_number":522,"context_line":"            (depending on \u0027state\u0027 param)"},{"line_number":523,"context_line":"        \"\"\""},{"line_number":524,"context_line":"        if not snapshot_name:"},{"line_number":525,"context_line":"            bn \u003d \"/vshare/state/local/container/%s/lun/%s/usn_id\" \\"},{"line_number":526,"context_line":"                % (self.container, volume_name)"},{"line_number":527,"context_line":"        else:"},{"line_number":528,"context_line":"            bn \u003d \"/vshare/state/snapshot/container/%s/lun/%s/snap/%s/usn_id\" \\"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_5d565a07","line":525,"updated":"2015-06-22 09:37:25.000000000","message":"Must use mapping keys:\n\n bn \u003d \"/vshare/state/local/container/%(container)s/lun/%(vol_name)s/usn_id\" \\","commit_id":"861e25675f8d76c7be8a4a77114fd8f26bb4b832"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"164bce4ebec65b9be050c4f8e2f735260784fb66","unresolved":false,"context_lines":[{"line_number":522,"context_line":"            (depending on \u0027state\u0027 param)"},{"line_number":523,"context_line":"        \"\"\""},{"line_number":524,"context_line":"        if not snapshot_name:"},{"line_number":525,"context_line":"            bn \u003d \"/vshare/state/local/container/%s/lun/%s/usn_id\" \\"},{"line_number":526,"context_line":"                % (self.container, volume_name)"},{"line_number":527,"context_line":"        else:"},{"line_number":528,"context_line":"            bn \u003d \"/vshare/state/snapshot/container/%s/lun/%s/snap/%s/usn_id\" \\"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_6c40f634","line":525,"in_reply_to":"ba3cc151_d0fa0cbd","updated":"2015-07-08 12:21:02.000000000","message":"You are right, it\u0027s not recommended to use positional args because they are harder to follow, but it is certainly not a requirement.  I should have used \"should\" instead of \"must\".  ;-)","commit_id":"861e25675f8d76c7be8a4a77114fd8f26bb4b832"},{"author":{"_account_id":7860,"name":"Ryan Lucio","email":"ryan.lucio@fireeye.com","username":"rlucio"},"change_message_id":"6adcc7ace1a03f78c254f5d1bfe3bc9beb06e97f","unresolved":false,"context_lines":[{"line_number":522,"context_line":"            (depending on \u0027state\u0027 param)"},{"line_number":523,"context_line":"        \"\"\""},{"line_number":524,"context_line":"        if not snapshot_name:"},{"line_number":525,"context_line":"            bn \u003d \"/vshare/state/local/container/%s/lun/%s/usn_id\" \\"},{"line_number":526,"context_line":"                % (self.container, volume_name)"},{"line_number":527,"context_line":"        else:"},{"line_number":528,"context_line":"            bn \u003d \"/vshare/state/snapshot/container/%s/lun/%s/snap/%s/usn_id\" \\"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_d0fa0cbd","line":525,"in_reply_to":"fa32b979_5d565a07","updated":"2015-07-08 00:25:36.000000000","message":"This pattern match is not part of a log message and as such will not be internationalized so this sort of formatting is not required.  I just checked the coding standards again and I don\u0027t see anything that leads me to believe I need to make this change.  Please let me know if I am wrong though.","commit_id":"861e25675f8d76c7be8a4a77114fd8f26bb4b832"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"eae440e0742602fd446f59fe9c44a51383fb0802","unresolved":false,"context_lines":[{"line_number":525,"context_line":"            bn \u003d \"/vshare/state/local/container/%s/lun/%s/usn_id\" \\"},{"line_number":526,"context_line":"                % (self.container, volume_name)"},{"line_number":527,"context_line":"        else:"},{"line_number":528,"context_line":"            bn \u003d \"/vshare/state/snapshot/container/%s/lun/%s/snap/%s/usn_id\" \\"},{"line_number":529,"context_line":"                % (self.container, volume_name, snapshot_name)"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":"        def _loop_func(state):"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_5d6dfaca","line":528,"updated":"2015-06-22 09:37:25.000000000","message":"Same here","commit_id":"861e25675f8d76c7be8a4a77114fd8f26bb4b832"},{"author":{"_account_id":7860,"name":"Ryan Lucio","email":"ryan.lucio@fireeye.com","username":"rlucio"},"change_message_id":"6adcc7ace1a03f78c254f5d1bfe3bc9beb06e97f","unresolved":false,"context_lines":[{"line_number":525,"context_line":"            bn \u003d \"/vshare/state/local/container/%s/lun/%s/usn_id\" \\"},{"line_number":526,"context_line":"                % (self.container, volume_name)"},{"line_number":527,"context_line":"        else:"},{"line_number":528,"context_line":"            bn \u003d \"/vshare/state/snapshot/container/%s/lun/%s/snap/%s/usn_id\" \\"},{"line_number":529,"context_line":"                % (self.container, volume_name, snapshot_name)"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":"        def _loop_func(state):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_b0fd08b3","line":528,"in_reply_to":"fa32b979_5d6dfaca","updated":"2015-07-08 00:25:36.000000000","message":"See previous comment","commit_id":"861e25675f8d76c7be8a4a77114fd8f26bb4b832"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"eae440e0742602fd446f59fe9c44a51383fb0802","unresolved":false,"context_lines":[{"line_number":539,"context_line":"            # fails, i.e., HBAs go offline and the array is in"},{"line_number":540,"context_line":"            # degraded mode."},{"line_number":541,"context_line":"            #"},{"line_number":542,"context_line":"            for node_id in xrange(2):"},{"line_number":543,"context_line":"                resp \u003d mg_conns[node_id].basic.get_node_values(bn)"},{"line_number":544,"context_line":""},{"line_number":545,"context_line":"                if state:"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_9d3622b3","line":542,"updated":"2015-06-22 09:37:25.000000000","message":"Don\u0027t use xrange, it\u0027s not compatible with Python 3 and you are reverting a recently merged patch: https://review.openstack.org/#/c/185418/","commit_id":"861e25675f8d76c7be8a4a77114fd8f26bb4b832"},{"author":{"_account_id":7860,"name":"Ryan Lucio","email":"ryan.lucio@fireeye.com","username":"rlucio"},"change_message_id":"6adcc7ace1a03f78c254f5d1bfe3bc9beb06e97f","unresolved":false,"context_lines":[{"line_number":539,"context_line":"            # fails, i.e., HBAs go offline and the array is in"},{"line_number":540,"context_line":"            # degraded mode."},{"line_number":541,"context_line":"            #"},{"line_number":542,"context_line":"            for node_id in xrange(2):"},{"line_number":543,"context_line":"                resp \u003d mg_conns[node_id].basic.get_node_values(bn)"},{"line_number":544,"context_line":""},{"line_number":545,"context_line":"                if state:"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_d0976c8e","line":542,"in_reply_to":"fa32b979_9d3622b3","updated":"2015-07-08 00:25:36.000000000","message":"good catch","commit_id":"861e25675f8d76c7be8a4a77114fd8f26bb4b832"}],"cinder/volume/drivers/violin/v6000_fcp.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"eae440e0742602fd446f59fe9c44a51383fb0802","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    Version history:"},{"line_number":60,"context_line":"        1.0 - Initial driver"},{"line_number":61,"context_line":"    \"\"\""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def __init__(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_983630b3","line":62,"updated":"2015-06-22 09:37:25.000000000","message":"No version bump?","commit_id":"861e25675f8d76c7be8a4a77114fd8f26bb4b832"},{"author":{"_account_id":7860,"name":"Ryan Lucio","email":"ryan.lucio@fireeye.com","username":"rlucio"},"change_message_id":"6adcc7ace1a03f78c254f5d1bfe3bc9beb06e97f","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    Version history:"},{"line_number":60,"context_line":"        1.0 - Initial driver"},{"line_number":61,"context_line":"    \"\"\""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def __init__(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_70c0e050","line":62,"in_reply_to":"fa32b979_983630b3","updated":"2015-07-08 00:25:36.000000000","message":"Done","commit_id":"861e25675f8d76c7be8a4a77114fd8f26bb4b832"}],"cinder/volume/drivers/violin/v6000_iscsi.py":[{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"431b71644d7451944c67736abe1b278d30135d44","unresolved":false,"context_lines":[{"line_number":262,"context_line":"            self.common._send_cmd(self.common.mgb.iscsi.bind_ip_to_target,"},{"line_number":263,"context_line":"                                  \u0027\u0027, target_name,"},{"line_number":264,"context_line":"                                  self.gateway_iscsi_ip_addresses_mgb)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"        except Exception:"},{"line_number":267,"context_line":"            LOG.exception(_LE(\"Failed to bind iSCSI targets!\"))"},{"line_number":268,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa32b979_efb3d8e7","line":265,"updated":"2015-06-16 07:32:49.000000000","message":"Blank line here?","commit_id":"83585e4d69bf8625617dc791344c4cf2d4780ab6"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"eae440e0742602fd446f59fe9c44a51383fb0802","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        1.0 - Initial driver"},{"line_number":60,"context_line":"    \"\"\""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":65,"context_line":"        super(V6000ISCSIDriver, self).__init__(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_78456c15","line":62,"updated":"2015-06-22 09:37:25.000000000","message":"No version bump?","commit_id":"861e25675f8d76c7be8a4a77114fd8f26bb4b832"},{"author":{"_account_id":7860,"name":"Ryan Lucio","email":"ryan.lucio@fireeye.com","username":"rlucio"},"change_message_id":"6adcc7ace1a03f78c254f5d1bfe3bc9beb06e97f","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        1.0 - Initial driver"},{"line_number":60,"context_line":"    \"\"\""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":65,"context_line":"        super(V6000ISCSIDriver, self).__init__(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_50a27caf","line":62,"in_reply_to":"fa32b979_78456c15","updated":"2015-07-08 00:25:36.000000000","message":"Done","commit_id":"861e25675f8d76c7be8a4a77114fd8f26bb4b832"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"eae440e0742602fd446f59fe9c44a51383fb0802","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        self.array_info \u003d []"},{"line_number":67,"context_line":"        self.gateway_iscsi_ip_addresses_mga \u003d []"},{"line_number":68,"context_line":"        self.gateway_iscsi_ip_addresses_mgb \u003d []"},{"line_number":69,"context_line":"        self.target_group_name \u003d \u0027openstack\u0027"},{"line_number":70,"context_line":"        self.stats \u003d {}"},{"line_number":71,"context_line":"        self.configuration.append_config_values(v6000_common.violin_opts)"},{"line_number":72,"context_line":"        self.configuration.append_config_values(san.san_opts)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_b86214ac","line":69,"updated":"2015-06-22 09:37:25.000000000","message":"Wouldn\u0027t it be better to make it a class constant?","commit_id":"861e25675f8d76c7be8a4a77114fd8f26bb4b832"},{"author":{"_account_id":7860,"name":"Ryan Lucio","email":"ryan.lucio@fireeye.com","username":"rlucio"},"change_message_id":"6adcc7ace1a03f78c254f5d1bfe3bc9beb06e97f","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        self.array_info \u003d []"},{"line_number":67,"context_line":"        self.gateway_iscsi_ip_addresses_mga \u003d []"},{"line_number":68,"context_line":"        self.gateway_iscsi_ip_addresses_mgb \u003d []"},{"line_number":69,"context_line":"        self.target_group_name \u003d \u0027openstack\u0027"},{"line_number":70,"context_line":"        self.stats \u003d {}"},{"line_number":71,"context_line":"        self.configuration.append_config_values(v6000_common.violin_opts)"},{"line_number":72,"context_line":"        self.configuration.append_config_values(san.san_opts)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_107f1418","line":69,"in_reply_to":"fa32b979_b86214ac","updated":"2015-07-08 00:25:36.000000000","message":"Done","commit_id":"861e25675f8d76c7be8a4a77114fd8f26bb4b832"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"eae440e0742602fd446f59fe9c44a51383fb0802","unresolved":false,"context_lines":[{"line_number":218,"context_line":"            self._update_stats()"},{"line_number":219,"context_line":"        return self.stats"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    def _create_iscsi_target_group(self):"},{"line_number":222,"context_line":"        \"\"\"Creates a new target for use in exporting a lun."},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        Create an HA target on the backend that will be used for all"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_78724caf","line":221,"updated":"2015-06-22 09:37:25.000000000","message":"Shouldn\u0027t this be shynchronized?","commit_id":"861e25675f8d76c7be8a4a77114fd8f26bb4b832"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"164bce4ebec65b9be050c4f8e2f735260784fb66","unresolved":false,"context_lines":[{"line_number":218,"context_line":"            self._update_stats()"},{"line_number":219,"context_line":"        return self.stats"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    def _create_iscsi_target_group(self):"},{"line_number":222,"context_line":"        \"\"\"Creates a new target for use in exporting a lun."},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        Create an HA target on the backend that will be used for all"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_2c674eb8","line":221,"in_reply_to":"ba3cc151_70e300da","updated":"2015-07-08 12:21:02.000000000","message":"I implied: Could there be 2 simultaneous calls to _create_iscsi_target_group for the same group?  Would there be a problem if they try to do it at the exact same time?\n\nSince this issue hasn\u0027t been raised till now I guess the answer is no. ;-)","commit_id":"861e25675f8d76c7be8a4a77114fd8f26bb4b832"},{"author":{"_account_id":7860,"name":"Ryan Lucio","email":"ryan.lucio@fireeye.com","username":"rlucio"},"change_message_id":"6adcc7ace1a03f78c254f5d1bfe3bc9beb06e97f","unresolved":false,"context_lines":[{"line_number":218,"context_line":"            self._update_stats()"},{"line_number":219,"context_line":"        return self.stats"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    def _create_iscsi_target_group(self):"},{"line_number":222,"context_line":"        \"\"\"Creates a new target for use in exporting a lun."},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        Create an HA target on the backend that will be used for all"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_70e300da","line":221,"in_reply_to":"fa32b979_78724caf","updated":"2015-07-08 00:25:36.000000000","message":"Not sure what you mean here...","commit_id":"861e25675f8d76c7be8a4a77114fd8f26bb4b832"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"eae440e0742602fd446f59fe9c44a51383fb0802","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        \u003cip_of_mg_eth_intf\u003e\"."},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        Arguments:"},{"line_number":232,"context_line":"            volume -- volume object provided by the Manager"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        Returns:"},{"line_number":235,"context_line":"            reference to randomly selected target object"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_7d879ed7","line":232,"updated":"2015-06-22 09:37:25.000000000","message":"These 2 lines should be removed","commit_id":"861e25675f8d76c7be8a4a77114fd8f26bb4b832"},{"author":{"_account_id":7860,"name":"Ryan Lucio","email":"ryan.lucio@fireeye.com","username":"rlucio"},"change_message_id":"6adcc7ace1a03f78c254f5d1bfe3bc9beb06e97f","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        \u003cip_of_mg_eth_intf\u003e\"."},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        Arguments:"},{"line_number":232,"context_line":"            volume -- volume object provided by the Manager"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        Returns:"},{"line_number":235,"context_line":"            reference to randomly selected target object"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_30b258e6","line":232,"in_reply_to":"fa32b979_7d879ed7","updated":"2015-07-08 00:25:36.000000000","message":"Done","commit_id":"861e25675f8d76c7be8a4a77114fd8f26bb4b832"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"eae440e0742602fd446f59fe9c44a51383fb0802","unresolved":false,"context_lines":[{"line_number":232,"context_line":"            volume -- volume object provided by the Manager"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        Returns:"},{"line_number":235,"context_line":"            reference to randomly selected target object"},{"line_number":236,"context_line":"        \"\"\""},{"line_number":237,"context_line":"        v \u003d self.common.vip"},{"line_number":238,"context_line":"        target_name \u003d self.target_group_name"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_dde4aaad","line":235,"updated":"2015-06-22 09:37:25.000000000","message":"You are not returning anything now","commit_id":"861e25675f8d76c7be8a4a77114fd8f26bb4b832"},{"author":{"_account_id":7860,"name":"Ryan Lucio","email":"ryan.lucio@fireeye.com","username":"rlucio"},"change_message_id":"6adcc7ace1a03f78c254f5d1bfe3bc9beb06e97f","unresolved":false,"context_lines":[{"line_number":232,"context_line":"            volume -- volume object provided by the Manager"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        Returns:"},{"line_number":235,"context_line":"            reference to randomly selected target object"},{"line_number":236,"context_line":"        \"\"\""},{"line_number":237,"context_line":"        v \u003d self.common.vip"},{"line_number":238,"context_line":"        target_name \u003d self.target_group_name"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_d0cbec51","line":235,"in_reply_to":"fa32b979_dde4aaad","updated":"2015-07-08 00:25:36.000000000","message":"Done","commit_id":"861e25675f8d76c7be8a4a77114fd8f26bb4b832"}]}
