)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"17d7491bbe1e3d8ade49760e7ede72ca8e39ce44","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     mattanShalev \u003cmattan@reduxio.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-06-22 18:03:23 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Added backend ISCSI driver for Reduxio."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Ic95026497ab3721a559b5229a9e51221c375a4b3"},{"line_number":10,"context_line":"Implements: blueprint reduxio-iscsi-volume-driver"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3aaa91ec_17725349","line":7,"range":{"start_line":7,"start_character":38,"end_line":7,"end_character":39},"updated":"2016-06-23 17:26:28.000000000","message":"https://wiki.openstack.org/wiki/GitCommitMessages\n\nremove . and also put some description","commit_id":"09e5320ec4296617a45397014126c2b5d8e57afe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0fcc09f8bb7588462e8b2f3dff6ad41955d71f42","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     mattanShalev \u003cmattan@reduxio.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-06-27 16:36:58 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Added initial backend ISCSI driver for Reduxio, implementing"},{"line_number":8,"context_line":"the basic ISCSI driver functionality and supports volumes backdating"},{"line_number":9,"context_line":"by snapshots or clones"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3aaa91ec_212194b5","line":7,"updated":"2016-06-27 14:21:27.000000000","message":"After the comma, put in a couple line breaks, then have the description of what was done.\n\nhttps://wiki.openstack.org/wiki/GitCommitMessages#Summary_of_Git_commit_message_structure","commit_id":"2d71f047bed10622ebf1db03ca8b9b0f38195850"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"c72f9c5c052ab5d557adbc3c59fe3148a3226091","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The driver implements the basic ISCSI driver"},{"line_number":10,"context_line":"functionality and supports volumes backdating."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ic95026497ab3721a559b5229a9e51221c375a4b3"},{"line_number":13,"context_line":"Implements: blueprint reduxio-iscsi-volume-driver"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"5a74a57a_a372d947","line":11,"updated":"2016-11-29 21:29:51.000000000","message":"Think this needs a DocImpact","commit_id":"e200e48c3310cd57142b153b1e04f1c5628b4cea"}],"cinder/exception.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b8e3ddc03001d03b94a66ffaea546d9a83350ed4","unresolved":false,"context_lines":[{"line_number":1311,"context_line":""},{"line_number":1312,"context_line":""},{"line_number":1313,"context_line":"# Reduxio driver"},{"line_number":1314,"context_line":"class RdxDriverException(VolumeDriverException):"},{"line_number":1315,"context_line":"    message \u003d _(\"Reduxio Cinder Driver exception\")"},{"line_number":1316,"context_line":""},{"line_number":1317,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"5a74a57a_b592204a","line":1314,"updated":"2016-11-29 16:04:49.000000000","message":"This exception is not used by the driver.  Please remove it.","commit_id":"e200e48c3310cd57142b153b1e04f1c5628b4cea"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b8e3ddc03001d03b94a66ffaea546d9a83350ed4","unresolved":false,"context_lines":[{"line_number":1315,"context_line":"    message \u003d _(\"Reduxio Cinder Driver exception\")"},{"line_number":1316,"context_line":""},{"line_number":1317,"context_line":""},{"line_number":1318,"context_line":"class ReduxioAPIDriverException(RdxDriverException):"},{"line_number":1319,"context_line":"    message \u003d _(\"Reduxio Cinder Driver API exception\")"},{"line_number":1320,"context_line":""},{"line_number":1321,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"5a74a57a_55ac6c8c","line":1318,"updated":"2016-11-29 16:04:49.000000000","message":"This exception is not used by the driver.  Please remove it.","commit_id":"e200e48c3310cd57142b153b1e04f1c5628b4cea"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"7efe6c2ee691e7e84cfa57ab54138f0f77403734","unresolved":false,"context_lines":[{"line_number":33,"context_line":"from webob.util import status_reasons"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"from cinder.i18n import _, _LE"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"exc_log_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":18,"id":"5a74a57a_da93fcf8","line":36,"updated":"2016-11-30 21:53:39.000000000","message":"Unrelated change here, please remove from this patch.","commit_id":"f34b0ff92ce5c4598c27e2761fd3ad846974aa99"}],"cinder/tests/unit/test_reduxio.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0fcc09f8bb7588462e8b2f3dff6ad41955d71f42","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2014 Pure Storage, Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":5,"id":"3aaa91ec_e115cc49","line":1,"updated":"2016-06-27 14:21:27.000000000","message":"Pure?","commit_id":"2d71f047bed10622ebf1db03ca8b9b0f38195850"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0fcc09f8bb7588462e8b2f3dff6ad41955d71f42","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import mock"},{"line_number":17,"context_line":"import random"},{"line_number":18,"context_line":"import string"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from cinder import exception"},{"line_number":22,"context_line":"from cinder import test"}],"source_content_type":"text/x-python","patch_set":5,"id":"3aaa91ec_f30c7f3d","line":19,"updated":"2016-06-27 14:21:27.000000000","message":"Remove extra line here.","commit_id":"2d71f047bed10622ebf1db03ca8b9b0f38195850"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0fcc09f8bb7588462e8b2f3dff6ad41955d71f42","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from cinder import test"},{"line_number":23,"context_line":"from oslo_utils import units"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from cinder.volume.drivers.reduxio.rdx_cli_api import RdxApiCmd"},{"line_number":26,"context_line":"from cinder.volume.drivers.reduxio.rdx_cli_api import ReduxioAPI"},{"line_number":27,"context_line":"from cinder.volume.drivers.reduxio.rdx_exceptions import \\"},{"line_number":28,"context_line":"    ReduxioAPIDriverException"}],"source_content_type":"text/x-python","patch_set":5,"id":"3aaa91ec_13a4ab06","line":25,"updated":"2016-06-27 14:21:27.000000000","message":"Don\u0027t import classes directly, import the module only.","commit_id":"2d71f047bed10622ebf1db03ca8b9b0f38195850"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0fcc09f8bb7588462e8b2f3dff6ad41955d71f42","unresolved":false,"context_lines":[{"line_number":30,"context_line":"from cinder.volume.drivers.reduxio.rdx_iscsi_driver import ReduxioISCSIDriver"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"DRIVER_PATH \u003d \"cinder.volume.drivers.\" \\"},{"line_number":34,"context_line":"              \"reduxio.rdx_iscsi_driver.ReduxioISCSIDriver\""},{"line_number":35,"context_line":"API_PATH \u003d \"cinder.volume.drivers.reduxio.rdx_cli_api.ReduxioAPI\""},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3aaa91ec_93bd3b05","line":33,"updated":"2016-06-27 14:21:27.000000000","message":"Avoid use of \\ for line continuation. If you need to span multiple lines it\u0027s preferred to wrap things in ().","commit_id":"2d71f047bed10622ebf1db03ca8b9b0f38195850"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"7cdc8dfcd2c5a2b27ccca555062d68780bc7cdeb","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import string"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from cinder import exception"},{"line_number":21,"context_line":"from cinder import test"},{"line_number":22,"context_line":"from oslo_utils import units"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from cinder.volume.drivers.reduxio import rdx_cli_api"}],"source_content_type":"text/x-python","patch_set":11,"id":"1aa78d24_0907131e","line":21,"updated":"2016-07-10 12:10:33.000000000","message":"Please organize imports into groups of standard modules, third party, and local.","commit_id":"22148eee249916d792f867a695941464ec19f48f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"265fa33fb1347713cfa9a195767404003d7394ab","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from cinder import test"},{"line_number":24,"context_line":"from cinder.volume.drivers.reduxio import rdx_cli_api"},{"line_number":25,"context_line":"from cinder.volume.drivers.reduxio import rdx_iscsi_driver"},{"line_number":26,"context_line":"from cinder.volume.drivers.reduxio.rdx_iscsi_driver import ReduxioISCSIDriver"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"DRIVER_PATH \u003d (\"cinder.volume.drivers.\""},{"line_number":29,"context_line":"               \"reduxio.rdx_iscsi_driver.ReduxioISCSIDriver\")"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a74a57a_ac05d77a","line":26,"updated":"2016-11-27 18:41:48.000000000","message":"Import module not object.  Line 26 can be removed since you\u0027ve already imported rdx_iscsi_driver on line 25.","commit_id":"fea728daabf2df4ddc60d9119c32d2b97337fc03"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"c72f9c5c052ab5d557adbc3c59fe3148a3226091","unresolved":false,"context_lines":[{"line_number":27,"context_line":"DRIVER_PATH \u003d (\"cinder.volume.drivers.\""},{"line_number":28,"context_line":"               \"reduxio.rdx_iscsi_driver.ReduxioISCSIDriver\")"},{"line_number":29,"context_line":"API_PATH \u003d \"cinder.volume.drivers.reduxio.rdx_cli_api.ReduxioAPI\""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"TARGET \u003d \"mock_target\""},{"line_number":32,"context_line":"TARGET_USER \u003d \"rdxadmin\""},{"line_number":33,"context_line":"TARGET_PASSWORD \u003d \"mock_password\""}],"source_content_type":"text/x-python","patch_set":16,"id":"5a74a57a_e38bf11c","line":30,"updated":"2016-11-29 21:29:51.000000000","message":"Might want to use the fakes values here to set some of these things up?","commit_id":"e200e48c3310cd57142b153b1e04f1c5628b4cea"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f1fe4b46e95a76fb2f84bbea1062dae34bb905b4","unresolved":false,"context_lines":[{"line_number":383,"context_line":"    def test_manage_existing_get_size(self, mock_run_cmd):"},{"line_number":384,"context_line":"        source_name \u003d \u0027test-source\u0027"},{"line_number":385,"context_line":"        self.driver.rdxApi.find_volume_by_name \u003d mock.Mock()"},{"line_number":386,"context_line":"        assert ((units.Gi * 10) \u003d\u003d 10737418240)"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"        vol_cli_ret \u003d {"},{"line_number":389,"context_line":"            \u0027name\u0027: source_name,"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a71b18c_9449a491","line":386,"range":{"start_line":386,"start_character":8,"end_line":386,"end_character":47},"updated":"2016-12-01 08:01:30.000000000","message":"No need to assert on constant values.","commit_id":"52d5c77bd859a8954de654264d64150174e90d4f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f1fe4b46e95a76fb2f84bbea1062dae34bb905b4","unresolved":false,"context_lines":[{"line_number":394,"context_line":""},{"line_number":395,"context_line":"        self.driver.rdxApi.find_volume_by_name.return_value \u003d vol_cli_ret"},{"line_number":396,"context_line":"        ret \u003d self.driver.manage_existing_get_size(VOLUME, source_vol)"},{"line_number":397,"context_line":"        assert (ret \u003d\u003d 10)"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"        vol_cli_ret[\"size\"] \u003d units.Gi * 9"},{"line_number":400,"context_line":"        self.driver.rdxApi.find_volume_by_name.return_value \u003d vol_cli_ret"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a71b18c_d4431c6b","line":397,"range":{"start_line":397,"start_character":8,"end_line":397,"end_character":14},"updated":"2016-12-01 08:01:30.000000000","message":"Use self.assertEqual(10, ret)","commit_id":"52d5c77bd859a8954de654264d64150174e90d4f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f1fe4b46e95a76fb2f84bbea1062dae34bb905b4","unresolved":false,"context_lines":[{"line_number":399,"context_line":"        vol_cli_ret[\"size\"] \u003d units.Gi * 9"},{"line_number":400,"context_line":"        self.driver.rdxApi.find_volume_by_name.return_value \u003d vol_cli_ret"},{"line_number":401,"context_line":"        ret \u003d self.driver.manage_existing_get_size(VOLUME, source_vol)"},{"line_number":402,"context_line":"        assert (ret !\u003d 10)"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"    @mock.patch.object(rdx_cli_api.ReduxioAPI, \"_run_cmd\")"},{"line_number":405,"context_line":"    @mock_api(False)"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a71b18c_345b7056","line":402,"updated":"2016-12-01 08:01:30.000000000","message":"Same.","commit_id":"52d5c77bd859a8954de654264d64150174e90d4f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b4e106ef64bb91ff20d128704f3c057a041e84a4","unresolved":false,"context_lines":[{"line_number":329,"context_line":"        random_uuid2 \u003d self.generate_random_uuid()"},{"line_number":330,"context_line":"        result1 \u003d self.driver._cinder_id_to_rdx(random_uuid1)"},{"line_number":331,"context_line":"        result2 \u003d self.driver._cinder_id_to_rdx(random_uuid2)"},{"line_number":332,"context_line":"        self.assertEqual(len(result1), rdx_iscsi_driver.RDX_CLI_MAX_VOL_LENGTH)"},{"line_number":333,"context_line":"        self.assertEqual(len(result2), rdx_iscsi_driver.RDX_CLI_MAX_VOL_LENGTH)"},{"line_number":334,"context_line":"        self.assertNotEqual(result1, result2)"},{"line_number":335,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"3a71b18c_aae8c27d","line":332,"range":{"start_line":332,"start_character":8,"end_line":332,"end_character":79},"updated":"2016-12-02 05:00:14.000000000","message":"It should be expected, actual.  This is reversed.  Should be:\n\nself.assertEqual(rdx_iscsi_driver.RDX_CLI_MAX_VOL_LENGTH, result1)","commit_id":"b169465b37d3a38900ede68b8e8fc093b7e762c0"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b4e106ef64bb91ff20d128704f3c057a041e84a4","unresolved":false,"context_lines":[{"line_number":330,"context_line":"        result1 \u003d self.driver._cinder_id_to_rdx(random_uuid1)"},{"line_number":331,"context_line":"        result2 \u003d self.driver._cinder_id_to_rdx(random_uuid2)"},{"line_number":332,"context_line":"        self.assertEqual(len(result1), rdx_iscsi_driver.RDX_CLI_MAX_VOL_LENGTH)"},{"line_number":333,"context_line":"        self.assertEqual(len(result2), rdx_iscsi_driver.RDX_CLI_MAX_VOL_LENGTH)"},{"line_number":334,"context_line":"        self.assertNotEqual(result1, result2)"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    @mock.patch.object(rdx_cli_api.ReduxioAPI, \"_run_cmd\")"}],"source_content_type":"text/x-python","patch_set":20,"id":"3a71b18c_6a95cae2","line":333,"updated":"2016-12-02 05:00:14.000000000","message":"Same","commit_id":"b169465b37d3a38900ede68b8e8fc093b7e762c0"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b4e106ef64bb91ff20d128704f3c057a041e84a4","unresolved":false,"context_lines":[{"line_number":398,"context_line":"        vol_cli_ret[\"size\"] \u003d units.Gi * 9"},{"line_number":399,"context_line":"        self.driver.rdxApi.find_volume_by_name.return_value \u003d vol_cli_ret"},{"line_number":400,"context_line":"        ret \u003d self.driver.manage_existing_get_size(VOLUME, source_vol)"},{"line_number":401,"context_line":"        self.assertNotEqual(ret, 10)"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"    @mock.patch.object(rdx_cli_api.ReduxioAPI, \"_run_cmd\")"},{"line_number":404,"context_line":"    @mock_api(False)"}],"source_content_type":"text/x-python","patch_set":20,"id":"3a71b18c_ca725ee5","line":401,"updated":"2016-12-02 05:00:14.000000000","message":"reversed.","commit_id":"b169465b37d3a38900ede68b8e8fc093b7e762c0"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b4e106ef64bb91ff20d128704f3c057a041e84a4","unresolved":false,"context_lines":[{"line_number":519,"context_line":"    @mock.patch.object(rdx_cli_api.ReduxioAPI, \"_run_cmd\")"},{"line_number":520,"context_line":"    @mock_api(False)"},{"line_number":521,"context_line":"    def test_get_volume_stats(self, mock_run_cmd):"},{"line_number":522,"context_line":"        pass"},{"line_number":523,"context_line":""},{"line_number":524,"context_line":"    @mock.patch.object(rdx_cli_api.ReduxioAPI, \"_run_cmd\")"},{"line_number":525,"context_line":"    @mock_api(False)"}],"source_content_type":"text/x-python","patch_set":20,"id":"3a71b18c_2a303201","line":522,"updated":"2016-12-02 05:00:14.000000000","message":"Are you not checking anything here?  Does get_volume_stats return correct data?","commit_id":"b169465b37d3a38900ede68b8e8fc093b7e762c0"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b4e106ef64bb91ff20d128704f3c057a041e84a4","unresolved":false,"context_lines":[{"line_number":625,"context_line":""},{"line_number":626,"context_line":"        mock_run_cmd.assert_has_calls([mock.call.driver._run_cmd(assign_cmd)])"},{"line_number":627,"context_line":""},{"line_number":628,"context_line":"        self.assertDictMatch(ret_connection_info, ISCSI_CONNECTION_INFO)"},{"line_number":629,"context_line":""},{"line_number":630,"context_line":"    @mock.patch.object(rdx_cli_api.ReduxioAPI, \"_run_cmd\")"},{"line_number":631,"context_line":"    @mock_api(False)"}],"source_content_type":"text/x-python","patch_set":20,"id":"3a71b18c_65ffbb01","line":628,"updated":"2016-12-02 05:00:14.000000000","message":"reversed.","commit_id":"b169465b37d3a38900ede68b8e8fc093b7e762c0"}],"cinder/volume/drivers/reduxio/__init__.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0fcc09f8bb7588462e8b2f3dff6ad41955d71f42","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\"\"\"Reduxio ISCSI volume Driver.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"3aaa91ec_93f09bcb","line":1,"updated":"2016-06-27 14:21:27.000000000","message":"__init__ files that don\u0027t have any actual code should just be kept empty.","commit_id":"2d71f047bed10622ebf1db03ca8b9b0f38195850"}],"cinder/volume/drivers/reduxio/rdx_cli_api.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0fcc09f8bb7588462e8b2f3dff6ad41955d71f42","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from cinder import utils"},{"line_number":25,"context_line":"from cinder.i18n import _LE, _LI"},{"line_number":26,"context_line":"from cinder.volume.drivers.reduxio.rdx_common import log_function"},{"line_number":27,"context_line":"import cinder.volume.drivers.reduxio.rdx_exceptions as rdx_exceptions"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"CONNECTION_RETRY_NUM \u003d 5"}],"source_content_type":"text/x-python","patch_set":5,"id":"3aaa91ec_13aaeb85","line":27,"updated":"2016-06-27 14:21:27.000000000","message":"Could be simpler as:\n\nfrom cinder.volume.drivers.reduxio import rdx_exceptions","commit_id":"2d71f047bed10622ebf1db03ca8b9b0f38195850"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0fcc09f8bb7588462e8b2f3dff6ad41955d71f42","unresolved":false,"context_lines":[{"line_number":151,"context_line":"            self.connected \u003d True"},{"line_number":152,"context_line":"        except paramiko.ssh_exception.AuthenticationException:"},{"line_number":153,"context_line":"            raise rdx_exceptions.RdxAPIConnectionException("},{"line_number":154,"context_line":"                \"Authentication Error. Check login credentials\")"},{"line_number":155,"context_line":"        except Exception as e:"},{"line_number":156,"context_line":"            LOG.error(_LE(\"Exception in connecting to Reduxio CLI: %s\"),"},{"line_number":157,"context_line":"                      six.text_type(e))"}],"source_content_type":"text/x-python","patch_set":5,"id":"3aaa91ec_73c08f2b","line":154,"updated":"2016-06-27 14:21:27.000000000","message":"Needs _() translation marker.","commit_id":"2d71f047bed10622ebf1db03ca8b9b0f38195850"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0fcc09f8bb7588462e8b2f3dff6ad41955d71f42","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                \"Authentication Error. Check login credentials\")"},{"line_number":155,"context_line":"        except Exception as e:"},{"line_number":156,"context_line":"            LOG.error(_LE(\"Exception in connecting to Reduxio CLI: %s\"),"},{"line_number":157,"context_line":"                      six.text_type(e))"},{"line_number":158,"context_line":"            raise rdx_exceptions.RdxAPIConnectionException("},{"line_number":159,"context_line":"                \"Failed to create ssh connection to Reduxio.\" +"},{"line_number":160,"context_line":"                \"Please check network connection or Reduxio hostname/IP.\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"3aaa91ec_53c9135a","line":157,"range":{"start_line":157,"start_character":22,"end_line":157,"end_character":38},"updated":"2016-06-27 14:21:27.000000000","message":"Just change this to LOG.exception and get rid of formatting of the exception into the log message.","commit_id":"2d71f047bed10622ebf1db03ca8b9b0f38195850"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0fcc09f8bb7588462e8b2f3dff6ad41955d71f42","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        except Exception as e:"},{"line_number":156,"context_line":"            LOG.error(_LE(\"Exception in connecting to Reduxio CLI: %s\"),"},{"line_number":157,"context_line":"                      six.text_type(e))"},{"line_number":158,"context_line":"            raise rdx_exceptions.RdxAPIConnectionException("},{"line_number":159,"context_line":"                \"Failed to create ssh connection to Reduxio.\" +"},{"line_number":160,"context_line":"                \"Please check network connection or Reduxio hostname/IP.\")"},{"line_number":161,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3aaa91ec_53d0f3f7","line":158,"updated":"2016-06-27 14:21:27.000000000","message":"Needs _() translation marker.","commit_id":"2d71f047bed10622ebf1db03ca8b9b0f38195850"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0fcc09f8bb7588462e8b2f3dff6ad41955d71f42","unresolved":false,"context_lines":[{"line_number":156,"context_line":"            LOG.error(_LE(\"Exception in connecting to Reduxio CLI: %s\"),"},{"line_number":157,"context_line":"                      six.text_type(e))"},{"line_number":158,"context_line":"            raise rdx_exceptions.RdxAPIConnectionException("},{"line_number":159,"context_line":"                \"Failed to create ssh connection to Reduxio.\" +"},{"line_number":160,"context_line":"                \"Please check network connection or Reduxio hostname/IP.\")"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    @utils.synchronized(CONNECT_LOCK_NAME, external\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3aaa91ec_93da5b16","line":159,"range":{"start_line":159,"start_character":62,"end_line":159,"end_character":63},"updated":"2016-06-27 14:21:27.000000000","message":"Remove \"+\" from the end. Also needs space after the . so the next line doesn\u0027t result in \"Reduxio.Please\"","commit_id":"2d71f047bed10622ebf1db03ca8b9b0f38195850"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0fcc09f8bb7588462e8b2f3dff6ad41955d71f42","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        On failure, the function retries the command. After retry threshold"},{"line_number":167,"context_line":"        the function throws an error."},{"line_number":168,"context_line":"        \"\"\""},{"line_number":169,"context_line":"        cmd.json()"},{"line_number":170,"context_line":"        LOG.info(_LI(\"Running cmd: %s\"), cmd)"},{"line_number":171,"context_line":"        success \u003d False"},{"line_number":172,"context_line":"        for x in range(1, CONNECTION_RETRY_NUM):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3aaa91ec_130b0b7f","line":169,"updated":"2016-06-27 14:21:27.000000000","message":"Why is json() being called here?","commit_id":"2d71f047bed10622ebf1db03ca8b9b0f38195850"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0fcc09f8bb7588462e8b2f3dff6ad41955d71f42","unresolved":false,"context_lines":[{"line_number":178,"context_line":"                break"},{"line_number":179,"context_line":"            except Exception as e:"},{"line_number":180,"context_line":"                LOG.error(_LE(\"Error in running command: %s\"),"},{"line_number":181,"context_line":"                          six.text_type(e))"},{"line_number":182,"context_line":"                LOG.error(_LE("},{"line_number":183,"context_line":"                    \"Failed running cli command, \""},{"line_number":184,"context_line":"                    \"retrying(%(cur)s/%(overall)s)\"),"}],"source_content_type":"text/x-python","patch_set":5,"id":"3aaa91ec_b37cb7ec","line":181,"updated":"2016-06-27 14:21:27.000000000","message":"Change to LOG.exception.","commit_id":"2d71f047bed10622ebf1db03ca8b9b0f38195850"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0fcc09f8bb7588462e8b2f3dff6ad41955d71f42","unresolved":false,"context_lines":[{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        if not success:"},{"line_number":190,"context_line":"            raise rdx_exceptions.RdxAPIConnectionException("},{"line_number":191,"context_line":"                \"Failed to connect to Redxuio CLI.\" +"},{"line_number":192,"context_line":"                \" Check your username,password or Reduxio Hostname/IP\")"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        str_out \u003d stdout.read()"}],"source_content_type":"text/x-python","patch_set":5,"id":"3aaa91ec_f3863fda","line":191,"updated":"2016-06-27 14:21:27.000000000","message":"Needs _(). Get rid of \"+\" at the end.","commit_id":"2d71f047bed10622ebf1db03ca8b9b0f38195850"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0fcc09f8bb7588462e8b2f3dff6ad41955d71f42","unresolved":false,"context_lines":[{"line_number":492,"context_line":"            if assign[\"host\"] \u003d\u003d host:"},{"line_number":493,"context_line":"                return assign"},{"line_number":494,"context_line":"        raise rdx_exceptions.RdxAPICommandException("},{"line_number":495,"context_line":"            \"No such assignment vol:{}, host:{}\".format(vol, host))"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"    # Settings"},{"line_number":498,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3aaa91ec_136cab07","line":495,"updated":"2016-06-27 14:21:27.000000000","message":"Needs _()","commit_id":"2d71f047bed10622ebf1db03ca8b9b0f38195850"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"b3ce9a8900b6484b37a5e6f15692192c44fe70db","unresolved":false,"context_lines":[{"line_number":151,"context_line":"            raise rdx_exceptions.RdxAPIConnectionException(_("},{"line_number":152,"context_line":"                \"Authentication Error. Check login credentials\"))"},{"line_number":153,"context_line":"        except Exception as e:"},{"line_number":154,"context_line":"            LOG.exeption(_(\"Exception in connecting to Reduxio CLI: %s\"), e)"},{"line_number":155,"context_line":"            raise rdx_exceptions.RdxAPIConnectionException(_("},{"line_number":156,"context_line":"                \"Failed to create ssh connection to Reduxio.\""},{"line_number":157,"context_line":"                \" Please check network connection or Reduxio hostname/IP.\"))"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_30d96058","line":154,"range":{"start_line":154,"start_character":72,"end_line":154,"end_character":75},"updated":"2016-06-29 13:16:47.000000000","message":"The exception should not be sent to LOG.exception. This will automatically log the exception that\u0027s in scope, so this would result in the exception being logged twice.","commit_id":"30257e623e53dc95398630192dbcbae2ce85326d"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"b3ce9a8900b6484b37a5e6f15692192c44fe70db","unresolved":false,"context_lines":[{"line_number":174,"context_line":"                success \u003d True"},{"line_number":175,"context_line":"                break"},{"line_number":176,"context_line":"            except Exception as e:"},{"line_number":177,"context_line":"                LOG.exeption(_LE(\"Error in running command: %s\") % e)"},{"line_number":178,"context_line":"                LOG.error(_LE("},{"line_number":179,"context_line":"                    \"Failed running cli command, \""},{"line_number":180,"context_line":"                    \"retrying(%(cur)s/%(overall)s)\") %"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_b0e5500a","line":177,"range":{"start_line":177,"start_character":64,"end_line":177,"end_character":68},"updated":"2016-06-29 13:16:47.000000000","message":"Same. And shouldn\u0027t use %","commit_id":"30257e623e53dc95398630192dbcbae2ce85326d"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"b3ce9a8900b6484b37a5e6f15692192c44fe70db","unresolved":false,"context_lines":[{"line_number":177,"context_line":"                LOG.exeption(_LE(\"Error in running command: %s\") % e)"},{"line_number":178,"context_line":"                LOG.error(_LE("},{"line_number":179,"context_line":"                    \"Failed running cli command, \""},{"line_number":180,"context_line":"                    \"retrying(%(cur)s/%(overall)s)\") %"},{"line_number":181,"context_line":"                    {\u0027cur\u0027: x, \u0027overall\u0027: CONNECTION_RETRY_NUM})"},{"line_number":182,"context_line":"                self.connected \u003d False"},{"line_number":183,"context_line":"                time.sleep(CLI_CONNECTION_RETRY_SLEEP)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_70b648fa","line":180,"range":{"start_line":180,"start_character":52,"end_line":180,"end_character":54},"updated":"2016-06-29 13:16:47.000000000","message":"% \u003e ,","commit_id":"30257e623e53dc95398630192dbcbae2ce85326d"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"7cdc8dfcd2c5a2b27ccca555062d68780bc7cdeb","unresolved":false,"context_lines":[{"line_number":15,"context_line":"\"\"\"Reduxio CLI intrface class for Reduxio Cinder Driver.\"\"\""},{"line_number":16,"context_line":"import datetime"},{"line_number":17,"context_line":"import json"},{"line_number":18,"context_line":"import paramiko"},{"line_number":19,"context_line":"import time"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from oslo_log import log as logging"}],"source_content_type":"text/x-python","patch_set":11,"id":"1aa78d24_49011b06","line":18,"updated":"2016-07-10 12:10:33.000000000","message":"paramiko is a third party import so should go with oslo_log.","commit_id":"22148eee249916d792f867a695941464ec19f48f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6ee55cd05d3b9d35a4c390195ac9738b15816a63","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    def __eq__(self, other):"},{"line_number":121,"context_line":"        \"\"\"Compare commands based on their str command representations.\"\"\""},{"line_number":122,"context_line":"        if isinstance(other, self.__class__):"},{"line_number":123,"context_line":"            return str(self).strip() \u003d\u003d str(other).strip()"},{"line_number":124,"context_line":"        else:"},{"line_number":125,"context_line":"            return False"},{"line_number":126,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"5a74a57a_50f3689e","line":123,"updated":"2016-11-23 21:12:53.000000000","message":"str -\u003e six.text_type","commit_id":"1277f43dc47241df52890f9e24fac1a484f39504"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"265fa33fb1347713cfa9a195767404003d7394ab","unresolved":false,"context_lines":[{"line_number":171,"context_line":"            try:"},{"line_number":172,"context_line":"                self._reconnect_if_needed()"},{"line_number":173,"context_line":"                stdin, stdout, stderr \u003d self.ssh.exec_command("},{"line_number":174,"context_line":"                    command\u003dstr(cmd), timeout\u003dCLI_SSH_CMD_TIMEOUT)"},{"line_number":175,"context_line":"                success \u003d True"},{"line_number":176,"context_line":"                break"},{"line_number":177,"context_line":"            except Exception:"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a74a57a_2cd38705","line":174,"updated":"2016-11-27 18:41:48.000000000","message":"str -\u003e six.text_type","commit_id":"fea728daabf2df4ddc60d9119c32d2b97337fc03"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"265fa33fb1347713cfa9a195767404003d7394ab","unresolved":false,"context_lines":[{"line_number":181,"context_line":"                    {\u0027cur\u0027: x, \u0027overall\u0027: CONNECTION_RETRY_NUM}"},{"line_number":182,"context_line":"                )"},{"line_number":183,"context_line":"                self.connected \u003d False"},{"line_number":184,"context_line":"                time.sleep(CLI_CONNECTION_RETRY_SLEEP)"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        if not success:"},{"line_number":187,"context_line":"            raise exception.RdxAPIConnectionException(_("}],"source_content_type":"text/x-python","patch_set":15,"id":"5a74a57a_4cd0c3f6","line":184,"updated":"2016-11-27 18:41:48.000000000","message":"Suggest use eventlet.sleep.","commit_id":"fea728daabf2df4ddc60d9119c32d2b97337fc03"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b4e106ef64bb91ff20d128704f3c057a041e84a4","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        flags_str \u003d \"\""},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        for key in sorted(self.flags):"},{"line_number":102,"context_line":"            flags_str +\u003d \" -{} \\\"{}\\\"\".format(key, self.flags[key])"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        for booleanFlag in sorted(self.booleanFlags):"},{"line_number":105,"context_line":"            flags_str +\u003d \" -{}\".format(booleanFlag)"}],"source_content_type":"text/x-python","patch_set":20,"id":"3a71b18c_4af00e91","line":102,"updated":"2016-12-02 05:00:14.000000000","message":"Please replace this with the %(var)s format.  Please change other places too.","commit_id":"b169465b37d3a38900ede68b8e8fc093b7e762c0"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"e859b283604fecc6ee8067c88d78624e26bc98f0","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        \"\"\"Set a command argument.\"\"\""},{"line_number":84,"context_line":"        self.arg \u003d value"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def flag(self, name, value):"},{"line_number":87,"context_line":"        \"\"\"Set a flag and its value.\"\"\""},{"line_number":88,"context_line":"        if value is not None:"},{"line_number":89,"context_line":"            self.flags[name.strip()] \u003d value"}],"source_content_type":"text/x-python","patch_set":21,"id":"3a71b18c_011bc6ca","line":86,"updated":"2016-12-06 14:40:16.000000000","message":"Please, use more readable method names for \u0027setters\u0027. E.g.: set_flag(self, name, value)","commit_id":"9ed6b278c94466931cf757ec3f57dcb1bf266f87"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"e859b283604fecc6ee8067c88d78624e26bc98f0","unresolved":false,"context_lines":[{"line_number":191,"context_line":"                \" Check your username,password or Reduxio Hostname/IP\"))"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        str_out \u003d stdout.read()"},{"line_number":194,"context_line":"        data \u003d json.loads(str_out.decode(\u0027utf-8\u0027))"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"        if stdout.channel.recv_exit_status() !\u003d 0:"},{"line_number":197,"context_line":"            LOG.error(_LE(\"Failed running cli command: %s\"), data[\"msg\"])"}],"source_content_type":"text/x-python","patch_set":21,"id":"3a71b18c_419bfe17","line":194,"updated":"2016-12-06 14:40:16.000000000","message":"\u0027decode\u0027 function will fail on Python3","commit_id":"9ed6b278c94466931cf757ec3f57dcb1bf266f87"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"26252f66dceb1c24a3b4eda6d41dfb14d7079b6a","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        flags_str \u003d \"\""},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        for key in sorted(self.flags):"},{"line_number":102,"context_line":"            flags_str +\u003d \" -%(flag)s \\\"%(value)s\\\"\" % \\"},{"line_number":103,"context_line":"                         {\"flag\": key, \"value\": self.flags[key]}"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        for booleanFlag in sorted(self.booleanFlags):"}],"source_content_type":"text/x-python","patch_set":22,"id":"3a71b18c_8316c8ef","line":102,"range":{"start_line":102,"start_character":54,"end_line":102,"end_character":55},"updated":"2016-12-07 13:58:34.000000000","message":"Please wrap all of these in () to be able to span multiple lines. We have made an effort to get rid of using \\ for multiline code.","commit_id":"414616e5ddcb55ef0660d8560aafd42a71e51a32"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"72d09e1845d36969baf2a21f9c4a9de3e60caebf","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        if not success:"},{"line_number":189,"context_line":"            raise exception.RdxAPIConnectionException(_("},{"line_number":190,"context_line":"                \"Failed to connect to Redxuio CLI.\""},{"line_number":191,"context_line":"                \" Check your username,password or Reduxio Hostname/IP\"))"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        str_out \u003d stdout.read()"},{"line_number":194,"context_line":"        # Python 2.7/3.4 compatibility with the decode method"}],"source_content_type":"text/x-python","patch_set":23,"id":"3a71b18c_cb2a5990","line":191,"range":{"start_line":191,"start_character":37,"end_line":191,"end_character":38},"updated":"2016-12-08 16:48:21.000000000","message":"Missing space after the comma if you do another update.","commit_id":"c7dfb1005f9ff45e9be765c05729328b5e8956ed"}],"cinder/volume/drivers/reduxio/rdx_common.py":[{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"cc559e9d3c1a60e089779d6ac747e1b62f6f63f5","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"\"\"\"Common utilities for Reduxio Cinder Driver.\"\"\""},{"line_number":16,"context_line":"from cinder.i18n import _LI"},{"line_number":17,"context_line":"from oslo_log import log as logging"},{"line_number":18,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_b707ff16","line":17,"updated":"2016-06-23 17:23:48.000000000","message":"http://docs.openstack.org/developer/hacking/#real-world-import-order-examples","commit_id":"09e5320ec4296617a45397014126c2b5d8e57afe"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"17d7491bbe1e3d8ade49760e7ede72ca8e39ce44","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"\"\"\"Common utilities for Reduxio Cinder Driver.\"\"\""},{"line_number":16,"context_line":"from cinder.i18n import _LI"},{"line_number":17,"context_line":"from oslo_log import log as logging"},{"line_number":18,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_dc7912ca","line":17,"range":{"start_line":17,"start_character":28,"end_line":17,"end_character":35},"updated":"2016-06-23 17:26:28.000000000","message":"reorder modules if do another patch\nfrom oslo_log import log as logging\n\nfrom cinder.i18n import _LI","commit_id":"09e5320ec4296617a45397014126c2b5d8e57afe"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"17d7491bbe1e3d8ade49760e7ede72ca8e39ce44","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            for entry in"},{"line_number":41,"context_line":"            args_array) + \")\""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        method_name_simple \u003d \"%(cls_name)s.%(method)s\" \\"},{"line_number":44,"context_line":"                             % {\"cls_name\": cls_name, \"method\": f.__name__}"},{"line_number":45,"context_line":"        method_name \u003d \"%(cls_name)s.%(method)s%(params)s\" % \\"},{"line_number":46,"context_line":"                      {\"cls_name\": cls_name,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_b76c1fd1","line":43,"range":{"start_line":43,"start_character":55,"end_line":43,"end_character":56},"updated":"2016-06-23 17:26:28.000000000","message":"do not use \\ for extension\nUse ()","commit_id":"09e5320ec4296617a45397014126c2b5d8e57afe"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"17d7491bbe1e3d8ade49760e7ede72ca8e39ce44","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                      {\"cls_name\": cls_name,"},{"line_number":47,"context_line":"                       \"method\": f.__name__,"},{"line_number":48,"context_line":"                       \"params\": parameters}"},{"line_number":49,"context_line":"        LOG.debug(_LI(\"Entering %s\"), method_name)"},{"line_number":50,"context_line":"        result \u003d f(*args, **kwargs)"},{"line_number":51,"context_line":"        LOG.debug(_LI(\"Leaving %s\"), method_name_simple + \", result\u003d \""},{"line_number":52,"context_line":"                  + str(result))"}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_770757ca","line":49,"range":{"start_line":49,"start_character":0,"end_line":49,"end_character":50},"updated":"2016-06-23 17:26:28.000000000","message":"Please see below link:\nhttp://docs.openstack.org/developer/oslo.i18n/guidelines.html","commit_id":"09e5320ec4296617a45397014126c2b5d8e57afe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0fcc09f8bb7588462e8b2f3dff6ad41955d71f42","unresolved":false,"context_lines":[{"line_number":18,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"def log_function(f):"},{"line_number":22,"context_line":"    \"\"\"A wrapper decorator which logs the method name and params.\"\"\""},{"line_number":23,"context_line":"    def wrapper(*args, **kwargs):"},{"line_number":24,"context_line":"        cls_name \u003d args[0].__class__.__name__"}],"source_content_type":"text/x-python","patch_set":5,"id":"3aaa91ec_5612a159","line":21,"updated":"2016-06-27 14:21:27.000000000","message":"There is existing common code similar to this that you might want to use instead.\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/netapp/eseries/library.py#L54","commit_id":"2d71f047bed10622ebf1db03ca8b9b0f38195850"}],"cinder/volume/drivers/reduxio/rdx_exceptions.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6ee55cd05d3b9d35a4c390195ac9738b15816a63","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class RdxAPIConnectionException(ReduxioAPIDriverException):"},{"line_number":33,"context_line":"    message \u003d _(\"Reduxio API Connection Exception\")"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a74a57a_d0fe986a","line":33,"updated":"2016-11-23 21:12:53.000000000","message":"Please move these exceptions to exception.py under cinder.","commit_id":"1277f43dc47241df52890f9e24fac1a484f39504"}],"cinder/volume/drivers/reduxio/rdx_iscsi_driver.py":[{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"cc559e9d3c1a60e089779d6ac747e1b62f6f63f5","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from cinder import exception"},{"line_number":17,"context_line":"from cinder.i18n import _, _LI"},{"line_number":18,"context_line":"from cinder.volume.drivers.reduxio.rdx_cli_api import ReduxioAPI"},{"line_number":19,"context_line":"from cinder.volume.drivers.reduxio.rdx_common import log_function"},{"line_number":20,"context_line":"from cinder.volume.drivers.reduxio.rdx_exceptions \\"},{"line_number":21,"context_line":"    import RdxAPICommandException"},{"line_number":22,"context_line":"from cinder.volume.drivers.reduxio.rdx_exceptions \\"}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_fc016e07","line":19,"updated":"2016-06-23 17:23:48.000000000","message":"http://docs.openstack.org/developer/hacking/#imports","commit_id":"09e5320ec4296617a45397014126c2b5d8e57afe"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"cc559e9d3c1a60e089779d6ac747e1b62f6f63f5","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from oslo_utils import units"},{"line_number":27,"context_line":"import random"},{"line_number":28,"context_line":"import six"},{"line_number":29,"context_line":"import string"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"# Constants"}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_dcfbd2bf","line":29,"updated":"2016-06-23 17:23:48.000000000","message":"import ordering is incorrect.  \n\nhttp://docs.openstack.org/developer/hacking/#import-order-template","commit_id":"09e5320ec4296617a45397014126c2b5d8e57afe"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"cc559e9d3c1a60e089779d6ac747e1b62f6f63f5","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    Version history:"},{"line_number":54,"context_line":"    1.0.0   -  Initial version - volume management, snapshots, BackDating(TM)."},{"line_number":55,"context_line":"    1.0.1   -  Capacity stats, fixed error handling for volume deletions."},{"line_number":56,"context_line":"    \"\"\""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":59,"context_line":"        \"\"\"Initialize Reduxio ISCSI Driver.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_9cdb0a4f","line":56,"updated":"2016-06-23 17:23:48.000000000","message":"missing the VERSION \u003d \"1.0.1\"","commit_id":"09e5320ec4296617a45397014126c2b5d8e57afe"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"cc559e9d3c1a60e089779d6ac747e1b62f6f63f5","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":59,"context_line":"        \"\"\"Initialize Reduxio ISCSI Driver.\"\"\""},{"line_number":60,"context_line":"        LOG.info(_LI(\"Initializing Reduxio ISCSI Driver\"))"},{"line_number":61,"context_line":"        super(ReduxioISCSIDriver, self).__init__(*args, **kwargs)"},{"line_number":62,"context_line":"        self.rdxApi \u003d None  # type: ReduxioAPI"},{"line_number":63,"context_line":"        self._stats \u003d {}"}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_3cc13655","line":60,"updated":"2016-06-23 17:23:48.000000000","message":"I\u0027d suggest debug here","commit_id":"09e5320ec4296617a45397014126c2b5d8e57afe"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"cc559e9d3c1a60e089779d6ac747e1b62f6f63f5","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            password\u003dself.configuration.san_password,"},{"line_number":79,"context_line":"            host\u003dself.configuration.san_ip)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    @staticmethod"},{"line_number":82,"context_line":"    # Reduxio entities names (which are also ids) are restricted to at most"},{"line_number":83,"context_line":"    # 31 chars. The following function maps cinder unique id to reduxio name."},{"line_number":84,"context_line":"    def _cinder_id_to_rdx(cinder_name):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_dc7e3218","line":81,"updated":"2016-06-23 17:23:48.000000000","message":"why is this static when you call it internally only ?","commit_id":"09e5320ec4296617a45397014126c2b5d8e57afe"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"cc559e9d3c1a60e089779d6ac747e1b62f6f63f5","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    def _cinder_id_to_rdx(cinder_name):"},{"line_number":85,"context_line":"        return cinder_name[:RDX_CLI_MAX_VOL_LENGTH]"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    @staticmethod"},{"line_number":88,"context_line":"    # We use Reduxio volume description to represent metadata regarding"},{"line_number":89,"context_line":"    # the cinder agent, in order to avoid multi managing the same volume"},{"line_number":90,"context_line":"    # from multiple cinder volume."}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_1c755a31","line":87,"updated":"2016-06-23 17:23:48.000000000","message":"same","commit_id":"09e5320ec4296617a45397014126c2b5d8e57afe"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"cc559e9d3c1a60e089779d6ac747e1b62f6f63f5","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    def _create_vol_managed_description(volume):"},{"line_number":92,"context_line":"        return AGENT_TYPE_OPENSTACK + \"_\" + volume[\"name\"]"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    @staticmethod"},{"line_number":95,"context_line":"    # This function parses the cli volume description and returns a dictionary"},{"line_number":96,"context_line":"    # containing the managed data (agent, cinder_volume_id)"},{"line_number":97,"context_line":"    def _get_managed_info(cli_vol):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_bca24697","line":94,"updated":"2016-06-23 17:23:48.000000000","message":"same","commit_id":"09e5320ec4296617a45397014126c2b5d8e57afe"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"cc559e9d3c1a60e089779d6ac747e1b62f6f63f5","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        except Exception:"},{"line_number":105,"context_line":"            return {AGENT_TYPE_KEY: None}"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    @staticmethod"},{"line_number":108,"context_line":"    def _get_existing_volume_ref_name(existing_ref):"},{"line_number":109,"context_line":"        \"\"\"Return the volume name of an existing ref.\"\"\""},{"line_number":110,"context_line":"        if \u0027source-name\u0027 in existing_ref:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_3cbdb6b7","line":107,"updated":"2016-06-23 17:23:48.000000000","message":"same","commit_id":"09e5320ec4296617a45397014126c2b5d8e57afe"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"cc559e9d3c1a60e089779d6ac747e1b62f6f63f5","unresolved":false,"context_lines":[{"line_number":256,"context_line":"                clone_name\u003dself._cinder_id_to_rdx(volume[\"name\"]),"},{"line_number":257,"context_line":"                description\u003dself._create_vol_managed_description(volume),"},{"line_number":258,"context_line":"                str_date\u003dvolume[METADATA_KEY][BACKDATE_META_FIELD]"},{"line_number":259,"context_line":"            )"},{"line_number":260,"context_line":"        else:"},{"line_number":261,"context_line":"            LOG.info(_LI(\"Cloning from now\"))"},{"line_number":262,"context_line":"            self.rdxApi.clone_volume("}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_17e37334","line":259,"updated":"2016-06-23 17:23:48.000000000","message":"the size of the new volume may be larger than the original.  You have to look in the volume object to find out.","commit_id":"09e5320ec4296617a45397014126c2b5d8e57afe"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"cc559e9d3c1a60e089779d6ac747e1b62f6f63f5","unresolved":false,"context_lines":[{"line_number":368,"context_line":"        volume_name \u003d self._cinder_id_to_rdx(volume[\u0027name\u0027])"},{"line_number":369,"context_line":"        self.rdxApi.update_volume(volume_name, size\u003dnew_size)"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"    @staticmethod"},{"line_number":372,"context_line":"    def _generate_initiator_name():"},{"line_number":373,"context_line":"        \"\"\"Generates random host name for reduxio cli.\"\"\""},{"line_number":374,"context_line":"        char_set \u003d string.ascii_lowercase"}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_573e9b8c","line":371,"updated":"2016-06-23 17:23:48.000000000","message":"no need to be static for a private method","commit_id":"09e5320ec4296617a45397014126c2b5d8e57afe"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"cc559e9d3c1a60e089779d6ac747e1b62f6f63f5","unresolved":false,"context_lines":[{"line_number":418,"context_line":"                \u0027discard\u0027: False,"},{"line_number":419,"context_line":"                \u0027volume_id\u0027: volume[\u0027id\u0027],"},{"line_number":420,"context_line":"                \u0027target_iqn\u0027: settings[\"network_configuration\"]["},{"line_number":421,"context_line":"                    \"iscsi_target_iqn\"],"},{"line_number":422,"context_line":"                \u0027target_portal\u0027: \"{}:{}\".format("},{"line_number":423,"context_line":"                    settings[\"iscsi_network1\"][\"controller_1_port_1\"],"},{"line_number":424,"context_line":"                    iscsi_port),"}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_975be3f5","line":421,"updated":"2016-06-23 17:23:48.000000000","message":"this is really hard to read.  I\u0027d suggest creating a local var prior to properties \u003d { \n\nto make this fit the length requirements.","commit_id":"09e5320ec4296617a45397014126c2b5d8e57afe"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"cc559e9d3c1a60e089779d6ac747e1b62f6f63f5","unresolved":false,"context_lines":[{"line_number":431,"context_line":""},{"line_number":432,"context_line":"        # if iscsi_network2 is not available,"},{"line_number":433,"context_line":"        # than multipath is disabled (ReduxioVE)"},{"line_number":434,"context_line":"        multipath \u003d \"iscsi_network2\" in settings"},{"line_number":435,"context_line":"        if multipath:"},{"line_number":436,"context_line":"            properties[\u0027data\u0027][\u0027target_portals\u0027] \u003d ["},{"line_number":437,"context_line":"                properties[\u0027data\u0027][\u0027target_portal\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_17fff3aa","line":434,"updated":"2016-06-23 17:23:48.000000000","message":"also, for multipath support you need to look in the connector.  \nIf multipath is False, that means it\u0027s not available on the n-cpu host.","commit_id":"09e5320ec4296617a45397014126c2b5d8e57afe"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"c0c7e8500b204488458295e89d4fd28953da5be6","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from cinder.volume.drivers.reduxio.rdx_cli_api import ReduxioAPI"},{"line_number":27,"context_line":"from cinder.volume.drivers.reduxio.rdx_common import log_function"},{"line_number":28,"context_line":"from cinder.volume.drivers.reduxio.rdx_exceptions \\"},{"line_number":29,"context_line":"    import RdxAPICommandException"},{"line_number":30,"context_line":"from cinder.volume.drivers.reduxio.rdx_exceptions \\"},{"line_number":31,"context_line":"    import ReduxioAPIDriverException"}],"source_content_type":"text/x-python","patch_set":4,"id":"3aaa91ec_067bce7c","line":28,"updated":"2016-06-27 13:28:32.000000000","message":"This is cleaner if you follow\n\nhttp://docs.openstack.org/developer/hacking/#imports\n\n- Do not import objects, only modules (*)","commit_id":"dd08bc71bb7bb4d2ef20ddc3f96666a8ba451048"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0fcc09f8bb7588462e8b2f3dff6ad41955d71f42","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from cinder import exception"},{"line_number":24,"context_line":"from cinder.i18n import _, _LI"},{"line_number":25,"context_line":"from cinder.volume.drivers.reduxio.rdx_cli_api import ReduxioAPI"},{"line_number":26,"context_line":"from cinder.volume.drivers.reduxio.rdx_common import log_function"},{"line_number":27,"context_line":"import cinder.volume.drivers.reduxio.rdx_exceptions as rdx_exceptions"},{"line_number":28,"context_line":"from cinder.volume.drivers.san import san"}],"source_content_type":"text/x-python","patch_set":5,"id":"3aaa91ec_166db9cc","line":25,"updated":"2016-06-27 14:21:27.000000000","message":"Import modules, not classes.","commit_id":"2d71f047bed10622ebf1db03ca8b9b0f38195850"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0fcc09f8bb7588462e8b2f3dff6ad41955d71f42","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"class ReduxioISCSIDriver(san.SanISCSIDriver):"},{"line_number":50,"context_line":"    \"\"\"OpenStack driver to support Reduxio storage systems."},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3aaa91ec_56c3c18a","line":48,"updated":"2016-06-27 14:21:27.000000000","message":"Please add the @cinder.interface.volumedriver decorator.","commit_id":"2d71f047bed10622ebf1db03ca8b9b0f38195850"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0fcc09f8bb7588462e8b2f3dff6ad41955d71f42","unresolved":false,"context_lines":[{"line_number":190,"context_line":"                name\u003dself._cinder_id_to_rdx(volume[\"name\"]))"},{"line_number":191,"context_line":"        except rdx_exceptions.RdxAPICommandException as e:"},{"line_number":192,"context_line":"            if \"No such volume\" not in six.text_type(e):"},{"line_number":193,"context_line":"                raise e"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    @log_function"},{"line_number":196,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3aaa91ec_36e39507","line":193,"range":{"start_line":193,"start_character":16,"end_line":193,"end_character":23},"updated":"2016-06-27 14:21:27.000000000","message":"Should just be \"raise\", not \"raise e\".","commit_id":"2d71f047bed10622ebf1db03ca8b9b0f38195850"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0fcc09f8bb7588462e8b2f3dff6ad41955d71f42","unresolved":false,"context_lines":[{"line_number":324,"context_line":"                                            bm_name\u003dbookmark_name)"},{"line_number":325,"context_line":"        except rdx_exceptions.RdxAPICommandException as e:"},{"line_number":326,"context_line":"            if \"No such bookmark\" not in six.text_type(e):"},{"line_number":327,"context_line":"                raise e"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"    @log_function"},{"line_number":330,"context_line":"    def get_volume_stats(self, refresh\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3aaa91ec_b6a4a5b9","line":327,"updated":"2016-06-27 14:21:27.000000000","message":"/raise e/raise/","commit_id":"2d71f047bed10622ebf1db03ca8b9b0f38195850"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0fcc09f8bb7588462e8b2f3dff6ad41955d71f42","unresolved":false,"context_lines":[{"line_number":470,"context_line":"                                     host_name\u003dcli_host[\"name\"])"},{"line_number":471,"context_line":"                return"},{"line_number":472,"context_line":"        raise rdx_exceptions.ReduxioAPIDriverException("},{"line_number":473,"context_line":"            \"Did not find matching reduxio host for initiator {}\".format("},{"line_number":474,"context_line":"                connector[\"initiator\"]))"}],"source_content_type":"text/x-python","patch_set":5,"id":"3aaa91ec_f69c6d5f","line":473,"updated":"2016-06-27 14:21:27.000000000","message":"_()","commit_id":"2d71f047bed10622ebf1db03ca8b9b0f38195850"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"1cba252da2ca465ea29d0082bafdaad7ba922140","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        target_vol_name \u003d self._get_existing_volume_ref_name(external_ref)"},{"line_number":166,"context_line":"        cli_vol \u003d self.rdxApi.find_volume_by_name(target_vol_name)"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"        return int(cli_vol[\u0027size\u0027] / units.Gi)"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    @cinder_utils.trace"},{"line_number":171,"context_line":"    def unmanage(self, volume):"}],"source_content_type":"text/x-python","patch_set":13,"id":"1aa78d24_986de69b","line":168,"updated":"2016-07-11 15:21:01.000000000","message":"This should round up rather than truncate when the size happens to not be on a GB boundary.","commit_id":"51b664cdcc4977da04f4ceb3f70527e1162af6bb"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6ee55cd05d3b9d35a4c390195ac9738b15816a63","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        then we create a clone from the specified time."},{"line_number":232,"context_line":"        The \u0027backdate\u0027 metadata value should be in the format of"},{"line_number":233,"context_line":"        Reduxio CLI date: mm/dd/yyyy-hh:mm:ss."},{"line_number":234,"context_line":"        for example: \u002702/17/2015-11:39:00."},{"line_number":235,"context_line":"        Note: Different timezones might be configured"},{"line_number":236,"context_line":"        for Reduxio and Openstack."},{"line_number":237,"context_line":"        The specified date must be related to Reduxio time settings."}],"source_content_type":"text/x-python","patch_set":14,"id":"5a74a57a_d06e98c8","line":234,"updated":"2016-11-23 21:12:53.000000000","message":"How does user find this exact timestamp?  Can user pick any timestamp since the volume was created?","commit_id":"1277f43dc47241df52890f9e24fac1a484f39504"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6ee55cd05d3b9d35a4c390195ac9738b15816a63","unresolved":false,"context_lines":[{"line_number":352,"context_line":"                \u0027driver_version\u0027: DRIVER_VERSION,"},{"line_number":353,"context_line":"                \u0027storage_protocol\u0027: REDUXIO_STORAGE_PROTOCOL,"},{"line_number":354,"context_line":"                \u0027consistencygroup_support\u0027: False,"},{"line_number":355,"context_line":"                \u0027thin_provisioning_support\u0027: True,"},{"line_number":356,"context_line":"                \u0027pools\u0027: [{"},{"line_number":357,"context_line":"                    \"pool_name\": backend_name,"},{"line_number":358,"context_line":"                    \"total_capacity_gb\": total,"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a74a57a_1021f04d","line":355,"updated":"2016-11-23 21:12:53.000000000","message":"Since the driver reports \u0027thin_provisioning_support\u0027 to True, it should also report provisioned_capacity_gb and max_over_subscription_ratio.  See example here:\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/lvm.py#L267","commit_id":"1277f43dc47241df52890f9e24fac1a484f39504"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6ee55cd05d3b9d35a4c390195ac9738b15816a63","unresolved":false,"context_lines":[{"line_number":357,"context_line":"                    \"pool_name\": backend_name,"},{"line_number":358,"context_line":"                    \"total_capacity_gb\": total,"},{"line_number":359,"context_line":"                    \"free_capacity_gb\": free,"},{"line_number":360,"context_line":"                    \"reserved_percentage\": 0,"},{"line_number":361,"context_line":"                    \"QoS_support\": False,"},{"line_number":362,"context_line":"                    \u0027multiattach\u0027: True"},{"line_number":363,"context_line":"                }]}"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a74a57a_f0e2b402","line":360,"updated":"2016-11-23 21:12:53.000000000","message":"User the parameter in cinder.conf rather than hard code it to 0:\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/lvm.py#L264","commit_id":"1277f43dc47241df52890f9e24fac1a484f39504"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6ee55cd05d3b9d35a4c390195ac9738b15816a63","unresolved":false,"context_lines":[{"line_number":438,"context_line":"        properties \u003d {"},{"line_number":439,"context_line":"            \u0027driver_volume_type\u0027: \u0027iscsi\u0027,"},{"line_number":440,"context_line":"            \u0027data\u0027: {"},{"line_number":441,"context_line":"                \u0027access_mode\u0027: \"rw\","},{"line_number":442,"context_line":"                \u0027target_discovered\u0027: False,"},{"line_number":443,"context_line":"                \u0027discard\u0027: False,"},{"line_number":444,"context_line":"                \u0027volume_id\u0027: volume[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a74a57a_d0993870","line":441,"updated":"2016-11-23 21:12:53.000000000","message":"Please remove the above line.  \u0027access_mode\u0027 is set in the manager.  If you hard code it here, it will prevent \u0027ro\u0027 volume from working.","commit_id":"1277f43dc47241df52890f9e24fac1a484f39504"},{"author":{"_account_id":22382,"name":"Mattan Shalev","email":"mattan@reduxio.com","username":"mattanShalev"},"change_message_id":"ef97e3e80fb818e8ab5dd05c2fb32a3b127a146d","unresolved":false,"context_lines":[{"line_number":230,"context_line":"        then we create a clone from the specified time."},{"line_number":231,"context_line":"        The \u0027backdate\u0027 metadata value should be in the format of"},{"line_number":232,"context_line":"        Reduxio CLI date: mm/dd/yyyy-hh:mm:ss."},{"line_number":233,"context_line":"        for example: \u002702/17/2015-11:39:00."},{"line_number":234,"context_line":"        Note: Different timezones might be configured"},{"line_number":235,"context_line":"        for Reduxio and Openstack."},{"line_number":236,"context_line":"        The specified date must be related to Reduxio time settings."}],"source_content_type":"text/x-python","patch_set":15,"id":"5a74a57a_2c98e7bf","line":233,"updated":"2016-11-27 17:31:54.000000000","message":"Xing-Yang: This is the point in Reduxio\u0027s Backdating. Reduxio keeps the volume\u0027s history for each second in the past (The amount of seconds is configurable globally in the system), without having the user creating \"snapshots\" every second.  The user then can to clone a volume from a specific second. If the timestamp doesn\u0027t represent a valid history point, an informative msg will be logged with the nearest available history point.","commit_id":"fea728daabf2df4ddc60d9119c32d2b97337fc03"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"265fa33fb1347713cfa9a195767404003d7394ab","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        pass"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def ensure_export(self, context, volume):"},{"line_number":273,"context_line":"        pass"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    @cinder_utils.trace"},{"line_number":276,"context_line":"    def create_snapshot(self, snapshot):"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a74a57a_acb797d6","line":273,"updated":"2016-11-27 18:41:48.000000000","message":"create_export and ensure_export can be removed.  The function in the base class does not do anything either.","commit_id":"fea728daabf2df4ddc60d9119c32d2b97337fc03"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"265fa33fb1347713cfa9a195767404003d7394ab","unresolved":false,"context_lines":[{"line_number":355,"context_line":"                    \"pool_name\": backend_name,"},{"line_number":356,"context_line":"                    \"total_capacity_gb\": total,"},{"line_number":357,"context_line":"                    \"free_capacity_gb\": free,"},{"line_number":358,"context_line":"                    \"reserved_percentage\": 0,"},{"line_number":359,"context_line":"                    \"QoS_support\": False,"},{"line_number":360,"context_line":"                    \u0027multiattach\u0027: True"},{"line_number":361,"context_line":"                }]}"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a74a57a_0caecb97","line":358,"updated":"2016-11-27 18:41:48.000000000","message":"reserved_percentage should read from cinder.conf rather than hard code to 0.","commit_id":"fea728daabf2df4ddc60d9119c32d2b97337fc03"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"c72f9c5c052ab5d557adbc3c59fe3148a3226091","unresolved":false,"context_lines":[{"line_number":42,"context_line":"DRIVER_VERSION \u003d \u00271.0.1\u0027"},{"line_number":43,"context_line":"HX550_INITIAL_PHYSICAL_CAPACITY \u003d 32 * 1024"},{"line_number":44,"context_line":"HX550_CAPACITY_LIMIT \u003d 200 * 1024"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"5a74a57a_239de959","line":45,"updated":"2016-11-29 21:29:51.000000000","message":"Should have CI_WIKI_NAME defined here.","commit_id":"e200e48c3310cd57142b153b1e04f1c5628b4cea"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e8bbe96966dc70f4f42543298f0c32b38f3fe95d","unresolved":false,"context_lines":[{"line_number":42,"context_line":"DRIVER_VERSION \u003d \u00271.0.1\u0027"},{"line_number":43,"context_line":"HX550_INITIAL_PHYSICAL_CAPACITY \u003d 32 * 1024"},{"line_number":44,"context_line":"HX550_CAPACITY_LIMIT \u003d 200 * 1024"},{"line_number":45,"context_line":"CI_WIKI_NAME \u003d \"Reduxio_HX550_CI\""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"5a74a57a_567440fc","line":45,"updated":"2016-11-30 14:44:20.000000000","message":"This should be moved to inside the class, before the __init__() method.","commit_id":"83cc7f7366a616b6c129e87c13d0fa8549e3e6ef"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"bae2a22ab3baa24d060a9bf9a69eeb5a792ebddf","unresolved":false,"context_lines":[{"line_number":202,"context_line":"        \"\"\""},{"line_number":203,"context_line":"        LOG.info(_LI("},{"line_number":204,"context_line":"            \"cloning new volume(%(new_vol)s) from snapshot(%(snapshot)s),\""},{"line_number":205,"context_line":"            \" srv volume(%(src_vol)s)\"),"},{"line_number":206,"context_line":"            {\u0027new_vol\u0027: volume[\"name\"],"},{"line_number":207,"context_line":"                \u0027snapshot\u0027: snapshot[\"name\"],"},{"line_number":208,"context_line":"                \u0027src_vol\u0027: snapshot[\"volume_name\"]}"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a74a57a_1a181484","line":205,"updated":"2016-11-30 21:59:11.000000000","message":"\"srv\" here should be \"src\"?","commit_id":"f34b0ff92ce5c4598c27e2761fd3ad846974aa99"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"bae2a22ab3baa24d060a9bf9a69eeb5a792ebddf","unresolved":false,"context_lines":[{"line_number":415,"context_line":"            LOG.info(_LI(\"Creating assignment\"))"},{"line_number":416,"context_line":"            self.rdxApi.assign(vol_rdx_name, host_name\u003dinitiator_name)"},{"line_number":417,"context_line":"        else:"},{"line_number":418,"context_line":"            LOG.info(_LI(\"Assignment already exists\"))"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"        # Query cli settings in order to fill requested output"},{"line_number":421,"context_line":"        settings \u003d self.rdxApi.get_settings()"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a74a57a_f518cb77","line":418,"updated":"2016-11-30 21:59:11.000000000","message":"This looks like debug-level logging, is this really useful information for an operator?  If it\u0027s intended to be, it needs more detail.\n\nhttps://wiki.openstack.org/wiki/LoggingStandards#INFO_log_level_is_for_Operators","commit_id":"f34b0ff92ce5c4598c27e2761fd3ad846974aa99"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"09a1b91570a751fb3047b4939edcd8ec7a62b981","unresolved":false,"context_lines":[{"line_number":415,"context_line":"            LOG.info(_LI(\"Creating assignment\"))"},{"line_number":416,"context_line":"            self.rdxApi.assign(vol_rdx_name, host_name\u003dinitiator_name)"},{"line_number":417,"context_line":"        else:"},{"line_number":418,"context_line":"            LOG.info(_LI(\"Assignment already exists\"))"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"        # Query cli settings in order to fill requested output"},{"line_number":421,"context_line":"        settings \u003d self.rdxApi.get_settings()"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a74a57a_abe270ff","line":418,"in_reply_to":"5a74a57a_f518cb77","updated":"2016-11-30 23:15:09.000000000","message":"Agree with Eric that a debug message seems to be more appropriate.","commit_id":"f34b0ff92ce5c4598c27e2761fd3ad846974aa99"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"09a1b91570a751fb3047b4939edcd8ec7a62b981","unresolved":false,"context_lines":[{"line_number":486,"context_line":"                    if \"No such assignment\" not in error_msg:"},{"line_number":487,"context_line":"                        raise"},{"line_number":488,"context_line":"                    else:"},{"line_number":489,"context_line":"                        LOG.warning(_LW(\"Failed to unattach: %s\"), error_msg)"},{"line_number":490,"context_line":"                return"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"        LOG.warning(_LW(\"Did not find matching reduxio host for initiator %s\"),"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a74a57a_4b3b9ceb","line":489,"updated":"2016-11-30 23:15:09.000000000","message":"This is another similar place where a debug message seems to be more appropriate.  If it is a real failure, exception will be raised.  If assignment not found, it\u0027s better to log a debug message.","commit_id":"f34b0ff92ce5c4598c27e2761fd3ad846974aa99"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f1fe4b46e95a76fb2f84bbea1062dae34bb905b4","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    1.0.0   -  Initial version - volume management, snapshots, BackDating(TM)."},{"line_number":55,"context_line":"    1.0.1   -  Capacity stats, fixed error handling for volume deletions."},{"line_number":56,"context_line":"    \"\"\""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    CI_WIKI_NAME \u003d \"Reduxio_HX550_CI\""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def __init__(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a71b18c_f75c9aef","line":57,"updated":"2016-12-01 08:01:30.000000000","message":"Need VERSION variable defined.","commit_id":"52d5c77bd859a8954de654264d64150174e90d4f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f1fe4b46e95a76fb2f84bbea1062dae34bb905b4","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        # If agent-type is not None then raise exception"},{"line_number":150,"context_line":"        if not managed_info[AGENT_TYPE_KEY] is None:"},{"line_number":151,"context_line":"            msg \u003d (_(\u0027Volume should have agent-type set as None.\u0027))"},{"line_number":152,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        new_vol_name \u003d volume[\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a71b18c_17203649","line":151,"updated":"2016-12-01 08:01:30.000000000","message":"Out () is not needed.","commit_id":"52d5c77bd859a8954de654264d64150174e90d4f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f1fe4b46e95a76fb2f84bbea1062dae34bb905b4","unresolved":false,"context_lines":[{"line_number":177,"context_line":"        managed_info \u003d self._get_managed_info(cli_vol)"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        if managed_info[\u0027agent-type\u0027] !\u003d AGENT_TYPE_OPENSTACK:"},{"line_number":180,"context_line":"            msg \u003d (_(\u0027Only volumes managed by Openstack can be unmanaged.\u0027))"},{"line_number":181,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        # update the agent-type to None"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a71b18c_b7d78222","line":180,"updated":"2016-12-01 08:01:30.000000000","message":"Outer () is not needed.","commit_id":"52d5c77bd859a8954de654264d64150174e90d4f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b4e106ef64bb91ff20d128704f3c057a041e84a4","unresolved":false,"context_lines":[{"line_number":375,"context_line":""},{"line_number":376,"context_line":"    @cinder_utils.trace"},{"line_number":377,"context_line":"    def _get_target_portal(self, settings, controller, port):"},{"line_number":378,"context_line":"        network \u003d \"iscsi_network{}\".format(port)"},{"line_number":379,"context_line":"        iscsi_port \u003d str("},{"line_number":380,"context_line":"            settings[\"network_configuration\"][\"iscsi_target_tcp_port\"])"},{"line_number":381,"context_line":"        controller_port_key \u003d \"controller_{}_port_{}\".format(controller, port)"}],"source_content_type":"text/x-python","patch_set":20,"id":"3a71b18c_4a9d6e64","line":378,"updated":"2016-12-02 05:00:14.000000000","message":"Please use the  \"iscsi_network%s\" % port format.","commit_id":"b169465b37d3a38900ede68b8e8fc093b7e762c0"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b4e106ef64bb91ff20d128704f3c057a041e84a4","unresolved":false,"context_lines":[{"line_number":376,"context_line":"    @cinder_utils.trace"},{"line_number":377,"context_line":"    def _get_target_portal(self, settings, controller, port):"},{"line_number":378,"context_line":"        network \u003d \"iscsi_network{}\".format(port)"},{"line_number":379,"context_line":"        iscsi_port \u003d str("},{"line_number":380,"context_line":"            settings[\"network_configuration\"][\"iscsi_target_tcp_port\"])"},{"line_number":381,"context_line":"        controller_port_key \u003d \"controller_{}_port_{}\".format(controller, port)"},{"line_number":382,"context_line":"        return settings[network][controller_port_key] + \":\" + iscsi_port"}],"source_content_type":"text/x-python","patch_set":20,"id":"3a71b18c_aab442f2","line":379,"updated":"2016-12-02 05:00:14.000000000","message":"str -\u003e six.text_type","commit_id":"b169465b37d3a38900ede68b8e8fc093b7e762c0"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b4e106ef64bb91ff20d128704f3c057a041e84a4","unresolved":false,"context_lines":[{"line_number":378,"context_line":"        network \u003d \"iscsi_network{}\".format(port)"},{"line_number":379,"context_line":"        iscsi_port \u003d str("},{"line_number":380,"context_line":"            settings[\"network_configuration\"][\"iscsi_target_tcp_port\"])"},{"line_number":381,"context_line":"        controller_port_key \u003d \"controller_{}_port_{}\".format(controller, port)"},{"line_number":382,"context_line":"        return settings[network][controller_port_key] + \":\" + iscsi_port"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"    @cinder_utils.trace"}],"source_content_type":"text/x-python","patch_set":20,"id":"3a71b18c_ea7c7a22","line":381,"updated":"2016-12-02 05:00:14.000000000","message":"Please use this format \"controller_%(ctrl)s_port_%(port)s\" % {\"ctrl\": xxxx, \"port\": xxxx}","commit_id":"b169465b37d3a38900ede68b8e8fc093b7e762c0"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"9d2415f676f93f05578b29577408d56d791db9bf","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    # Reduxio entities names (which are also ids) are restricted to at most"},{"line_number":83,"context_line":"    # 31 chars. The following function maps cinder unique id to reduxio name."},{"line_number":84,"context_line":"    def _cinder_id_to_rdx(self, cinder_name):"},{"line_number":85,"context_line":"        return cinder_name[:RDX_CLI_MAX_VOL_LENGTH]"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    # We use Reduxio volume description to represent metadata regarding"},{"line_number":88,"context_line":"    # the cinder agent, in order to avoid multi managing the same volume"}],"source_content_type":"text/x-python","patch_set":23,"id":"3a71b18c_0420a99a","line":85,"updated":"2016-12-09 05:04:11.000000000","message":"so the problem I see with this is every call to this function is passing in the volume[\"name\"].   The volume[\"name\"] will result in \"volume-\u003cUUID\u003e\" and this operation chops off the last characters of the string....\n\nvolume-f64e7ec6-7e56-474f-8e0a-75132096a512\nvolume-f64e7ec6-7e56-474f-8e0a\n\nWhy not pass in volume[\"id\"] instead which would give you\n\nf64e7ec6-7e56-474f-8e0a-751320\n\nremoving the \u0027-\u0027 gives you \n\nfec185e698fd42f4a4a1286abbe865\n\na more unique name/id.","commit_id":"c7dfb1005f9ff45e9be765c05729328b5e8956ed"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"72d09e1845d36969baf2a21f9c4a9de3e60caebf","unresolved":false,"context_lines":[{"line_number":463,"context_line":"            # Lun num is the same for each path"},{"line_number":464,"context_line":"            properties[\u0027data\u0027][\u0027target_luns\u0027] \u003d [target_lun] * 4"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"        LOG.info(_LI(\"Assignment complete. Assignment details:%s\"), properties)"},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"        return properties"},{"line_number":469,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"3a71b18c_f60458c7","line":466,"updated":"2016-12-08 16:48:21.000000000","message":"Add space after :","commit_id":"c7dfb1005f9ff45e9be765c05729328b5e8956ed"}],"releasenotes/notes/reduxio-iscsci-driver-5827c32a0c498949.yaml":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0fcc09f8bb7588462e8b2f3dff6ad41955d71f42","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added backend ISCSI driver for Reduxio."},{"line_number":4,"context_line":"  - Supports Reduxio TimeOS v2.7 and higher."},{"line_number":5,"context_line":"  - \"Storage system configuration - support for basic system hostname/IP and credentials configuration through /etc/cinder/cinder.conf.\""},{"line_number":6,"context_line":"  - \"Storage provisioning - support for creating, attaching and managing Reduxio volumes. Uses the Reduxio volume description field to maintain Cinder volume ids.\""}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3aaa91ec_76d7dded","line":3,"updated":"2016-06-27 14:21:27.000000000","message":"Put the text from the second line at the end of the first line, then delete the rest of this.","commit_id":"2d71f047bed10622ebf1db03ca8b9b0f38195850"}]}
