)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"22cc390c19be49a878f9033e46664080a2a2dd52","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     dhinesh \u003cdhinesh@hedviginc.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-02-13 15:55:11 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"implements: blueprint hedvig-cinder"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Hedvig Cinder driver implementation and unit tests."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: Ib701edb733567831ee80a317d0e3b3945a312760"},{"line_number":12,"context_line":"Signed-off-by: Dhinesh Balasubramaniam \u003cdhinesh@example.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"fa31d9ce_c9c0b42d","line":9,"range":{"start_line":7,"start_character":0,"end_line":9,"end_character":51},"updated":"2017-02-16 19:37:47.000000000","message":"I would swap these lines, line 9 makes a much better summary","commit_id":"27623a94df2f4633696e186da6175b982d9daf19"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"22cc390c19be49a878f9033e46664080a2a2dd52","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Hedvig Cinder driver implementation and unit tests."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: Ib701edb733567831ee80a317d0e3b3945a312760"},{"line_number":12,"context_line":"Signed-off-by: Dhinesh Balasubramaniam \u003cdhinesh@example.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"fa31d9ce_09e1ecd0","line":12,"updated":"2017-02-16 19:37:47.000000000","message":"Probably don\u0027t need this... the email looks like a default template anyway","commit_id":"27623a94df2f4633696e186da6175b982d9daf19"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f2f0057e3425ddd638e0e08df3204be9984c9857","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     dhinesh \u003cdhinesh@hedviginc.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-05-26 16:55:55 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Hedvig Cinder driver implementation and unit tests."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"implements: blueprint hedvig-cinder"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"df140735_b173b980","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":51},"updated":"2017-05-30 22:17:27.000000000","message":"Please don\u0027t add a period for the title of the commit message.\n\nHedvig Cinder driver implementation","commit_id":"ae362ffdeb6182116c920b992ccdd8eef37e6bfa"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f2f0057e3425ddd638e0e08df3204be9984c9857","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2017-05-26 16:55:55 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Hedvig Cinder driver implementation and unit tests."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"implements: blueprint hedvig-cinder"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: Ib701edb733567831ee80a317d0e3b3945a312760"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"df140735_110a65d1","line":8,"updated":"2017-05-30 22:17:27.000000000","message":"Add a short description about this patch here.","commit_id":"ae362ffdeb6182116c920b992ccdd8eef37e6bfa"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ef32308cb7adb92a3f1c6b33a1f68cabd986e223","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Hedvig Cinder driver implementation"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"addresing san_* variables and patch 18 review comments"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"implements: blueprint hedvig-cinder"},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"df140735_914e0b36","line":9,"updated":"2017-06-02 18:35:08.000000000","message":"This should not be in the commit message.\n\nIt would be good to have a little detail about what this patch actually implements. Maybe just call out the base driver functionality, and any of the optional functionality that\u0027s being supported.","commit_id":"4d383a34c456623733f9b9fb068f779634222fcc"}],"cinder/exception.py":[{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"fd1dad1ce85f6e2695ee3ae9441d660692f4e718","unresolved":false,"context_lines":[{"line_number":1397,"context_line":""},{"line_number":1398,"context_line":""},{"line_number":1399,"context_line":"class HedvigVolumeException(VolumeDriverException):"},{"line_number":1400,"context_line":"    message \u003d _(\"Hedvig server error.\")"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f044301_1a1dd50e","line":1400,"range":{"start_line":1400,"start_character":36,"end_line":1400,"end_character":37},"updated":"2017-05-05 16:11:11.000000000","message":"nit but let is be the same whether with dot or without)","commit_id":"034b60f00851215dcf32ad58e10a020f4170f678"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ca41b81a4cfbeb6232ed5654a3e4b4b18b05f107","unresolved":false,"context_lines":[{"line_number":1393,"context_line":""},{"line_number":1394,"context_line":"# Hedvig driver"},{"line_number":1395,"context_line":"class HedvigDriverException(CinderException):"},{"line_number":1396,"context_line":"    message \u003d _(\"Hedvig Cinder Driver error\")"},{"line_number":1397,"context_line":""},{"line_number":1398,"context_line":""},{"line_number":1399,"context_line":"class HedvigVolumeException(VolumeDriverException):"}],"source_content_type":"text/x-python","patch_set":14,"id":"1f013ff3_57643822","line":1396,"updated":"2017-05-17 08:42:41.000000000","message":"Do we really need both of these exceptions?","commit_id":"2086049cc4a9246ca9d8653919c8fec9188953a9"},{"author":{"_account_id":26028,"name":"Swathi Hrishikesh","email":"swathi@hedviginc.com","username":"hrishs"},"change_message_id":"c42e698650609c7bc9234ca962f4facecaa648fb","unresolved":false,"context_lines":[{"line_number":1393,"context_line":""},{"line_number":1394,"context_line":"# Hedvig driver"},{"line_number":1395,"context_line":"class HedvigDriverException(CinderException):"},{"line_number":1396,"context_line":"    message \u003d _(\"Hedvig Cinder Driver error\")"},{"line_number":1397,"context_line":""},{"line_number":1398,"context_line":""},{"line_number":1399,"context_line":"class HedvigVolumeException(VolumeDriverException):"}],"source_content_type":"text/x-python","patch_set":14,"id":"ff0f0b1f_66459370","line":1396,"in_reply_to":"1f013ff3_57643822","updated":"2018-04-23 21:39:39.000000000","message":"We received a comment earlier to add more exceptions. HedvigVolumeException is used in volume related operations. HedvigDriverException is used for other features like snapshot etc.","commit_id":"2086049cc4a9246ca9d8653919c8fec9188953a9"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"b532c97be6e94b70048409dcb8dab46427bdedd3","unresolved":false,"context_lines":[{"line_number":1343,"context_line":""},{"line_number":1344,"context_line":""},{"line_number":1345,"context_line":"# Hedvig driver"},{"line_number":1346,"context_line":"class HedvigDriverException(CinderException):"},{"line_number":1347,"context_line":"    message \u003d _(\"Hedvig Cinder Driver error\")"},{"line_number":1348,"context_line":""},{"line_number":1349,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"df7087c5_08bc58b9","line":1346,"range":{"start_line":1346,"start_character":28,"end_line":1346,"end_character":43},"updated":"2018-03-12 20:59:53.000000000","message":"Should inherit from VolumeDriverException.\n\nAlso, these can be moved into your driver itself rather than being added here.","commit_id":"c7f91f7c50c6b33e5f1051a3458dc833215b44d9"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"b532c97be6e94b70048409dcb8dab46427bdedd3","unresolved":false,"context_lines":[{"line_number":1344,"context_line":""},{"line_number":1345,"context_line":"# Hedvig driver"},{"line_number":1346,"context_line":"class HedvigDriverException(CinderException):"},{"line_number":1347,"context_line":"    message \u003d _(\"Hedvig Cinder Driver error\")"},{"line_number":1348,"context_line":""},{"line_number":1349,"context_line":""},{"line_number":1350,"context_line":"class HedvigVolumeException(VolumeDriverException):"}],"source_content_type":"text/x-python","patch_set":31,"id":"df7087c5_28491ccf","line":1347,"updated":"2018-03-12 20:59:53.000000000","message":"This should also take a message parameter to track a more specific failure reason.","commit_id":"c7f91f7c50c6b33e5f1051a3458dc833215b44d9"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"e3a10c227fb5f65d921578f6a0c740c1b224d370","unresolved":false,"context_lines":[{"line_number":1357,"context_line":""},{"line_number":1358,"context_line":""},{"line_number":1359,"context_line":"# Hedvig driver"},{"line_number":1360,"context_line":"class HedvigDriverException(CinderException):"},{"line_number":1361,"context_line":"    message \u003d _(\"Hedvig Cinder Driver error\")"},{"line_number":1362,"context_line":""},{"line_number":1363,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"5f7c97a3_a494b545","line":1360,"updated":"2018-05-07 14:49:09.000000000","message":"Should inherit from VolumeDriverException instead of CinderException.","commit_id":"2dc3da51576f5f64af77d5973d5b3d2b2ec7a574"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":1387,"context_line":"    message \u003d \"Failed to delete subsystem: %(subsystem)s\""},{"line_number":1388,"context_line":""},{"line_number":1389,"context_line":""},{"line_number":1390,"context_line":"# Hedvig driver"},{"line_number":1391,"context_line":"class HedvigDriverException(VolumeDriverException):"},{"line_number":1392,"context_line":"    message \u003d _(\"Hedvig Cinder Driver error\")"},{"line_number":1393,"context_line":""}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_ea76fa92","line":1390,"updated":"2018-11-01 19:25:44.000000000","message":"These exceptions don\u0027t add any value and actually usually end up hiding any useful information. Remove these and just use VolumeDriverException in the code and set the message kwarg so there is some useful information about what happened.","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"}],"cinder/opts.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f2f0057e3425ddd638e0e08df3204be9984c9857","unresolved":false,"context_lines":[{"line_number":99,"context_line":"from cinder.volume.drivers.fusionstorage import dsware as \\"},{"line_number":100,"context_line":"    cinder_volume_drivers_fusionstorage_dsware"},{"line_number":101,"context_line":"from cinder.volume.drivers.hedvig import hedvig_cinder as \\"},{"line_number":102,"context_line":"    cinder_volume_drivers_hedvig_hedvigcinder"},{"line_number":103,"context_line":"from cinder.volume.drivers import hgst as cinder_volume_drivers_hgst"},{"line_number":104,"context_line":"from cinder.volume.drivers.hitachi import hbsd_common as \\"},{"line_number":105,"context_line":"    cinder_volume_drivers_hitachi_hbsdcommon"}],"source_content_type":"text/x-python","patch_set":18,"id":"df140735_113ca591","line":102,"range":{"start_line":102,"start_character":33,"end_line":102,"end_character":45},"updated":"2017-05-30 22:17:27.000000000","message":"This has to be \"hedvig_cinder\", otherwise it won\u0027t pass Jenkins.","commit_id":"ae362ffdeb6182116c920b992ccdd8eef37e6bfa"}],"cinder/tests/unit/volume/drivers/test_hedvig.py":[{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"52bc96520cf3e89d6c089a47f250ff2dd1166880","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from cinder.volume import configuration as conf"},{"line_number":24,"context_line":"from cinder.volume.drivers.hedvig.hedvig_cinder import HedvigISCSIDriver"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"SNAPSHOT \u003d {"},{"line_number":27,"context_line":"    \u0027display_name\u0027: \u0027snap-1\u0027,"},{"line_number":28,"context_line":"    \u0027name\u0027: \u0027snapshot-51dd4-8d8a-4aa9-9176-086c9d89e7fc\u0027,"},{"line_number":29,"context_line":"    \u0027id\u0027: \u002751dd4-8d8a-4aa9-9176-086c9d89e7fc\u0027,"},{"line_number":30,"context_line":"    \u0027size\u0027: 128,"},{"line_number":31,"context_line":"    \u0027volume_type\u0027: None,"},{"line_number":32,"context_line":"    \u0027provider_location\u0027: None,"},{"line_number":33,"context_line":"    \u0027volume_size\u0027: 128,"},{"line_number":34,"context_line":"    \u0027volume_name\u0027: \u0027volume-bcc48c61-9691-4e5f-897c-793686093190\u0027,"},{"line_number":35,"context_line":"    \u0027volume_id\u0027: \u0027bcc48c61-9691-4e5f-897c-793686093191\u0027,"},{"line_number":36,"context_line":"    \u0027project_id\u0027: \u002712345\u0027,"},{"line_number":37,"context_line":"    \u0027description\u0027: \u0027hedvig snapshot\u0027"},{"line_number":38,"context_line":"}"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"GROUP_STATS \u003d {"},{"line_number":41,"context_line":"    \"volume_backend_name\": \"hedvig\","},{"line_number":42,"context_line":"    \"vendor_name\": \"Hedvig Inc\","},{"line_number":43,"context_line":"    \"driver_version\": \"0.99\","},{"line_number":44,"context_line":"    \"storage_protocol\": \"ISCSI\","},{"line_number":45,"context_line":"    \"total_capacity_gb\": 500,"},{"line_number":46,"context_line":"    \"free_capacity_gb\": 200,"},{"line_number":47,"context_line":"    \"reserved_percentage\": 0,"},{"line_number":48,"context_line":"    \"QoS_support\": True"},{"line_number":49,"context_line":"}"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"VOLUME \u003d {"},{"line_number":52,"context_line":"    \u0027name\u0027: \u0027volume-bcc48c61-9691-4e5f-897c-793686093190\u0027,"},{"line_number":53,"context_line":"    \u0027volume_id\u0027: \u0027bcc48c61-9691-4e5f-897c-793686093190\u0027,"},{"line_number":54,"context_line":"    \u0027size\u0027: 128,"},{"line_number":55,"context_line":"    \u0027volume_type\u0027: \u0027silver\u0027,"},{"line_number":56,"context_line":"    \u0027volume_type_id\u0027: \u00271\u0027,"},{"line_number":57,"context_line":"    \u0027id\u0027: \u0027bcc48c61-9691-4e5f-897c-793686093190\u0027,"},{"line_number":58,"context_line":"    \u0027status\u0027: \u0027available\u0027,"},{"line_number":59,"context_line":"    \u0027description\u0027: \u0027test-volume\u0027"},{"line_number":60,"context_line":"}"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"VDISK \u003d {\u0027name\u0027: \u0027replica-12345678-1234-5678-1234-567812345678\u0027}"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"CONNECTOR \u003d {"},{"line_number":66,"context_line":"    \u0027host\u0027: \u00271.2.3.4\u0027,"},{"line_number":67,"context_line":"    \u0027initiator\u0027: \u0027iqn.123456\u0027"},{"line_number":68,"context_line":"}"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"ISCSI_VALUES \u003d {"},{"line_number":71,"context_line":"    \u0027driver_volume_type\u0027: \u0027iscsi\u0027,"},{"line_number":72,"context_line":"    \u0027data\u0027: {"},{"line_number":73,"context_line":"        \u0027target_discovered\u0027: True,"},{"line_number":74,"context_line":"        \u0027target_iqn\u0027: \u0027iqn.2012-05.com.hedvig:target\u0027,"},{"line_number":75,"context_line":"        \u0027target_portal\u0027: \u00271.2.3.4:3260\u0027,"},{"line_number":76,"context_line":"        \u0027target_lun\u0027: \u00271\u0027,"},{"line_number":77,"context_line":"        \u0027volume_id\u0027: 2,"},{"line_number":78,"context_line":"    }"},{"line_number":79,"context_line":"}"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"COMPUTE_HOST \u003d \u0027driver-test.hedvig.com\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a30ddce_a33fa885","line":79,"range":{"start_line":26,"start_character":1,"end_line":79,"end_character":1},"updated":"2017-03-09 19:46:13.000000000","message":"You can use the preconfigured objects in the /fakes diretory that other drivers use to save this setup.","commit_id":"8934e557857800253a129d41217cc2c90b6cf7d0"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"36b406692220cb5a07bac4370e5f6f1e33798da2","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    \"volume_backend_name\": \"hedvig\","},{"line_number":43,"context_line":"    \"vendor_name\": \"Hedvig Inc\","},{"line_number":44,"context_line":"    \"driver_version\": \"0.99\","},{"line_number":45,"context_line":"    \"storage_protocol\": \"ISCSI\","},{"line_number":46,"context_line":"    \"total_capacity_gb\": 500,"},{"line_number":47,"context_line":"    \"free_capacity_gb\": 200,"},{"line_number":48,"context_line":"    \"reserved_percentage\": 0,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_a4738880","line":45,"updated":"2017-04-24 14:51:02.000000000","message":"-\u003e \"iSCSI\".","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"d441bd3214d06ffbead900a8db108067c9c03c9e","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    \"volume_backend_name\": \"hedvig\","},{"line_number":43,"context_line":"    \"vendor_name\": \"Hedvig Inc\","},{"line_number":44,"context_line":"    \"driver_version\": \"0.99\","},{"line_number":45,"context_line":"    \"storage_protocol\": \"ISCSI\","},{"line_number":46,"context_line":"    \"total_capacity_gb\": 500,"},{"line_number":47,"context_line":"    \"free_capacity_gb\": 200,"},{"line_number":48,"context_line":"    \"reserved_percentage\": 0,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f044301_a53164ef","line":45,"in_reply_to":"5ff73747_a4738880","updated":"2017-10-31 17:35:53.000000000","message":"Done","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"7a2ef219c8159eaec7c01399ceb4a7e65bb06289","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        \u0027target_iqn\u0027: \u0027iqn.2012-05.com.hedvig:target\u0027,"},{"line_number":76,"context_line":"        \u0027target_portal\u0027: \u00271.2.3.4:3260\u0027,"},{"line_number":77,"context_line":"        \u0027target_lun\u0027: \u00271\u0027,"},{"line_number":78,"context_line":"        \u0027volume_id\u0027: 2,"},{"line_number":79,"context_line":"    }"},{"line_number":80,"context_line":"}"},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3f044301_d22ae98e","line":78,"range":{"start_line":78,"start_character":22,"end_line":78,"end_character":23},"updated":"2017-05-04 06:49:38.000000000","message":"redundant","commit_id":"9e6a33fb3e9c15158d25ed9cae0c44abd114b1de"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"d441bd3214d06ffbead900a8db108067c9c03c9e","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        \u0027target_iqn\u0027: \u0027iqn.2012-05.com.hedvig:target\u0027,"},{"line_number":76,"context_line":"        \u0027target_portal\u0027: \u00271.2.3.4:3260\u0027,"},{"line_number":77,"context_line":"        \u0027target_lun\u0027: \u00271\u0027,"},{"line_number":78,"context_line":"        \u0027volume_id\u0027: 2,"},{"line_number":79,"context_line":"    }"},{"line_number":80,"context_line":"}"},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3f044301_dd18a0d4","line":78,"range":{"start_line":78,"start_character":22,"end_line":78,"end_character":23},"in_reply_to":"3f044301_d22ae98e","updated":"2017-10-31 17:35:53.000000000","message":"Done","commit_id":"9e6a33fb3e9c15158d25ed9cae0c44abd114b1de"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f2f0057e3425ddd638e0e08df3204be9984c9857","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2016 Hedvig 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":18,"id":"df140735_91f555ce","line":1,"range":{"start_line":1,"start_character":16,"end_line":1,"end_character":20},"updated":"2017-05-30 22:17:27.000000000","message":"2017","commit_id":"ae362ffdeb6182116c920b992ccdd8eef37e6bfa"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f2f0057e3425ddd638e0e08df3204be9984c9857","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import mock"},{"line_number":18,"context_line":"import socket"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from cinder import context"},{"line_number":21,"context_line":"from cinder.db.sqlalchemy import api"}],"source_content_type":"text/x-python","patch_set":18,"id":"df140735_91e31506","line":18,"range":{"start_line":18,"start_character":7,"end_line":18,"end_character":13},"updated":"2017-05-30 22:17:27.000000000","message":"socket is stdlib, so it should be in the first import group.\n\nmock is 3rd party lib, so it goes to the 2nd import group.\n\nhttps://docs.openstack.org/developer/hacking/#import-order-template","commit_id":"ae362ffdeb6182116c920b992ccdd8eef37e6bfa"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f2f0057e3425ddd638e0e08df3204be9984c9857","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from cinder.db.sqlalchemy import api"},{"line_number":22,"context_line":"from cinder import test"},{"line_number":23,"context_line":"from cinder.volume import configuration as conf"},{"line_number":24,"context_line":"from cinder.volume.drivers.hedvig.hedvig_cinder import HedvigISCSIDriver"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"SNAPSHOT \u003d {"}],"source_content_type":"text/x-python","patch_set":18,"id":"df140735_51ed7ded","line":24,"range":{"start_line":24,"start_character":55,"end_line":24,"end_character":72},"updated":"2017-05-30 22:17:27.000000000","message":"Please import module, not class.","commit_id":"ae362ffdeb6182116c920b992ccdd8eef37e6bfa"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"f538d1e68c31d745e629eb490ac09a514d24a2e9","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from cinder.db.sqlalchemy import api"},{"line_number":22,"context_line":"from cinder import test"},{"line_number":23,"context_line":"from cinder.volume import configuration as conf"},{"line_number":24,"context_line":"from cinder.volume.drivers.hedvig.hedvig_cinder import HedvigISCSIDriver"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"SNAPSHOT \u003d {"}],"source_content_type":"text/x-python","patch_set":18,"id":"df140735_8e6706b8","line":24,"range":{"start_line":24,"start_character":55,"end_line":24,"end_character":72},"in_reply_to":"df140735_51ed7ded","updated":"2017-06-02 18:45:11.000000000","message":"Not sure what was intended here,i referred to other vendors and see similar imports","commit_id":"ae362ffdeb6182116c920b992ccdd8eef37e6bfa"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"460bee8b0f750547b648fa67f4d5eb3737f216e0","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from cinder.db.sqlalchemy import api"},{"line_number":22,"context_line":"from cinder import test"},{"line_number":23,"context_line":"from cinder.volume import configuration as conf"},{"line_number":24,"context_line":"from cinder.volume.drivers.hedvig.hedvig_cinder import HedvigISCSIDriver"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"SNAPSHOT \u003d {"}],"source_content_type":"text/x-python","patch_set":18,"id":"df140735_d848202e","line":24,"range":{"start_line":24,"start_character":55,"end_line":24,"end_character":72},"in_reply_to":"df140735_8e6706b8","updated":"2017-06-02 21:53:01.000000000","message":"I mean \"from cinder.volume.drivers.hedvig import hedvig_cinder\", and then use hedvig_cinder.HedvigISCSIDriver\n\nSee the following doc:\nhttps://docs.openstack.org/developer/hacking/#imports","commit_id":"ae362ffdeb6182116c920b992ccdd8eef37e6bfa"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"030dfe68e7ff233c888810c5c73548c3c4ff343e","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from cinder.volume import configuration as conf"},{"line_number":25,"context_line":"from cinder.volume.drivers.hedvig import hedvig_cinder"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"SNAPSHOT \u003d {"},{"line_number":29,"context_line":"    \u0027display_name\u0027: \u0027snap-1\u0027,"},{"line_number":30,"context_line":"    \u0027name\u0027: \u0027snapshot-51dd4-8d8a-4aa9-9176-086c9d89e7fc\u0027,"},{"line_number":31,"context_line":"    \u0027id\u0027: \u002751dd4-8d8a-4aa9-9176-086c9d89e7fc\u0027,"},{"line_number":32,"context_line":"    \u0027size\u0027: 128,"},{"line_number":33,"context_line":"    \u0027volume_type\u0027: None,"},{"line_number":34,"context_line":"    \u0027provider_location\u0027: None,"},{"line_number":35,"context_line":"    \u0027volume_size\u0027: 128,"},{"line_number":36,"context_line":"    \u0027volume_name\u0027: \u0027volume-bcc48c61-9691-4e5f-897c-793686093190\u0027,"},{"line_number":37,"context_line":"    \u0027volume_id\u0027: \u0027bcc48c61-9691-4e5f-897c-793686093191\u0027,"},{"line_number":38,"context_line":"    \u0027project_id\u0027: \u002712345\u0027,"},{"line_number":39,"context_line":"    \u0027description\u0027: \u0027hedvig snapshot\u0027"},{"line_number":40,"context_line":"}"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"GROUP_STATS \u003d {"},{"line_number":43,"context_line":"    \"volume_backend_name\": \"hedvig\","},{"line_number":44,"context_line":"    \"vendor_name\": \"Hedvig Inc\","},{"line_number":45,"context_line":"    \"driver_version\": \"0.99\","},{"line_number":46,"context_line":"    \"storage_protocol\": \"iSCSI\","},{"line_number":47,"context_line":"    \"total_capacity_gb\": 500,"},{"line_number":48,"context_line":"    \"free_capacity_gb\": 200,"},{"line_number":49,"context_line":"    \"reserved_percentage\": 0,"},{"line_number":50,"context_line":"    \"QoS_support\": True"},{"line_number":51,"context_line":"}"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"VOLUME \u003d {"},{"line_number":54,"context_line":"    \u0027name\u0027: \u0027volume-bcc48c61-9691-4e5f-897c-793686093190\u0027,"},{"line_number":55,"context_line":"    \u0027volume_id\u0027: \u0027bcc48c61-9691-4e5f-897c-793686093190\u0027,"},{"line_number":56,"context_line":"    \u0027size\u0027: 128,"},{"line_number":57,"context_line":"    \u0027size_unit\u0027: \u0027GB\u0027,"},{"line_number":58,"context_line":"    \u0027volume_type\u0027: \u0027silver\u0027,"},{"line_number":59,"context_line":"    \u0027volume_type_id\u0027: \u00271\u0027,"},{"line_number":60,"context_line":"    \u0027id\u0027: \u0027bcc48c61-9691-4e5f-897c-793686093190\u0027,"},{"line_number":61,"context_line":"    \u0027status\u0027: \u0027available\u0027,"},{"line_number":62,"context_line":"    \u0027description\u0027: \u0027test-volume\u0027"},{"line_number":63,"context_line":"}"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"VDISK \u003d {\u0027name\u0027: \u0027replica-12345678-1234-5678-1234-567812345678\u0027}"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"CONNECTOR \u003d {"},{"line_number":69,"context_line":"    \u0027host\u0027: \u00271.2.3.4\u0027,"},{"line_number":70,"context_line":"    \u0027initiator\u0027: \u0027iqn.123456\u0027"},{"line_number":71,"context_line":"}"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"ISCSI_VALUES \u003d {"},{"line_number":74,"context_line":"    \u0027driver_volume_type\u0027: \u0027iscsi\u0027,"},{"line_number":75,"context_line":"    \u0027data\u0027: {"},{"line_number":76,"context_line":"        \u0027target_discovered\u0027: True,"},{"line_number":77,"context_line":"        \u0027target_iqn\u0027: \u0027iqn.2012-05.com.hedvig:target\u0027,"},{"line_number":78,"context_line":"        \u0027target_portal\u0027: \u00271.2.3.4:3260\u0027,"},{"line_number":79,"context_line":"        \u0027target_lun\u0027: \u00271\u0027,"},{"line_number":80,"context_line":"        \u0027volume_id\u0027: 2"},{"line_number":81,"context_line":"    }"},{"line_number":82,"context_line":"}"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"COMPUTE_HOST \u003d \u0027driver-test.hedvig.com\u0027"}],"source_content_type":"text/x-python","patch_set":23,"id":"7f515b1d_958e8ece","line":82,"range":{"start_line":27,"start_character":0,"end_line":82,"end_character":1},"updated":"2017-09-21 22:02:31.000000000","message":"cinder/cinder/test/unit has a ton of this stuff already set up in the fakes.py files for testing so you don\u0027t need to introduce more lines of code.","commit_id":"2634a361be8e927b0d9ac026c0867927fcf1535a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        self.configuration \u003d mock.Mock(spec\u003dconf.Configuration)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    @mock.patch(HEDVIG_ISCSI_DRIVER)"},{"line_number":104,"context_line":"    def test_create_snapshot(self, drv):"},{"line_number":105,"context_line":"        mock_hedvig_create_snapshot \u003d self.mock_object("},{"line_number":106,"context_line":"            hedvig_cinder.HedvigISCSIDriver, \u0027hedvig_create_snapshot\u0027)"},{"line_number":107,"context_line":"        mock_snapshot_update \u003d self.mock_object(api, \u0027snapshot_update\u0027)"}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_94768bd5","line":104,"updated":"2018-11-01 19:25:44.000000000","message":"These all appear to just be testing that mocking works. A mock object is being created, then asserted that it was called what it is called with and returns what was set as its return_value. These tests will need to be reworked to actually execute the driver code.","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"0260de5b020a2c3f7baacd377579e8b969262ada","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    @mock.patch(\u0027cinder.volume.drivers.hedvig.rest_client.RestClient\u0027"},{"line_number":73,"context_line":"                \u0027.create_vdisk\u0027)"},{"line_number":74,"context_line":"    def test_create_volume(self, *args, **keywargs):"},{"line_number":75,"context_line":"        volume \u003d _fake_volume()"},{"line_number":76,"context_line":"        self.driver.create_volume(volume)"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":63,"id":"3f79a3b5_227eeebf","line":74,"updated":"2018-12-06 20:50:27.000000000","message":"These test cases are quite weak.  There is no verification that anything actually happened when you call the function.","commit_id":"a51f2adf1871d925c84505583694a9de7bc2843c"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"bd36311e86886e417c489dd5305c5ce9ee831d6d","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                                       size\u003d2)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"class HedvigDriverTest(test.TestCase):"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def setUp(self):"},{"line_number":55,"context_line":"        super(HedvigDriverTest, self).setUp()"}],"source_content_type":"text/x-python","patch_set":64,"id":"3f79a3b5_d4dbdc4a","line":52,"updated":"2018-12-11 19:47:05.000000000","message":"These tests are useless. They mock hedvig.rest_client and verify that no exceptions are raised. At least, we need to check that we call hedvig.rest_client with needed params","commit_id":"21ebc89998031b54214eb8075c0b29aaec311de2"},{"author":{"_account_id":26028,"name":"Swathi Hrishikesh","email":"swathi@hedviginc.com","username":"hrishs"},"change_message_id":"02251bb79b5184b963e7a70b957765cfaa445c70","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                                       size\u003d2)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"class HedvigDriverTest(test.TestCase):"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def setUp(self):"},{"line_number":55,"context_line":"        super(HedvigDriverTest, self).setUp()"}],"source_content_type":"text/x-python","patch_set":64,"id":"3f79a3b5_f2ba8bb9","line":52,"in_reply_to":"3f79a3b5_d4dbdc4a","updated":"2018-12-12 21:52:21.000000000","message":"We are not checking if rest client is getting the right param because we are building the params in the cinder driver code which ensures all the params are present. If we are not able to obtain any param, then exceptions have been raised.","commit_id":"21ebc89998031b54214eb8075c0b29aaec311de2"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"bd36311e86886e417c489dd5305c5ce9ee831d6d","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        self.assertIsNone(self.driver.do_setup(self.context))"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def _create_fake_config(self):"},{"line_number":61,"context_line":"        self.configuration \u003d mock.Mock(spec\u003dconf.Configuration)"},{"line_number":62,"context_line":"        self.configuration.san_ip \u003d \u00271.0.0.1\u0027"},{"line_number":63,"context_line":"        self.configuration.san_login \u003d \u0027dummy_user\u0027"},{"line_number":64,"context_line":"        self.configuration.san_password \u003d \u0027dummy_password\u0027"}],"source_content_type":"text/x-python","patch_set":64,"id":"3f79a3b5_d4bafc0b","line":61,"updated":"2018-12-11 19:47:05.000000000","message":"It would be good to use config fixture [1] here but I won\u0027t block a patch fo it\n\n[1] https://github.com/openstack/oslo.config/blob/master/oslo_config/fixture.py","commit_id":"21ebc89998031b54214eb8075c0b29aaec311de2"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"bd36311e86886e417c489dd5305c5ce9ee831d6d","unresolved":false,"context_lines":[{"line_number":72,"context_line":"                \u0027.create_vdisk\u0027)"},{"line_number":73,"context_line":"    def test_create_volume(self, *args, **keywargs):"},{"line_number":74,"context_line":"        volume \u003d _fake_volume()"},{"line_number":75,"context_line":"        self.assertIsNone(self.driver.create_volume(volume))"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    @mock.patch(\u0027cinder.volume.drivers.hedvig.rest_client.RestClient\u0027"},{"line_number":78,"context_line":"                \u0027.delete_vdisk\u0027)"}],"source_content_type":"text/x-python","patch_set":64,"id":"3f79a3b5_745a08f5","line":75,"range":{"start_line":75,"start_character":13,"end_line":75,"end_character":25},"updated":"2018-12-11 19:47:05.000000000","message":"It looks very confusing. It\u0027s better to use try-except here. E.g.:\ntry:\n    self.driver.create_volume(volume)\nexcept exception.VolumeDriverException:\n    self.fail(\u0027Create volume failed\u0027)\n\n\nThe same comment is valid for the rest of the code","commit_id":"21ebc89998031b54214eb8075c0b29aaec311de2"},{"author":{"_account_id":26028,"name":"Swathi Hrishikesh","email":"swathi@hedviginc.com","username":"hrishs"},"change_message_id":"02251bb79b5184b963e7a70b957765cfaa445c70","unresolved":false,"context_lines":[{"line_number":72,"context_line":"                \u0027.create_vdisk\u0027)"},{"line_number":73,"context_line":"    def test_create_volume(self, *args, **keywargs):"},{"line_number":74,"context_line":"        volume \u003d _fake_volume()"},{"line_number":75,"context_line":"        self.assertIsNone(self.driver.create_volume(volume))"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    @mock.patch(\u0027cinder.volume.drivers.hedvig.rest_client.RestClient\u0027"},{"line_number":78,"context_line":"                \u0027.delete_vdisk\u0027)"}],"source_content_type":"text/x-python","patch_set":64,"id":"3f79a3b5_b2d2d303","line":75,"range":{"start_line":75,"start_character":13,"end_line":75,"end_character":25},"in_reply_to":"3f79a3b5_745a08f5","updated":"2018-12-12 21:52:21.000000000","message":"This has been modified and try except is used in the rest of the code","commit_id":"21ebc89998031b54214eb8075c0b29aaec311de2"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"537fe0722e82eed52a40db84feb0192f5a13097c","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        self.configuration.san_clustername \u003d \u0027dummy_cluster\u0027"},{"line_number":66,"context_line":"        self.configuration.san_is_local \u003d False"},{"line_number":67,"context_line":"        self.ctxt \u003d context.get_admin_context()"},{"line_number":68,"context_line":"        self.driver \u003d (hdvg.HedvigISCSIDriver("},{"line_number":69,"context_line":"                       configuration\u003dself.configuration))"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @mock.patch(\u0027cinder.volume.drivers.hedvig.rest_client.RestClient\u0027"}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_ae474f1c","line":68,"range":{"start_line":68,"start_character":22,"end_line":68,"end_character":23},"updated":"2018-12-19 17:44:00.000000000","message":"Outer () not really needed.","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"537fe0722e82eed52a40db84feb0192f5a13097c","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        try:"},{"line_number":75,"context_line":"            volume \u003d _fake_volume()"},{"line_number":76,"context_line":"            self.driver.create_volume(volume)"},{"line_number":77,"context_line":"        except exception.VolumeDriverException:"},{"line_number":78,"context_line":"            self.fail(\u0027Create volume failed\u0027)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    @mock.patch(\u0027cinder.volume.drivers.hedvig.rest_client.RestClient\u0027"}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_ae60afa0","line":77,"range":{"start_line":77,"start_character":8,"end_line":77,"end_character":46},"updated":"2018-12-19 17:44:00.000000000","message":"Unit tests should not have try/except blocks. The call should be expected to pass, and if it doesn\u0027t the raising of an unexpected exception will cause the test to fail.\n\nAlso need some assertion on the results of the call, not just that it can be called and not raise an exception.","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"66ba414973c05b929bf3992d09e1a30bf2a43a5f","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        try:"},{"line_number":75,"context_line":"            volume \u003d _fake_volume()"},{"line_number":76,"context_line":"            self.driver.create_volume(volume)"},{"line_number":77,"context_line":"        except exception.VolumeDriverException:"},{"line_number":78,"context_line":"            self.fail(\u0027Create volume failed\u0027)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    @mock.patch(\u0027cinder.volume.drivers.hedvig.rest_client.RestClient\u0027"}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_a1d1722f","line":77,"range":{"start_line":77,"start_character":8,"end_line":77,"end_character":46},"in_reply_to":"3f79a3b5_0fb7418a","updated":"2018-12-21 19:21:46.000000000","message":"The comment in patchset 63 was that the tests were weak. They still are, the try/except doesn\u0027t make them less so. If anything, it makes it worse.","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":26028,"name":"Swathi Hrishikesh","email":"swathi@hedviginc.com","username":"hrishs"},"change_message_id":"5bf5928d231ed5223410fa71b3ec4a5ab1cfde60","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        try:"},{"line_number":75,"context_line":"            volume \u003d _fake_volume()"},{"line_number":76,"context_line":"            self.driver.create_volume(volume)"},{"line_number":77,"context_line":"        except exception.VolumeDriverException:"},{"line_number":78,"context_line":"            self.fail(\u0027Create volume failed\u0027)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    @mock.patch(\u0027cinder.volume.drivers.hedvig.rest_client.RestClient\u0027"}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_0fb7418a","line":77,"range":{"start_line":77,"start_character":8,"end_line":77,"end_character":46},"in_reply_to":"3f79a3b5_ae60afa0","updated":"2018-12-21 01:29:06.000000000","message":"I was asked to add a try/except code with an example in patch 63. Initially, it had an assertIsNone statement. In this unit test, I\u0027m expecting things to pass and nothing to fail. I will be adding negative tests soon. So Do I remove this tr/ except from the rest of the file?","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"}],"cinder/volume/drivers/hedvig/HedvigConfig.py":[{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"fd1dad1ce85f6e2695ee3ae9441d660692f4e718","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"TO_MEGABYTES \u003d 1024 * 1024"},{"line_number":22,"context_line":"TO_GIGABYTES \u003d TO_MEGABYTES * 1024"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class ReplicationPolicy(object):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f044301_5ab91de7","line":22,"range":{"start_line":21,"start_character":0,"end_line":22,"end_character":34},"updated":"2017-05-05 16:11:11.000000000","message":"https://github.com/openstack/oslo.utils/blob/master/oslo_utils/units.py","commit_id":"034b60f00851215dcf32ad58e10a020f4170f678"},{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"fd1dad1ce85f6e2695ee3ae9441d660692f4e718","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class ReplicationPolicy(object):"},{"line_number":26,"context_line":"    Agnostic \u003d 0"},{"line_number":27,"context_line":"    RackAware \u003d 1"},{"line_number":28,"context_line":"    DataCenterAware \u003d 2"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    _VALUES_TO_NAMES \u003d {"},{"line_number":31,"context_line":"        0: \"Agnostic\","}],"source_content_type":"text/x-python","patch_set":11,"id":"3f044301_fac90978","line":28,"range":{"start_line":26,"start_character":0,"end_line":28,"end_character":23},"updated":"2017-05-05 16:11:11.000000000","message":"use uppercase for constants","commit_id":"034b60f00851215dcf32ad58e10a020f4170f678"},{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"fd1dad1ce85f6e2695ee3ae9441d660692f4e718","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class DiskResidence(object):"},{"line_number":44,"context_line":"    Flash \u003d 0"},{"line_number":45,"context_line":"    HDD \u003d 1"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    _VALUES_TO_NAMES \u003d {"},{"line_number":48,"context_line":"        0: \"Flash\","}],"source_content_type":"text/x-python","patch_set":11,"id":"3f044301_dac40d62","line":45,"range":{"start_line":44,"start_character":0,"end_line":45,"end_character":11},"updated":"2017-05-05 16:11:11.000000000","message":"same","commit_id":"034b60f00851215dcf32ad58e10a020f4170f678"},{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"fd1dad1ce85f6e2695ee3ae9441d660692f4e718","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    @staticmethod"},{"line_number":123,"context_line":"    def getInstance():"},{"line_number":124,"context_line":"        if not HedvigConfig.instance_:"},{"line_number":125,"context_line":"            with HedvigConfig.lock_:"},{"line_number":126,"context_line":"                if not HedvigConfig.instance_:"},{"line_number":127,"context_line":"                    try:"},{"line_number":128,"context_line":"                        HedvigConfig.instance_ \u003d HedvigConfig()"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f044301_5aea3dac","line":125,"range":{"start_line":125,"start_character":12,"end_line":125,"end_character":36},"updated":"2017-05-05 16:11:11.000000000","message":"Is it singleton\u0027s implementation? we need only one config instance?","commit_id":"034b60f00851215dcf32ad58e10a020f4170f678"},{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"fd1dad1ce85f6e2695ee3ae9441d660692f4e718","unresolved":false,"context_lines":[{"line_number":130,"context_line":"                        raise"},{"line_number":131,"context_line":"        return HedvigConfig.instance_"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    def getHedvigControllerPort(self):"},{"line_number":134,"context_line":"        return self.hcontrollerPort_"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def getCinderReplicationFactor(self):"},{"line_number":137,"context_line":"        return self.cinderReplicationFactor_"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def getCinderReplicationPolicy(self):"},{"line_number":140,"context_line":"        return self.cinderReplicationPolicy_"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def isCinderDedupEnabled(self):"},{"line_number":143,"context_line":"        return self.cinderDedupEnable_"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    def isCinderCacheEnabled(self):"},{"line_number":146,"context_line":"        return self.cinderCacheEnable_"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def isCinderCompressEnabled(self):"},{"line_number":149,"context_line":"        return self.cinderCompressEnable_"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    def getCinderDiskResidence(self):"},{"line_number":152,"context_line":"        return self.cinderDiskResidence_"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f044301_ba8a6118","line":152,"range":{"start_line":133,"start_character":0,"end_line":152,"end_character":40},"updated":"2017-05-05 16:11:11.000000000","message":"maybe it\u0027s better to make this variables as a property?","commit_id":"034b60f00851215dcf32ad58e10a020f4170f678"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ca41b81a4cfbeb6232ed5654a3e4b4b18b05f107","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    @classmethod"},{"line_number":42,"context_line":"    def parseAndGetBooleanEntry(cls, entry):"},{"line_number":43,"context_line":"        entry \u003d entry.strip(\" \\t\\n\").lower()"},{"line_number":44,"context_line":"        if entry \u003d\u003d \"true\":"},{"line_number":45,"context_line":"            return True"},{"line_number":46,"context_line":"        elif entry \u003d\u003d \"false\":"},{"line_number":47,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":14,"id":"1f013ff3_5a29fd87","line":44,"range":{"start_line":44,"start_character":18,"end_line":44,"end_character":19},"updated":"2017-05-17 08:42:41.000000000","message":"Please, use oslo.utils[1] to get boolean from string\n\n[1] https://github.com/openstack/oslo.utils/blob/master/oslo_utils/strutils.py#L113","commit_id":"2086049cc4a9246ca9d8653919c8fec9188953a9"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ca41b81a4cfbeb6232ed5654a3e4b4b18b05f107","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        elif entry \u003d\u003d \"false\":"},{"line_number":47,"context_line":"            return False"},{"line_number":48,"context_line":"        else:"},{"line_number":49,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":14,"id":"1f013ff3_5a77bda1","line":49,"updated":"2017-05-17 08:42:41.000000000","message":"IMO, we should return only True/False","commit_id":"2086049cc4a9246ca9d8653919c8fec9188953a9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f2f0057e3425ddd638e0e08df3204be9984c9857","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2012 Hedvig, 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":18,"id":"df140735_91cc358a","line":1,"range":{"start_line":1,"start_character":16,"end_line":1,"end_character":21},"updated":"2017-05-30 22:17:27.000000000","message":"2017\n\nPlease name this file config.py.  This is already under the hedvig folder.","commit_id":"ae362ffdeb6182116c920b992ccdd8eef37e6bfa"}],"cinder/volume/drivers/hedvig/HedvigOpCb.py":[{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"22cc390c19be49a878f9033e46664080a2a2dd52","unresolved":false,"context_lines":[{"line_number":1,"context_line":"from eventlet.green import os"},{"line_number":2,"context_line":"from cinder import exception"},{"line_number":3,"context_line":"import eventlet"},{"line_number":4,"context_line":"import eventlet.queue"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa31d9ce_a902a0b2","line":1,"updated":"2017-02-16 19:37:47.000000000","message":"Please add copyright headers on the files","commit_id":"27623a94df2f4633696e186da6175b982d9daf19"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"22cc390c19be49a878f9033e46664080a2a2dd52","unresolved":false,"context_lines":[{"line_number":158,"context_line":"    \tself.op_.vDiskInfo_.blockSize \u003d vDiskInfo.blockSize"},{"line_number":159,"context_line":"    \tself.op_.vDiskInfo_.exportedBlockSize \u003d vDiskInfo.exportedBlockSize"},{"line_number":160,"context_line":"    \tself.op_.vDiskInfo_.isClone \u003d vDiskInfo.isClone"},{"line_number":161,"context_line":"    \t#self.op_.vDiskInfo_.generationNbr \u003d vDiskInfo.generationNbr"},{"line_number":162,"context_line":"    \tself.op_.vDiskInfo_.cloudEnabled \u003d vDiskInfo.cloudEnabled"},{"line_number":163,"context_line":"    \tself.op_.vDiskInfo_.dedupBuckets \u003d str(vDiskInfo.dedupBuckets)"},{"line_number":164,"context_line":"    \tself.op_.vDiskInfo_.masterVDiskName \u003d str(vDiskInfo.masterVDiskName)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa31d9ce_6912685a","line":161,"updated":"2017-02-16 19:37:47.000000000","message":"remove commented out code please","commit_id":"27623a94df2f4633696e186da6175b982d9daf19"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"22cc390c19be49a878f9033e46664080a2a2dd52","unresolved":false,"context_lines":[{"line_number":188,"context_line":"    \t#self.op_.vDiskInfo_.replicationPolicyInfo.dataCenterNames \u003d hc.buffer_vector()"},{"line_number":189,"context_line":"    \t#for dataCenterName in vDiskInfo.replicationPolicyInfo.dataCenterNames:"},{"line_number":190,"context_line":"    \t#    self.op_.vDiskInfo_.replicationPolicyInfo.dataCenterNames.append(dataCenterName) "},{"line_number":191,"context_line":"    "},{"line_number":192,"context_line":"    def addLun(self):"},{"line_number":193,"context_line":"        self.pyCallback_.addLun(self.op_)"},{"line_number":194,"context_line":"        self.waitForResult(self.__class__.__name__)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa31d9ce_092acc7e","line":191,"updated":"2017-02-16 19:37:47.000000000","message":"Nit: try and clear out all the extra spaces too","commit_id":"27623a94df2f4633696e186da6175b982d9daf19"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"22cc390c19be49a878f9033e46664080a2a2dd52","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        LOG.info(\"Creating virtual disk: %s\", vDiskInfo.vDiskName)"},{"line_number":287,"context_line":"\tself.op_ \u003d hc.HCreateVirtualDiskOp()"},{"line_number":288,"context_line":"        self.op_.vDiskInfo_ \u003d hc.VDiskInfo()"},{"line_number":289,"context_line":"\tself.op_.vDiskInfo_.vDiskName \u003d str(vDiskInfo.vDiskName)"},{"line_number":290,"context_line":"\tself.op_.vDiskInfo_.createdBy \u003d vDiskInfo.createdBy"},{"line_number":291,"context_line":"\tself.op_.vDiskInfo_.size \u003d vDiskInfo.size"},{"line_number":292,"context_line":"\tself.op_.vDiskInfo_.replicationFactor \u003d vDiskInfo.replicationFactor"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa31d9ce_e903b8bc","line":289,"updated":"2017-02-16 19:37:47.000000000","message":"This explicit copy is ok if you really prefer to list every param, but it seems like if you ever added/removed any it would quickly become a buggy nightmare. You might want to look into using some kind of helper+reflection to just walk over vDiskInfo and copy params to the same named property of self.op_.vDiskInfo_","commit_id":"27623a94df2f4633696e186da6175b982d9daf19"}],"cinder/volume/drivers/hedvig/HedvigRestClient.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"36b406692220cb5a07bac4370e5f6f1e33798da2","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        }"},{"line_number":73,"context_line":"        obj \u003d self.query(data\u003ddata, node\u003dnode)"},{"line_number":74,"context_line":"        if obj[\u0027status\u0027] !\u003d \u0027ok\u0027:"},{"line_number":75,"context_line":"            raise Exception(\"GetSessionId failure\")"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        return str(obj[\u0027result\u0027][\u0027sessionId\u0027])"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_e47d106f","line":75,"updated":"2017-04-24 14:51:02.000000000","message":"Should raise a more specific exception class derived from exception.VolumeDriverException.","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"36b406692220cb5a07bac4370e5f6f1e33798da2","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        \"\"\""},{"line_number":129,"context_line":"        LOG.debug(\"refreshSessionIds called\")"},{"line_number":130,"context_line":"        if len(self.nodeMap.keys()) \u003d\u003d 0:"},{"line_number":131,"context_line":"            raise Exception(\"nodeMap is empty\")"},{"line_number":132,"context_line":"        for node, val in self.nodeMap.items():"},{"line_number":133,"context_line":"            self.nodeMap[node] \u003d self.getSessionId(node)"},{"line_number":134,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_84940c8d","line":131,"updated":"2017-04-24 14:51:02.000000000","message":"Should raise a more specific exception class derived from exception.VolumeDriverException.","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"d441bd3214d06ffbead900a8db108067c9c03c9e","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        \"\"\""},{"line_number":129,"context_line":"        LOG.debug(\"refreshSessionIds called\")"},{"line_number":130,"context_line":"        if len(self.nodeMap.keys()) \u003d\u003d 0:"},{"line_number":131,"context_line":"            raise Exception(\"nodeMap is empty\")"},{"line_number":132,"context_line":"        for node, val in self.nodeMap.items():"},{"line_number":133,"context_line":"            self.nodeMap[node] \u003d self.getSessionId(node)"},{"line_number":134,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3f044301_65ed9c24","line":131,"in_reply_to":"5ff73747_84940c8d","updated":"2017-10-31 17:35:53.000000000","message":"Done","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"36b406692220cb5a07bac4370e5f6f1e33798da2","unresolved":false,"context_lines":[{"line_number":174,"context_line":"                node \u003d self.getPagesHost()"},{"line_number":175,"context_line":"        else:"},{"line_number":176,"context_line":"            errmsg \u003d \"REST call status - %s\" % obj[\u0027status\u0027]"},{"line_number":177,"context_line":"            raise Exception(errmsg)"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    def createVDisk(self, vDiskInfo\u003dNone):"},{"line_number":180,"context_line":"        \"\"\"Rest call to create a vdisk"}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_24e9b819","line":177,"updated":"2017-04-24 14:51:02.000000000","message":"Should raise a more specific exception class derived from exception.VolumeDriverException.","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"d441bd3214d06ffbead900a8db108067c9c03c9e","unresolved":false,"context_lines":[{"line_number":174,"context_line":"                node \u003d self.getPagesHost()"},{"line_number":175,"context_line":"        else:"},{"line_number":176,"context_line":"            errmsg \u003d \"REST call status - %s\" % obj[\u0027status\u0027]"},{"line_number":177,"context_line":"            raise Exception(errmsg)"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    def createVDisk(self, vDiskInfo\u003dNone):"},{"line_number":180,"context_line":"        \"\"\"Rest call to create a vdisk"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f044301_e5d88c80","line":177,"in_reply_to":"5ff73747_24e9b819","updated":"2017-10-31 17:35:53.000000000","message":"Done","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"36b406692220cb5a07bac4370e5f6f1e33798da2","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        obj \u003d self.makeRestCall(data\u003ddata, node\u003dstr(node))"},{"line_number":207,"context_line":"        if str(obj[\u0027result\u0027][0][\u0027status\u0027]) !\u003d \u0027ok\u0027:"},{"line_number":208,"context_line":"            errmsg \u003d \" createVDisk REST call status - %s\" % obj[\u0027status\u0027]"},{"line_number":209,"context_line":"            raise Exception(errmsg)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def resizeVDisk(self, vDiskName\u003dNone, unit\u003dNone, value\u003dNone):"},{"line_number":212,"context_line":"        \"\"\"Rest Call to resize Vdisk"}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_04eebc21","line":209,"updated":"2017-04-24 14:51:02.000000000","message":"Should raise a more specific exception class derived from exception.VolumeDriverException.","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"d441bd3214d06ffbead900a8db108067c9c03c9e","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        obj \u003d self.makeRestCall(data\u003ddata, node\u003dstr(node))"},{"line_number":207,"context_line":"        if str(obj[\u0027result\u0027][0][\u0027status\u0027]) !\u003d \u0027ok\u0027:"},{"line_number":208,"context_line":"            errmsg \u003d \" createVDisk REST call status - %s\" % obj[\u0027status\u0027]"},{"line_number":209,"context_line":"            raise Exception(errmsg)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def resizeVDisk(self, vDiskName\u003dNone, unit\u003dNone, value\u003dNone):"},{"line_number":212,"context_line":"        \"\"\"Rest Call to resize Vdisk"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f044301_c5e5903a","line":209,"in_reply_to":"5ff73747_04eebc21","updated":"2017-10-31 17:35:53.000000000","message":"Done","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"36b406692220cb5a07bac4370e5f6f1e33798da2","unresolved":false,"context_lines":[{"line_number":251,"context_line":""},{"line_number":252,"context_line":"        if str(obj[\u0027result\u0027][0][\u0027status\u0027]) !\u003d \u0027ok\u0027:"},{"line_number":253,"context_line":"            errmsg \u003d \" resizeVDisk REST call status - %s\" % obj[\u0027status\u0027]"},{"line_number":254,"context_line":"            raise Exception(errmsg)"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"    def descVDisk(self, vDiskName\u003dNone):"},{"line_number":257,"context_line":"        \"\"\"Rest Call to describe Vdisk"}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_e4f2b006","line":254,"updated":"2017-04-24 14:51:02.000000000","message":"Should raise a more specific exception class derived from exception.VolumeDriverException.","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"d441bd3214d06ffbead900a8db108067c9c03c9e","unresolved":false,"context_lines":[{"line_number":251,"context_line":""},{"line_number":252,"context_line":"        if str(obj[\u0027result\u0027][0][\u0027status\u0027]) !\u003d \u0027ok\u0027:"},{"line_number":253,"context_line":"            errmsg \u003d \" resizeVDisk REST call status - %s\" % obj[\u0027status\u0027]"},{"line_number":254,"context_line":"            raise Exception(errmsg)"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"    def descVDisk(self, vDiskName\u003dNone):"},{"line_number":257,"context_line":"        \"\"\"Rest Call to describe Vdisk"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f044301_a5e2842e","line":254,"in_reply_to":"5ff73747_e4f2b006","updated":"2017-10-31 17:35:53.000000000","message":"Done","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"36b406692220cb5a07bac4370e5f6f1e33798da2","unresolved":false,"context_lines":[{"line_number":286,"context_line":""},{"line_number":287,"context_line":"        if obj[\u0027status\u0027] !\u003d \u0027ok\u0027:"},{"line_number":288,"context_line":"            errmsg \u003d \" descVDisk REST call status - %s\" % obj[\u0027status\u0027]"},{"line_number":289,"context_line":"            raise Exception(errmsg)"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"        return obj[\"result\"]"},{"line_number":292,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_c4f7b4f5","line":289,"updated":"2017-04-24 14:51:02.000000000","message":"Should raise a more specific exception class derived from exception.VolumeDriverException.","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"d441bd3214d06ffbead900a8db108067c9c03c9e","unresolved":false,"context_lines":[{"line_number":286,"context_line":""},{"line_number":287,"context_line":"        if obj[\u0027status\u0027] !\u003d \u0027ok\u0027:"},{"line_number":288,"context_line":"            errmsg \u003d \" descVDisk REST call status - %s\" % obj[\u0027status\u0027]"},{"line_number":289,"context_line":"            raise Exception(errmsg)"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"        return obj[\"result\"]"},{"line_number":292,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3f044301_85d1c85a","line":289,"in_reply_to":"5ff73747_c4f7b4f5","updated":"2017-10-31 17:35:53.000000000","message":"Done","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"36b406692220cb5a07bac4370e5f6f1e33798da2","unresolved":false,"context_lines":[{"line_number":324,"context_line":"        if str(obj[\u0027result\u0027][0][\u0027status\u0027]) !\u003d \u0027ok\u0027:"},{"line_number":325,"context_line":"            errmsg \u003d \" deleteVDisk REST call status - %s\" % obj[\u0027status\u0027]"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"            raise Exception(errmsg)"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"    def getLun(self, target\u003dNone, vDiskName\u003dNone):"},{"line_number":330,"context_line":"        \"\"\"Retrieve lun number"}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_64e6a047","line":327,"updated":"2017-04-24 14:51:02.000000000","message":"Should raise a more specific exception class derived from exception.VolumeDriverException.","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"d441bd3214d06ffbead900a8db108067c9c03c9e","unresolved":false,"context_lines":[{"line_number":324,"context_line":"        if str(obj[\u0027result\u0027][0][\u0027status\u0027]) !\u003d \u0027ok\u0027:"},{"line_number":325,"context_line":"            errmsg \u003d \" deleteVDisk REST call status - %s\" % obj[\u0027status\u0027]"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"            raise Exception(errmsg)"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"    def getLun(self, target\u003dNone, vDiskName\u003dNone):"},{"line_number":330,"context_line":"        \"\"\"Retrieve lun number"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f044301_65d6bc52","line":327,"in_reply_to":"5ff73747_64e6a047","updated":"2017-10-31 17:35:53.000000000","message":"Done","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"36b406692220cb5a07bac4370e5f6f1e33798da2","unresolved":false,"context_lines":[{"line_number":400,"context_line":""},{"line_number":401,"context_line":"        if obj[\u0027status\u0027] !\u003d \u0027ok\u0027:"},{"line_number":402,"context_line":"            errmsg \u003d \"REST call status - %s\" % obj[\u0027status\u0027]"},{"line_number":403,"context_line":"            raise Exception(errmsg)"},{"line_number":404,"context_line":"        return obj[\u0027result\u0027][\u0027iqn\u0027]"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"    def addLun(self, tgtHost\u003dNone, vDiskName\u003dNone, readonly\u003dNone):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_44bcc404","line":403,"updated":"2017-04-24 14:51:02.000000000","message":"Should raise a more specific exception class derived from exception.VolumeDriverException.","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"d441bd3214d06ffbead900a8db108067c9c03c9e","unresolved":false,"context_lines":[{"line_number":400,"context_line":""},{"line_number":401,"context_line":"        if obj[\u0027status\u0027] !\u003d \u0027ok\u0027:"},{"line_number":402,"context_line":"            errmsg \u003d \"REST call status - %s\" % obj[\u0027status\u0027]"},{"line_number":403,"context_line":"            raise Exception(errmsg)"},{"line_number":404,"context_line":"        return obj[\u0027result\u0027][\u0027iqn\u0027]"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"    def addLun(self, tgtHost\u003dNone, vDiskName\u003dNone, readonly\u003dNone):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f044301_45cbc0a4","line":403,"in_reply_to":"5ff73747_44bcc404","updated":"2017-10-31 17:35:53.000000000","message":"Done","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"36b406692220cb5a07bac4370e5f6f1e33798da2","unresolved":false,"context_lines":[{"line_number":444,"context_line":"        if str(obj[\u0027result\u0027][0][\u0027status\u0027]) !\u003d \u0027ok\u0027 or str("},{"line_number":445,"context_line":"                obj[\u0027result\u0027][0][\u0027targets\u0027][0][\u0027status\u0027]) !\u003d \u0027ok\u0027:"},{"line_number":446,"context_line":"            errmsg \u003d \"REST call status - %s\" % obj[\u0027status\u0027]"},{"line_number":447,"context_line":"            raise Exception(errmsg)"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"    def unmapLun(self, target\u003dNone, vDiskName\u003dNone):"},{"line_number":450,"context_line":"        \"\"\"Rest call to unmap Lun"}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_043c7c91","line":447,"updated":"2017-04-24 14:51:02.000000000","message":"Should raise a more specific exception class derived from exception.VolumeDriverException.","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"d441bd3214d06ffbead900a8db108067c9c03c9e","unresolved":false,"context_lines":[{"line_number":444,"context_line":"        if str(obj[\u0027result\u0027][0][\u0027status\u0027]) !\u003d \u0027ok\u0027 or str("},{"line_number":445,"context_line":"                obj[\u0027result\u0027][0][\u0027targets\u0027][0][\u0027status\u0027]) !\u003d \u0027ok\u0027:"},{"line_number":446,"context_line":"            errmsg \u003d \"REST call status - %s\" % obj[\u0027status\u0027]"},{"line_number":447,"context_line":"            raise Exception(errmsg)"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"    def unmapLun(self, target\u003dNone, vDiskName\u003dNone):"},{"line_number":450,"context_line":"        \"\"\"Rest call to unmap Lun"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f044301_25d0b450","line":447,"in_reply_to":"5ff73747_043c7c91","updated":"2017-10-31 17:35:53.000000000","message":"Done","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"7a2ef219c8159eaec7c01399ceb4a7e65bb06289","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        :return:  session ID which is valid for 15 minutes"},{"line_number":52,"context_line":"        \"\"\""},{"line_number":53,"context_line":"        LOG.debug(\"getSessionId called with node \" + str(node))"},{"line_number":54,"context_line":"        data \u003d {"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"            \u0027request\u0027: {"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"                \u0027type\u0027: \u0027Login\u0027,"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"                \u0027category\u0027: \u0027UserManagement\u0027,"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"                \u0027params\u0027: {"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"                    \u0027userName\u0027: self.username_,"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"                    \u0027password\u0027: self.password_,"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"                    \u0027cluster\u0027: self.cluster_"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"                }"},{"line_number":71,"context_line":"            }"},{"line_number":72,"context_line":"        }"},{"line_number":73,"context_line":"        obj \u003d self.query(data\u003ddata, node\u003dnode)"},{"line_number":74,"context_line":"        if obj[\u0027status\u0027] !\u003d \u0027ok\u0027:"},{"line_number":75,"context_line":"            raise exception.HedvigVolumeDriverException(\"GetSessionId failure\")"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f044301_2d977293","line":72,"range":{"start_line":54,"start_character":0,"end_line":72,"end_character":9},"updated":"2017-05-04 06:49:38.000000000","message":"redundant newlines?","commit_id":"9e6a33fb3e9c15158d25ed9cae0c44abd114b1de"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"d441bd3214d06ffbead900a8db108067c9c03c9e","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"                }"},{"line_number":71,"context_line":"            }"},{"line_number":72,"context_line":"        }"},{"line_number":73,"context_line":"        obj \u003d self.query(data\u003ddata, node\u003dnode)"},{"line_number":74,"context_line":"        if obj[\u0027status\u0027] !\u003d \u0027ok\u0027:"},{"line_number":75,"context_line":"            raise exception.HedvigVolumeDriverException(\"GetSessionId failure\")"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f044301_5dcdb05b","line":72,"in_reply_to":"3f044301_2d977293","updated":"2017-10-31 17:35:53.000000000","message":"Done","commit_id":"9e6a33fb3e9c15158d25ed9cae0c44abd114b1de"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"7a2ef219c8159eaec7c01399ceb4a7e65bb06289","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        :return:  nodes present in the cluster"},{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        LOG.debug(\"getAllClusterNodes called with node \" + str(node))"},{"line_number":86,"context_line":"        data \u003d {"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"            \u0027request\u0027: {"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"                \u0027type\u0027: \u0027ListClusterNodes\u0027,"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"                \u0027category\u0027: \u0027VirtualDiskManagement\u0027,"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"                \u0027sessionId\u0027: self.getSessionId(node),"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"            }"},{"line_number":97,"context_line":"        }"},{"line_number":98,"context_line":"        obj \u003d self.makeRestCall(data\u003ddata, node\u003dnode)"},{"line_number":99,"context_line":"        return obj[\u0027result\u0027]"},{"line_number":100,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3f044301_cd8dae7c","line":97,"range":{"start_line":86,"start_character":0,"end_line":97,"end_character":9},"updated":"2017-05-04 06:49:38.000000000","message":"too","commit_id":"9e6a33fb3e9c15158d25ed9cae0c44abd114b1de"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"d441bd3214d06ffbead900a8db108067c9c03c9e","unresolved":false,"context_lines":[{"line_number":94,"context_line":"                \u0027sessionId\u0027: self.getSessionId(node),"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"            }"},{"line_number":97,"context_line":"        }"},{"line_number":98,"context_line":"        obj \u003d self.makeRestCall(data\u003ddata, node\u003dnode)"},{"line_number":99,"context_line":"        return obj[\u0027result\u0027]"},{"line_number":100,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3f044301_3ddae416","line":97,"in_reply_to":"3f044301_cd8dae7c","updated":"2017-10-31 17:35:53.000000000","message":"Done","commit_id":"9e6a33fb3e9c15158d25ed9cae0c44abd114b1de"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"7a2ef219c8159eaec7c01399ceb4a7e65bb06289","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            try:"},{"line_number":159,"context_line":"                LOG.debug("},{"line_number":160,"context_line":"                    \"Rest call started with node \" +"},{"line_number":161,"context_line":"                    str(node) +"},{"line_number":162,"context_line":"                    \"  and data : \" +"},{"line_number":163,"context_line":"                    str(data))"},{"line_number":164,"context_line":"                obj \u003d self.query(data, node)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f044301_0d703672","line":161,"range":{"start_line":161,"start_character":20,"end_line":161,"end_character":29},"updated":"2017-05-04 06:49:38.000000000","message":"If node is unicode string, str(node) will fail","commit_id":"9e6a33fb3e9c15158d25ed9cae0c44abd114b1de"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"d441bd3214d06ffbead900a8db108067c9c03c9e","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            try:"},{"line_number":159,"context_line":"                LOG.debug("},{"line_number":160,"context_line":"                    \"Rest call started with node \" +"},{"line_number":161,"context_line":"                    str(node) +"},{"line_number":162,"context_line":"                    \"  and data : \" +"},{"line_number":163,"context_line":"                    str(data))"},{"line_number":164,"context_line":"                obj \u003d self.query(data, node)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f044301_1dd728f0","line":161,"in_reply_to":"3f044301_0d703672","updated":"2017-10-31 17:35:53.000000000","message":"Done","commit_id":"9e6a33fb3e9c15158d25ed9cae0c44abd114b1de"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"7a2ef219c8159eaec7c01399ceb4a7e65bb06289","unresolved":false,"context_lines":[{"line_number":159,"context_line":"                LOG.debug("},{"line_number":160,"context_line":"                    \"Rest call started with node \" +"},{"line_number":161,"context_line":"                    str(node) +"},{"line_number":162,"context_line":"                    \"  and data : \" +"},{"line_number":163,"context_line":"                    str(data))"},{"line_number":164,"context_line":"                obj \u003d self.query(data, node)"},{"line_number":165,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3f044301_2d4ad226","line":162,"range":{"start_line":162,"start_character":31,"end_line":162,"end_character":32},"updated":"2017-05-04 06:49:38.000000000","message":"white space","commit_id":"9e6a33fb3e9c15158d25ed9cae0c44abd114b1de"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"d441bd3214d06ffbead900a8db108067c9c03c9e","unresolved":false,"context_lines":[{"line_number":159,"context_line":"                LOG.debug("},{"line_number":160,"context_line":"                    \"Rest call started with node \" +"},{"line_number":161,"context_line":"                    str(node) +"},{"line_number":162,"context_line":"                    \"  and data : \" +"},{"line_number":163,"context_line":"                    str(data))"},{"line_number":164,"context_line":"                obj \u003d self.query(data, node)"},{"line_number":165,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3f044301_fd059c7b","line":162,"in_reply_to":"3f044301_2d4ad226","updated":"2017-10-31 17:35:53.000000000","message":"Done","commit_id":"9e6a33fb3e9c15158d25ed9cae0c44abd114b1de"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"7a2ef219c8159eaec7c01399ceb4a7e65bb06289","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        while retryCount \u003c 5:"},{"line_number":157,"context_line":"            retryCount \u003d retryCount + 1"},{"line_number":158,"context_line":"            try:"},{"line_number":159,"context_line":"                LOG.debug("},{"line_number":160,"context_line":"                    \"Rest call started with node \" +"},{"line_number":161,"context_line":"                    str(node) +"},{"line_number":162,"context_line":"                    \"  and data : \" +"},{"line_number":163,"context_line":"                    str(data))"},{"line_number":164,"context_line":"                obj \u003d self.query(data, node)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"                if obj[\u0027status\u0027] \u003d\u003d \u0027ok\u0027 or obj[\u0027status\u0027] \u003d\u003d \u0027warning\u0027:"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f044301_6d40da08","line":163,"range":{"start_line":159,"start_character":0,"end_line":163,"end_character":30},"updated":"2017-05-04 06:49:38.000000000","message":"use string format is better:\n    LOG.debug(\"Rest call started with node {!s} and data: {!s}\".format(node, data))","commit_id":"9e6a33fb3e9c15158d25ed9cae0c44abd114b1de"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"d441bd3214d06ffbead900a8db108067c9c03c9e","unresolved":false,"context_lines":[{"line_number":160,"context_line":"                    \"Rest call started with node \" +"},{"line_number":161,"context_line":"                    str(node) +"},{"line_number":162,"context_line":"                    \"  and data : \" +"},{"line_number":163,"context_line":"                    str(data))"},{"line_number":164,"context_line":"                obj \u003d self.query(data, node)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"                if obj[\u0027status\u0027] \u003d\u003d \u0027ok\u0027 or obj[\u0027status\u0027] \u003d\u003d \u0027warning\u0027:"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f044301_dd0ae088","line":163,"in_reply_to":"3f044301_6d40da08","updated":"2017-10-31 17:35:53.000000000","message":"Done","commit_id":"9e6a33fb3e9c15158d25ed9cae0c44abd114b1de"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"7a2ef219c8159eaec7c01399ceb4a7e65bb06289","unresolved":false,"context_lines":[{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        sizeInJson \u003d {\u0027unit\u0027: \"GB\","},{"line_number":190,"context_line":"                      \u0027value\u0027: float(sizeInB)"},{"line_number":191,"context_line":"                      }"},{"line_number":192,"context_line":"        vDiskInfo[\u0027size\u0027] \u003d sizeInJson"},{"line_number":193,"context_line":"        data \u003d {"},{"line_number":194,"context_line":"            \u0027request\u0027: {"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f044301_cd500ed8","line":191,"range":{"start_line":191,"start_character":22,"end_line":191,"end_character":23},"updated":"2017-05-04 06:49:38.000000000","message":"why newline?","commit_id":"9e6a33fb3e9c15158d25ed9cae0c44abd114b1de"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"d441bd3214d06ffbead900a8db108067c9c03c9e","unresolved":false,"context_lines":[{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        sizeInJson \u003d {\u0027unit\u0027: \"GB\","},{"line_number":190,"context_line":"                      \u0027value\u0027: float(sizeInB)"},{"line_number":191,"context_line":"                      }"},{"line_number":192,"context_line":"        vDiskInfo[\u0027size\u0027] \u003d sizeInJson"},{"line_number":193,"context_line":"        data \u003d {"},{"line_number":194,"context_line":"            \u0027request\u0027: {"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f044301_bdff1466","line":191,"in_reply_to":"3f044301_cd500ed8","updated":"2017-10-31 17:35:53.000000000","message":"Done","commit_id":"9e6a33fb3e9c15158d25ed9cae0c44abd114b1de"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"7a2ef219c8159eaec7c01399ceb4a7e65bb06289","unresolved":false,"context_lines":[{"line_number":217,"context_line":"        \"\"\""},{"line_number":218,"context_line":"        node \u003d str(self.getPagesHost())"},{"line_number":219,"context_line":"        sessionId \u003d self.retrieveSessionId(node)"},{"line_number":220,"context_line":"        LOG.debug("},{"line_number":221,"context_line":"            \"Resizing vdisk\" +"},{"line_number":222,"context_line":"            str(vDiskName) +"},{"line_number":223,"context_line":"            \" to \" +"},{"line_number":224,"context_line":"            str(value) +"},{"line_number":225,"context_line":"            \"GB\")"},{"line_number":226,"context_line":"        data \u003d {"},{"line_number":227,"context_line":"            \u0027request\u0027: {"},{"line_number":228,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3f044301_4d5e3ee7","line":225,"range":{"start_line":220,"start_character":0,"end_line":225,"end_character":17},"updated":"2017-05-04 06:49:38.000000000","message":"same as above","commit_id":"9e6a33fb3e9c15158d25ed9cae0c44abd114b1de"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"d441bd3214d06ffbead900a8db108067c9c03c9e","unresolved":false,"context_lines":[{"line_number":222,"context_line":"            str(vDiskName) +"},{"line_number":223,"context_line":"            \" to \" +"},{"line_number":224,"context_line":"            str(value) +"},{"line_number":225,"context_line":"            \"GB\")"},{"line_number":226,"context_line":"        data \u003d {"},{"line_number":227,"context_line":"            \u0027request\u0027: {"},{"line_number":228,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3f044301_9d04587d","line":225,"in_reply_to":"3f044301_4d5e3ee7","updated":"2017-10-31 17:35:53.000000000","message":"Done","commit_id":"9e6a33fb3e9c15158d25ed9cae0c44abd114b1de"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"7a2ef219c8159eaec7c01399ceb4a7e65bb06289","unresolved":false,"context_lines":[{"line_number":223,"context_line":"            \" to \" +"},{"line_number":224,"context_line":"            str(value) +"},{"line_number":225,"context_line":"            \"GB\")"},{"line_number":226,"context_line":"        data \u003d {"},{"line_number":227,"context_line":"            \u0027request\u0027: {"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"                \u0027type\u0027: \u0027ResizeDisks\u0027,"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"                \u0027category\u0027: \u0027VirtualDiskManagement\u0027,"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"                \u0027params\u0027: {"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"                    \u0027virtualDisks\u0027: [str(vDiskName)],"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"                    \u0027size\u0027: {"},{"line_number":238,"context_line":"                        \u0027unit\u0027: unit,"},{"line_number":239,"context_line":"                        \u0027value\u0027: value"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"                    },"},{"line_number":242,"context_line":"                },"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"                \u0027sessionId\u0027: sessionId,"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"            }"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"        }"},{"line_number":249,"context_line":"        obj \u003d self.makeRestCall(data\u003ddata, node\u003dstr(node))"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"        if str(obj[\u0027result\u0027][0][\u0027status\u0027]) !\u003d \u0027ok\u0027:"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f044301_8d6446bb","line":248,"range":{"start_line":226,"start_character":0,"end_line":248,"end_character":9},"updated":"2017-05-04 06:49:38.000000000","message":"newlines?","commit_id":"9e6a33fb3e9c15158d25ed9cae0c44abd114b1de"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"d441bd3214d06ffbead900a8db108067c9c03c9e","unresolved":false,"context_lines":[{"line_number":245,"context_line":""},{"line_number":246,"context_line":"            }"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"        }"},{"line_number":249,"context_line":"        obj \u003d self.makeRestCall(data\u003ddata, node\u003dstr(node))"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"        if str(obj[\u0027result\u0027][0][\u0027status\u0027]) !\u003d \u0027ok\u0027:"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f044301_7df98c7e","line":248,"in_reply_to":"3f044301_8d6446bb","updated":"2017-10-31 17:35:53.000000000","message":"Done","commit_id":"9e6a33fb3e9c15158d25ed9cae0c44abd114b1de"},{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"fd1dad1ce85f6e2695ee3ae9441d660692f4e718","unresolved":false,"context_lines":[{"line_number":17,"context_line":"\"\"\""},{"line_number":18,"context_line":"Rest Client  for Hedvig Openstack implementation."},{"line_number":19,"context_line":"\"\"\""},{"line_number":20,"context_line":"from cinder import exception"},{"line_number":21,"context_line":"import json"},{"line_number":22,"context_line":"from oslo_log import log as logging"},{"line_number":23,"context_line":"import random"},{"line_number":24,"context_line":"from six.moves import urllib"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3f044301_3789cac9","line":24,"range":{"start_line":20,"start_character":0,"end_line":24,"end_character":28},"updated":"2017-05-05 16:11:11.000000000","message":"please, make imports order according to guide [0]\n[0] - https://docs.openstack.org/developer/hacking/#real-world-import-order-examples","commit_id":"034b60f00851215dcf32ad58e10a020f4170f678"},{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"fd1dad1ce85f6e2695ee3ae9441d660692f4e718","unresolved":false,"context_lines":[{"line_number":29,"context_line":"class HedvigRestClient(object):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def __init__(self, nodes, username, password, cluster):"},{"line_number":32,"context_line":"        \"\"\":param node: hostname of one of the nodes in the cluster"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        :param username:  username of the cluster"},{"line_number":35,"context_line":"        :param password:  password of the cluster"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f044301_d78d06d4","line":32,"range":{"start_line":32,"start_character":7,"end_line":32,"end_character":67},"updated":"2017-05-05 16:11:11.000000000","message":"I don\u0027t know if it a \u0027mistake\u0027 but it looks unusual. move param section lower","commit_id":"034b60f00851215dcf32ad58e10a020f4170f678"},{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"fd1dad1ce85f6e2695ee3ae9441d660692f4e718","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        :param password:  password of the cluster"},{"line_number":36,"context_line":"        :param cluster:  clustername of the cluster"},{"line_number":37,"context_line":"        \"\"\""},{"line_number":38,"context_line":"        LOG.debug(str(self.__class__.__name__) +"},{"line_number":39,"context_line":"                  \u0027 init called with %s , %s, %s, %s\u0027, nodes,"},{"line_number":40,"context_line":"                  username, password, cluster)"},{"line_number":41,"context_line":"        self.username_ \u003d username"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f044301_779f5203","line":38,"range":{"start_line":38,"start_character":18,"end_line":38,"end_character":21},"updated":"2017-05-05 16:11:11.000000000","message":"use six library for string conversion","commit_id":"034b60f00851215dcf32ad58e10a020f4170f678"},{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"fd1dad1ce85f6e2695ee3ae9441d660692f4e718","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        LOG.debug(str(self.__class__.__name__) +"},{"line_number":39,"context_line":"                  \u0027 init called with %s , %s, %s, %s\u0027, nodes,"},{"line_number":40,"context_line":"                  username, password, cluster)"},{"line_number":41,"context_line":"        self.username_ \u003d username"},{"line_number":42,"context_line":"        self.password_ \u003d password"},{"line_number":43,"context_line":"        self.cluster_ \u003d cluster"},{"line_number":44,"context_line":"        self.nodeMap \u003d {}"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f044301_37b2ea95","line":41,"range":{"start_line":41,"start_character":21,"end_line":41,"end_character":22},"updated":"2017-05-05 16:11:11.000000000","message":"Why do we need \u0027_\u0027 symbol everywhere at the end of the variable?","commit_id":"034b60f00851215dcf32ad58e10a020f4170f678"},{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"fd1dad1ce85f6e2695ee3ae9441d660692f4e718","unresolved":false,"context_lines":[{"line_number":97,"context_line":"            try:"},{"line_number":98,"context_line":"                LOG.debug(\"Attempting storeNodeMap  with node \" + str(node))"},{"line_number":99,"context_line":"                nodeList \u003d self.getAllClusterNodes(node)"},{"line_number":100,"context_line":"                exitFlag \u003d True"},{"line_number":101,"context_line":"                for node_ in nodeList:"},{"line_number":102,"context_line":"                    self.nodeMap[str(node_)] \u003d self.getSessionId(str(node_))"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3f044301_776d1203","line":100,"range":{"start_line":100,"start_character":16,"end_line":100,"end_character":31},"updated":"2017-05-05 16:11:11.000000000","message":"It\u0027s better to use more specific exception. Clarify it, please.","commit_id":"034b60f00851215dcf32ad58e10a020f4170f678"},{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"fd1dad1ce85f6e2695ee3ae9441d660692f4e718","unresolved":false,"context_lines":[{"line_number":97,"context_line":"            try:"},{"line_number":98,"context_line":"                LOG.debug(\"Attempting storeNodeMap  with node \" + str(node))"},{"line_number":99,"context_line":"                nodeList \u003d self.getAllClusterNodes(node)"},{"line_number":100,"context_line":"                exitFlag \u003d True"},{"line_number":101,"context_line":"                for node_ in nodeList:"},{"line_number":102,"context_line":"                    self.nodeMap[str(node_)] \u003d self.getSessionId(str(node_))"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3f044301_d7a62654","line":100,"range":{"start_line":100,"start_character":16,"end_line":100,"end_character":31},"updated":"2017-05-05 16:11:11.000000000","message":"it\u0027s better to use for/else construction for it.\nIf you get an exception in getSessionId call (maybe HTTPError in urllib.request.urlopen in self.query call) you will have log debug message about retry and return after it","commit_id":"034b60f00851215dcf32ad58e10a020f4170f678"},{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"fd1dad1ce85f6e2695ee3ae9441d660692f4e718","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        :return:"},{"line_number":141,"context_line":"        \"\"\""},{"line_number":142,"context_line":"        retryCount \u003d 0"},{"line_number":143,"context_line":"        while retryCount \u003c 5:"},{"line_number":144,"context_line":"            retryCount \u003d retryCount + 1"},{"line_number":145,"context_line":"            try:"},{"line_number":146,"context_line":"                LOG.debug(\"Rest call started with node {!s} \\"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f044301_7746327f","line":143,"range":{"start_line":143,"start_character":27,"end_line":143,"end_character":28},"updated":"2017-05-05 16:11:11.000000000","message":"please, get rid of magic numbers in code","commit_id":"034b60f00851215dcf32ad58e10a020f4170f678"},{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"fd1dad1ce85f6e2695ee3ae9441d660692f4e718","unresolved":false,"context_lines":[{"line_number":149,"context_line":"                if obj[\u0027status\u0027] \u003d\u003d \u0027ok\u0027 or obj[\u0027status\u0027] \u003d\u003d \u0027warning\u0027:"},{"line_number":150,"context_line":"                    return obj"},{"line_number":151,"context_line":"                # We need to refresh sessionIDs if the earlier ones are expired"},{"line_number":152,"context_line":"                if \u0027session-failure\u0027 in obj[\u0027status\u0027]:"},{"line_number":153,"context_line":"                    self.refreshSessionIds()"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"            except Exception:"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f044301_d754e623","line":152,"range":{"start_line":152,"start_character":15,"end_line":152,"end_character":54},"updated":"2017-05-05 16:11:11.000000000","message":"use elif for it","commit_id":"034b60f00851215dcf32ad58e10a020f4170f678"},{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"fd1dad1ce85f6e2695ee3ae9441d660692f4e718","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        node \u003d str(self.getPagesHost())"},{"line_number":168,"context_line":"        sessionId \u003d self.retrieveSessionId(node)"},{"line_number":169,"context_line":"        LOG.debug(\"Creating vdisk\")"},{"line_number":170,"context_line":"        sizeInB \u003d vDiskInfo[\u0027size\u0027] / 1024 / 1024 / 1024"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        sizeInJson \u003d {\u0027unit\u0027: \"GB\","},{"line_number":173,"context_line":"                      \u0027value\u0027: float(sizeInB)}"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f044301_773bd2ea","line":170,"range":{"start_line":170,"start_character":36,"end_line":170,"end_character":56},"updated":"2017-05-05 16:11:11.000000000","message":"and here about magic numbers. use oslo.units for it\nalso you don\u0027t use division from future module. So you can lose data\u0027s accuracy here","commit_id":"034b60f00851215dcf32ad58e10a020f4170f678"},{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"fd1dad1ce85f6e2695ee3ae9441d660692f4e718","unresolved":false,"context_lines":[{"line_number":180,"context_line":"                \u0027sessionId\u0027: sessionId,"},{"line_number":181,"context_line":"            }"},{"line_number":182,"context_line":"        }"},{"line_number":183,"context_line":"        obj \u003d self.makeRestCall(data\u003ddata, node\u003dstr(node))"},{"line_number":184,"context_line":"        if str(obj[\u0027result\u0027][0][\u0027status\u0027]) !\u003d \u0027ok\u0027:"},{"line_number":185,"context_line":"            errmsg \u003d \" createVDisk REST call status - %s\" % obj[\u0027status\u0027]"},{"line_number":186,"context_line":"            raise exception.HedvigVolumeDriverException(errmsg)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f044301_17200eb0","line":183,"range":{"start_line":183,"start_character":48,"end_line":183,"end_character":58},"updated":"2017-05-05 16:11:11.000000000","message":"why do you need str conversion here if it\u0027s already converted?","commit_id":"034b60f00851215dcf32ad58e10a020f4170f678"},{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"fd1dad1ce85f6e2695ee3ae9441d660692f4e718","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        :param value:  size of the resized vdisk in GB"},{"line_number":194,"context_line":"        :return: status of the Rest call"},{"line_number":195,"context_line":"        \"\"\""},{"line_number":196,"context_line":"        node \u003d str(self.getPagesHost())"},{"line_number":197,"context_line":"        sessionId \u003d self.retrieveSessionId(node)"},{"line_number":198,"context_line":"        LOG.debug(\"Resizing vdisk \" + vDiskName + \" to \" + value + \"GB\")"},{"line_number":199,"context_line":"        data \u003d {"},{"line_number":200,"context_line":"            \u0027request\u0027: {"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f044301_dae1ad2c","line":197,"range":{"start_line":196,"start_character":0,"end_line":197,"end_character":48},"updated":"2017-05-05 16:11:11.000000000","message":"it looks weird to get key \u0027node\u0027 in the first method and after if using this key try to get something?","commit_id":"034b60f00851215dcf32ad58e10a020f4170f678"},{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"fd1dad1ce85f6e2695ee3ae9441d660692f4e718","unresolved":false,"context_lines":[{"line_number":210,"context_line":"                \u0027sessionId\u0027: sessionId,"},{"line_number":211,"context_line":"            }"},{"line_number":212,"context_line":"        }"},{"line_number":213,"context_line":"        obj \u003d self.makeRestCall(data\u003ddata, node\u003dstr(node))"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        if str(obj[\u0027result\u0027][0][\u0027status\u0027]) !\u003d \u0027ok\u0027:"},{"line_number":216,"context_line":"            errmsg \u003d \" resizeVDisk REST call status - %s\" % obj[\u0027status\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f044301_7accd9bb","line":213,"range":{"start_line":213,"start_character":43,"end_line":213,"end_character":58},"updated":"2017-05-05 16:11:11.000000000","message":"Same as @183 comment","commit_id":"034b60f00851215dcf32ad58e10a020f4170f678"},{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"fd1dad1ce85f6e2695ee3ae9441d660692f4e718","unresolved":false,"context_lines":[{"line_number":236,"context_line":"            }"},{"line_number":237,"context_line":"        }"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"        obj \u003d self.makeRestCall(data\u003ddata, node\u003dnode)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"        if obj[\u0027status\u0027] !\u003d \u0027ok\u0027:"},{"line_number":242,"context_line":"            errmsg \u003d \" descVDisk REST call status - %s\" % obj[\u0027status\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f044301_fabfc9f8","line":239,"range":{"start_line":239,"start_character":43,"end_line":239,"end_character":52},"updated":"2017-05-05 16:11:11.000000000","message":"but here not the same as @183 comment :D","commit_id":"034b60f00851215dcf32ad58e10a020f4170f678"},{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"fd1dad1ce85f6e2695ee3ae9441d660692f4e718","unresolved":false,"context_lines":[{"line_number":360,"context_line":"        obj \u003d self.makeRestCall(data\u003ddata, node\u003dstr(node))"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        if str(obj[\u0027result\u0027][0][\u0027status\u0027]) !\u003d \u0027ok\u0027 or str("},{"line_number":363,"context_line":"                obj[\u0027result\u0027][0][\u0027targets\u0027][0][\u0027status\u0027]) !\u003d \u0027ok\u0027:"},{"line_number":364,"context_line":"            errmsg \u003d \"REST call status - %s\" % obj[\u0027status\u0027]"},{"line_number":365,"context_line":"            raise exception.HedvigVolumeDriverException(errmsg)"},{"line_number":366,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3f044301_9a08c5d9","line":363,"range":{"start_line":363,"start_character":16,"end_line":363,"end_character":56},"updated":"2017-05-05 16:11:11.000000000","message":"please, make it less complicated for reading and understanding","commit_id":"034b60f00851215dcf32ad58e10a020f4170f678"},{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"fd1dad1ce85f6e2695ee3ae9441d660692f4e718","unresolved":false,"context_lines":[{"line_number":407,"context_line":"        \"\"\""},{"line_number":408,"context_line":"        LOG.debug("},{"line_number":409,"context_line":"            \" addAccess called with param host %s , vdisk %s \","},{"line_number":410,"context_line":"            str(host),"},{"line_number":411,"context_line":"            str(vDiskName))"},{"line_number":412,"context_line":"        node \u003d str(self.getPagesHost())"},{"line_number":413,"context_line":"        sessionId \u003d self.retrieveSessionId(node)"},{"line_number":414,"context_line":"        data \u003d {"},{"line_number":415,"context_line":"            \u0027request\u0027: {"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f044301_dafd2db2","line":412,"range":{"start_line":410,"start_character":0,"end_line":412,"end_character":39},"updated":"2017-05-05 16:11:11.000000000","message":"same about str","commit_id":"034b60f00851215dcf32ad58e10a020f4170f678"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"ea650096dd95342a80cf81600dbcc2e6254b8457","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        }"},{"line_number":68,"context_line":"        obj \u003d self.query(data\u003ddata, node\u003dnode)"},{"line_number":69,"context_line":"        if obj[\u0027status\u0027] !\u003d \u0027ok\u0027:"},{"line_number":70,"context_line":"            raise exception.HedvigVolumeDriverException(\"GetSessionId failure\")"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        return str(obj[\u0027result\u0027][\u0027sessionId\u0027])"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1f013ff3_706ab1b3","line":70,"range":{"start_line":70,"start_character":18,"end_line":70,"end_character":55},"updated":"2017-05-16 18:23:06.000000000","message":"This class doesn\u0027t exist.","commit_id":"2279db4f807f7c291648d1f9759a48a3968e3b1e"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ca41b81a4cfbeb6232ed5654a3e4b4b18b05f107","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        :param password:  password of the cluster"},{"line_number":40,"context_line":"        :param cluster:  clustername of the cluster"},{"line_number":41,"context_line":"        \"\"\""},{"line_number":42,"context_line":"        LOG.debug(\u0027 init called with %s , %s, %s, %s\u0027, nodes,"},{"line_number":43,"context_line":"                  username, password, cluster)"},{"line_number":44,"context_line":"        self.username \u003d username"},{"line_number":45,"context_line":"        self.password \u003d password"}],"source_content_type":"text/x-python","patch_set":14,"id":"1f013ff3_ba9361a3","line":42,"updated":"2017-05-17 08:42:41.000000000","message":"Trailing space in the log message","commit_id":"2086049cc4a9246ca9d8653919c8fec9188953a9"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ca41b81a4cfbeb6232ed5654a3e4b4b18b05f107","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        :param cluster:  clustername of the cluster"},{"line_number":41,"context_line":"        \"\"\""},{"line_number":42,"context_line":"        LOG.debug(\u0027 init called with %s , %s, %s, %s\u0027, nodes,"},{"line_number":43,"context_line":"                  username, password, cluster)"},{"line_number":44,"context_line":"        self.username \u003d username"},{"line_number":45,"context_line":"        self.password \u003d password"},{"line_number":46,"context_line":"        self.cluster \u003d cluster"}],"source_content_type":"text/x-python","patch_set":14,"id":"1f013ff3_daaf4de1","line":43,"updated":"2017-05-17 08:42:41.000000000","message":"Do not add password to the log!","commit_id":"2086049cc4a9246ca9d8653919c8fec9188953a9"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ca41b81a4cfbeb6232ed5654a3e4b4b18b05f107","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        self.nodeMap \u003d {}"},{"line_number":48,"context_line":"        self.storeNodeMap(nodes)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def getSessionId(self, node\u003dNone):"},{"line_number":51,"context_line":"        \"\"\"Retrieves the session Id"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        :param node: hostname of the node"}],"source_content_type":"text/x-python","patch_set":14,"id":"1f013ff3_3a32b1a8","line":50,"updated":"2017-05-17 08:42:41.000000000","message":"Camel case is not pythonic, use underscore please. E.g.: get_session_id","commit_id":"2086049cc4a9246ca9d8653919c8fec9188953a9"},{"author":{"_account_id":26028,"name":"Swathi Hrishikesh","email":"swathi@hedviginc.com","username":"hrishs"},"change_message_id":"c42e698650609c7bc9234ca962f4facecaa648fb","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        self.nodeMap \u003d {}"},{"line_number":48,"context_line":"        self.storeNodeMap(nodes)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def getSessionId(self, node\u003dNone):"},{"line_number":51,"context_line":"        \"\"\"Retrieves the session Id"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        :param node: hostname of the node"}],"source_content_type":"text/x-python","patch_set":14,"id":"ff0f0b1f_a80a5987","line":50,"in_reply_to":"1f013ff3_3a32b1a8","updated":"2018-04-23 21:39:39.000000000","message":"Using underscore for every function in all the files now.","commit_id":"2086049cc4a9246ca9d8653919c8fec9188953a9"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ca41b81a4cfbeb6232ed5654a3e4b4b18b05f107","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        :param node: hostname of the node"},{"line_number":54,"context_line":"        :return:  session ID which is valid for 15 minutes"},{"line_number":55,"context_line":"        \"\"\""},{"line_number":56,"context_line":"        LOG.debug(\"getSessionId called with node \" + str(node))"},{"line_number":57,"context_line":"        data \u003d {"},{"line_number":58,"context_line":"            \u0027request\u0027: {"},{"line_number":59,"context_line":"                \u0027type\u0027: \u0027Login\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"1f013ff3_fa5d69e9","line":56,"updated":"2017-05-17 08:42:41.000000000","message":"should be:\n\nLOG.debug(\"getSessionId called with node %s\", six.text_type(node))","commit_id":"2086049cc4a9246ca9d8653919c8fec9188953a9"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ca41b81a4cfbeb6232ed5654a3e4b4b18b05f107","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        if obj[\u0027status\u0027] !\u003d \u0027ok\u0027:"},{"line_number":70,"context_line":"            raise exception.HedvigDriverException(\"GetSessionId failure\")"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        return str(obj[\u0027result\u0027][\u0027sessionId\u0027])"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def getAllClusterNodes(self, node):"},{"line_number":75,"context_line":"        \"\"\"Retrieves all the nodes present in the cluster"}],"source_content_type":"text/x-python","patch_set":14,"id":"1f013ff3_1aded53e","line":72,"updated":"2017-05-17 08:42:41.000000000","message":"Please, use six.text_type instead of str here and below","commit_id":"2086049cc4a9246ca9d8653919c8fec9188953a9"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ca41b81a4cfbeb6232ed5654a3e4b4b18b05f107","unresolved":false,"context_lines":[{"line_number":163,"context_line":"                    self.refreshSessionIds()"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"            except Exception:"},{"line_number":166,"context_line":"                node \u003d self.getPagesHost()"},{"line_number":167,"context_line":"        else:"},{"line_number":168,"context_line":"            errmsg \u003d \"REST call status - %s\" % obj[\u0027status\u0027]"},{"line_number":169,"context_line":"            raise exception.HedvigDriverException(errmsg)"}],"source_content_type":"text/x-python","patch_set":14,"id":"1f013ff3_faae8996","line":166,"updated":"2017-05-17 08:42:41.000000000","message":"Can we catch less general exception here?","commit_id":"2086049cc4a9246ca9d8653919c8fec9188953a9"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"d441bd3214d06ffbead900a8db108067c9c03c9e","unresolved":false,"context_lines":[{"line_number":163,"context_line":"                    self.refreshSessionIds()"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"            except Exception:"},{"line_number":166,"context_line":"                node \u003d self.getPagesHost()"},{"line_number":167,"context_line":"        else:"},{"line_number":168,"context_line":"            errmsg \u003d \"REST call status - %s\" % obj[\u0027status\u0027]"},{"line_number":169,"context_line":"            raise exception.HedvigDriverException(errmsg)"}],"source_content_type":"text/x-python","patch_set":14,"id":"ff0f0b1f_c7f52885","line":166,"in_reply_to":"1f013ff3_faae8996","updated":"2017-10-31 17:35:53.000000000","message":"We want to retry the rest call with another node/endpoint if any kind of exception is received. Hence, the generic exception clause.","commit_id":"2086049cc4a9246ca9d8653919c8fec9188953a9"},{"author":{"_account_id":26028,"name":"Swathi Hrishikesh","email":"swathi@hedviginc.com","username":"hrishs"},"change_message_id":"c42e698650609c7bc9234ca962f4facecaa648fb","unresolved":false,"context_lines":[{"line_number":163,"context_line":"                    self.refreshSessionIds()"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"            except Exception:"},{"line_number":166,"context_line":"                node \u003d self.getPagesHost()"},{"line_number":167,"context_line":"        else:"},{"line_number":168,"context_line":"            errmsg \u003d \"REST call status - %s\" % obj[\u0027status\u0027]"},{"line_number":169,"context_line":"            raise exception.HedvigDriverException(errmsg)"}],"source_content_type":"text/x-python","patch_set":14,"id":"ff0f0b1f_e803b10e","line":166,"in_reply_to":"1f013ff3_faae8996","updated":"2018-04-23 21:39:39.000000000","message":"We want to retry the rest call with another node/endpoint if any kind of exception is received. Hence, the generic exception clause.","commit_id":"2086049cc4a9246ca9d8653919c8fec9188953a9"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ca41b81a4cfbeb6232ed5654a3e4b4b18b05f107","unresolved":false,"context_lines":[{"line_number":205,"context_line":"        \"\"\""},{"line_number":206,"context_line":"        node \u003d str(self.getPagesHost())"},{"line_number":207,"context_line":"        sessionId \u003d self.retrieveSessionId(node)"},{"line_number":208,"context_line":"        LOG.debug(\"Resizing vdisk {!s} \\"},{"line_number":209,"context_line":"                  to: {!s} GB\".format(vDiskName, value))"},{"line_number":210,"context_line":"        data \u003d {"},{"line_number":211,"context_line":"            \u0027request\u0027: {"}],"source_content_type":"text/x-python","patch_set":14,"id":"1f013ff3_5ab9fdc9","line":208,"updated":"2017-05-17 08:42:41.000000000","message":"Please, make all logging according to Openstack Logging Guidelines: https://specs.openstack.org/openstack/openstack-specs/specs/log-guidelines.html","commit_id":"2086049cc4a9246ca9d8653919c8fec9188953a9"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3c73c82f46ad7e1b27eb610edabdb3e8fbbf33fa","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/python"},{"line_number":2,"context_line":"# Copyright (c) 2012 Hedvig, Inc."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff0f0b1f_975802fa","line":1,"updated":"2017-05-24 21:02:41.000000000","message":"Remove","commit_id":"c48817fa3007d4ba419131687027a91ffcd94abf"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3c73c82f46ad7e1b27eb610edabdb3e8fbbf33fa","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"\"\"\""},{"line_number":18,"context_line":"Rest Client  for Hedvig Openstack implementation."},{"line_number":19,"context_line":"\"\"\""},{"line_number":20,"context_line":"import json"},{"line_number":21,"context_line":"import random"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff0f0b1f_37713677","line":18,"range":{"start_line":18,"start_character":11,"end_line":18,"end_character":13},"updated":"2017-05-24 21:02:41.000000000","message":"nit: extra space here","commit_id":"c48817fa3007d4ba419131687027a91ffcd94abf"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3c73c82f46ad7e1b27eb610edabdb3e8fbbf33fa","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        self.nodeMap \u003d {}"},{"line_number":50,"context_line":"        self.store_node_map(nodes)"},{"line_number":51,"context_line":"        if len(self.nodeMap) is 0:"},{"line_number":52,"context_line":"            raise exception.HedvigDriverException(\"Unable to \\"},{"line_number":53,"context_line":"                                                  connect to the nodes\")"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def get_session_id(self, node\u003dNone):"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff0f0b1f_d7079ac9","line":52,"range":{"start_line":52,"start_character":61,"end_line":52,"end_character":62},"updated":"2017-05-24 21:02:41.000000000","message":"Close line with ending \" and open the next line with \"","commit_id":"c48817fa3007d4ba419131687027a91ffcd94abf"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3c73c82f46ad7e1b27eb610edabdb3e8fbbf33fa","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        :param node: hostname of the node"},{"line_number":59,"context_line":"        :return:  session ID which is valid for 15 minutes"},{"line_number":60,"context_line":"        \"\"\""},{"line_number":61,"context_line":"        LOG.debug(\"get_session_id called with node \" + six.text_type(node))"},{"line_number":62,"context_line":"        data \u003d {"},{"line_number":63,"context_line":"            \u0027request\u0027: {"},{"line_number":64,"context_line":"                \u0027type\u0027: \u0027Login\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff0f0b1f_970da2e9","line":61,"range":{"start_line":61,"start_character":53,"end_line":61,"end_character":69},"updated":"2017-05-24 21:02:41.000000000","message":"Change + to , and get rid of six.text_type()","commit_id":"c48817fa3007d4ba419131687027a91ffcd94abf"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3c73c82f46ad7e1b27eb610edabdb3e8fbbf33fa","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        :param node: hostname of the node"},{"line_number":83,"context_line":"        :return:  nodes present in the cluster"},{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        LOG.debug(\"get_all_cluster_nodes called with node \" +"},{"line_number":86,"context_line":"                  six.text_type(node))"},{"line_number":87,"context_line":"        data \u003d {"},{"line_number":88,"context_line":"            \u0027request\u0027: {"},{"line_number":89,"context_line":"                \u0027type\u0027: \u0027ListClusterNodes\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff0f0b1f_37f6d6d8","line":86,"range":{"start_line":85,"start_character":59,"end_line":86,"end_character":32},"updated":"2017-05-24 21:02:41.000000000","message":"same","commit_id":"c48817fa3007d4ba419131687027a91ffcd94abf"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3c73c82f46ad7e1b27eb610edabdb3e8fbbf33fa","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        :param nodes: hostname of the nodes in the cluster"},{"line_number":101,"context_line":"        \"\"\""},{"line_number":102,"context_line":"        LOG.debug(\"store_node_map called with node \" + six.text_type(nodes))"},{"line_number":103,"context_line":"        exitFlag \u003d False"},{"line_number":104,"context_line":"        nodeL \u003d [n.strip() for n in nodes.split(\u0027,\u0027)]"},{"line_number":105,"context_line":"        for node in nodeL:"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff0f0b1f_170192af","line":102,"range":{"start_line":102,"start_character":52,"end_line":102,"end_character":69},"updated":"2017-05-24 21:02:41.000000000","message":"same","commit_id":"c48817fa3007d4ba419131687027a91ffcd94abf"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3c73c82f46ad7e1b27eb610edabdb3e8fbbf33fa","unresolved":false,"context_lines":[{"line_number":199,"context_line":"            }"},{"line_number":200,"context_line":"        }"},{"line_number":201,"context_line":"        obj \u003d self.make_rest_call(data\u003ddata, node\u003dnode)"},{"line_number":202,"context_line":"        if six.text_type(obj[\u0027result\u0027][0][\u0027status\u0027]) !\u003d \u0027ok\u0027:"},{"line_number":203,"context_line":"            errmsg \u003d \" create_vdisk REST call status - %s\" % obj[\u0027status\u0027]"},{"line_number":204,"context_line":"            raise exception.HedvigDriverException(errmsg)"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"ff0f0b1f_978242ff","line":202,"range":{"start_line":202,"start_character":11,"end_line":202,"end_character":24},"updated":"2017-05-24 21:02:41.000000000","message":"I don\u0027t think this should be necessary.","commit_id":"c48817fa3007d4ba419131687027a91ffcd94abf"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3c73c82f46ad7e1b27eb610edabdb3e8fbbf33fa","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        }"},{"line_number":201,"context_line":"        obj \u003d self.make_rest_call(data\u003ddata, node\u003dnode)"},{"line_number":202,"context_line":"        if six.text_type(obj[\u0027result\u0027][0][\u0027status\u0027]) !\u003d \u0027ok\u0027:"},{"line_number":203,"context_line":"            errmsg \u003d \" create_vdisk REST call status - %s\" % obj[\u0027status\u0027]"},{"line_number":204,"context_line":"            raise exception.HedvigDriverException(errmsg)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    def resize_vdisk(self, vDiskName\u003dNone, unit\u003dNone, value\u003dNone):"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff0f0b1f_57802af5","line":203,"range":{"start_line":203,"start_character":22,"end_line":203,"end_character":23},"updated":"2017-05-24 21:02:41.000000000","message":"Extra leading space.\n\nException messages should also use the _() translation markers.","commit_id":"c48817fa3007d4ba419131687027a91ffcd94abf"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3c73c82f46ad7e1b27eb610edabdb3e8fbbf33fa","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        \"\"\""},{"line_number":214,"context_line":"        node \u003d self.get_pages_host()"},{"line_number":215,"context_line":"        sessionId \u003d self.retrieve_session_id(node)"},{"line_number":216,"context_line":"        LOG.debug(\"resize_vdisk called {!s} \\"},{"line_number":217,"context_line":"                  to: {!s} GB\".format(vDiskName, value))"},{"line_number":218,"context_line":"        data \u003d {"},{"line_number":219,"context_line":"            \u0027request\u0027: {"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff0f0b1f_f7705e42","line":216,"range":{"start_line":216,"start_character":44,"end_line":216,"end_character":45},"updated":"2017-05-24 21:02:41.000000000","message":"Don\u0027t use \\","commit_id":"c48817fa3007d4ba419131687027a91ffcd94abf"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3c73c82f46ad7e1b27eb610edabdb3e8fbbf33fa","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        node \u003d self.get_pages_host()"},{"line_number":215,"context_line":"        sessionId \u003d self.retrieve_session_id(node)"},{"line_number":216,"context_line":"        LOG.debug(\"resize_vdisk called {!s} \\"},{"line_number":217,"context_line":"                  to: {!s} GB\".format(vDiskName, value))"},{"line_number":218,"context_line":"        data \u003d {"},{"line_number":219,"context_line":"            \u0027request\u0027: {"},{"line_number":220,"context_line":"                \u0027type\u0027: \u0027ResizeDisks\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff0f0b1f_779a0e62","line":217,"range":{"start_line":217,"start_character":30,"end_line":217,"end_character":38},"updated":"2017-05-24 21:02:41.000000000","message":"Don\u0027t pre-format the string. Pass in vDiskName and value as arguments to the logger call.","commit_id":"c48817fa3007d4ba419131687027a91ffcd94abf"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3c73c82f46ad7e1b27eb610edabdb3e8fbbf33fa","unresolved":false,"context_lines":[{"line_number":246,"context_line":"        sessionId \u003d self.retrieve_session_id(node)"},{"line_number":247,"context_line":"        LOG.debug(\"describe_vdisk called \" + six.text_type(vDiskName))"},{"line_number":248,"context_line":"        data \u003d {"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"            \u0027request\u0027: {"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"                \u0027type\u0027: \u0027VirtualDiskDetails\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff0f0b1f_b7bd46b8","line":249,"updated":"2017-05-24 21:02:41.000000000","message":"Get rid of all these extra blank lines.","commit_id":"c48817fa3007d4ba419131687027a91ffcd94abf"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3c73c82f46ad7e1b27eb610edabdb3e8fbbf33fa","unresolved":false,"context_lines":[{"line_number":608,"context_line":"        \"\"\"Rest call to clone snapshot"},{"line_number":609,"context_line":""},{"line_number":610,"context_line":"        :param vDiskName: name of the vdisk"},{"line_number":611,"context_line":"        :param snapshotName: snapshot name to be taken as source for the clone"},{"line_number":612,"context_line":"        :param description: description message"},{"line_number":613,"context_line":"        :return: status of the rest call"},{"line_number":614,"context_line":"        \"\"\""},{"line_number":615,"context_line":"        LOG.debug("}],"source_content_type":"text/x-python","patch_set":17,"id":"ff0f0b1f_f7d3beff","line":612,"range":{"start_line":611,"start_character":15,"end_line":612,"end_character":27},"updated":"2017-05-24 21:02:41.000000000","message":"DocString params do not match actual params.","commit_id":"c48817fa3007d4ba419131687027a91ffcd94abf"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f2f0057e3425ddd638e0e08df3204be9984c9857","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2012 Hedvig, 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":18,"id":"df140735_b194d945","line":1,"range":{"start_line":1,"start_character":16,"end_line":1,"end_character":21},"updated":"2017-05-30 22:17:27.000000000","message":"2017\n\nPlease name this file restclient.py.","commit_id":"ae362ffdeb6182116c920b992ccdd8eef37e6bfa"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f2f0057e3425ddd638e0e08df3204be9984c9857","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from six.moves import urllib"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"from cinder import exception"},{"line_number":28,"context_line":"from cinder.volume.drivers.hedvig.HedvigConfig import HedvigConfig"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"df140735_f1837103","line":28,"updated":"2017-05-30 22:17:27.000000000","message":"import module please.","commit_id":"ae362ffdeb6182116c920b992ccdd8eef37e6bfa"}],"cinder/volume/drivers/hedvig/README.rst":[{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"22cc390c19be49a878f9033e46664080a2a2dd52","unresolved":false,"context_lines":[{"line_number":1,"context_line":"[hedvig]"},{"line_number":2,"context_line":"volume_driver \u003d cinder.volume.drivers.hedvig.hedvig_cinder.HedvigISCSIDriver"},{"line_number":3,"context_line":"hedvig_metadata_server \u003d hedvig_cinder.hedviginc.com"}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa31d9ce_09300c9e","line":1,"updated":"2017-02-16 19:37:47.000000000","message":"This isn\u0027t really the right place for a README.. You can add docs for the driver over in https://github.com/openstack/openstack-manuals/tree/master/doc/config-reference/source/block-storage/drivers","commit_id":"27623a94df2f4633696e186da6175b982d9daf19"}],"cinder/volume/drivers/hedvig/config.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"bd36311e86886e417c489dd5305c5ce9ee831d6d","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    retryCount \u003d 5"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    @classmethod"},{"line_number":44,"context_line":"    def parse_and_get_boolean_entry(cls, entry):"},{"line_number":45,"context_line":"        entry \u003d entry.strip(\" \\t\\n\")"},{"line_number":46,"context_line":"        return strutils.bool_from_string(entry)"}],"source_content_type":"text/x-python","patch_set":64,"id":"3f79a3b5_f4c13852","line":44,"range":{"start_line":44,"start_character":8,"end_line":44,"end_character":35},"updated":"2018-12-11 19:47:05.000000000","message":"We can move it out of Config class","commit_id":"21ebc89998031b54214eb8075c0b29aaec311de2"}],"cinder/volume/drivers/hedvig/hedvig_cinder.py":[{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"22cc390c19be49a878f9033e46664080a2a2dd52","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    \"\"\"Hedvig iSCSI volume driver.\"\"\""},{"line_number":61,"context_line":"    defaultVolumeSizeInGB_ \u003d 1"},{"line_number":62,"context_line":"    defaultVolumeBlkSize_ \u003d 4096"},{"line_number":63,"context_line":"    toGB_ \u003d 1024 * 1024 * 1024"},{"line_number":64,"context_line":"    defaultCreatedBy_ \u003d \"Openstack\""},{"line_number":65,"context_line":"    defaultExportedBlkSize_ \u003d 512"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa31d9ce_89e31c05","line":63,"updated":"2017-02-16 19:37:47.000000000","message":"There are helpers for this kinda thing, check out the oslo_utils.units module","commit_id":"27623a94df2f4633696e186da6175b982d9daf19"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"22cc390c19be49a878f9033e46664080a2a2dd52","unresolved":false,"context_lines":[{"line_number":219,"context_line":""},{"line_number":220,"context_line":"            # Addaccess to the mgmt interface addr and iqn of the compute host"},{"line_number":221,"context_line":"            \"\"\""},{"line_number":222,"context_line":"            compute_host_iqn \u003d self.hedvigGetIqn(computeHost)"},{"line_number":223,"context_line":"            self.hedvigAddAccess(tgtHost, lunnum, compute_host_iqn)"},{"line_number":224,"context_line":"            compute_mgmt_addr \u003d socket.gethostbyname(socket.getfqdn(computeHost))"},{"line_number":225,"context_line":"            self.hedvigAddAccess(tgtHost, lunnum, socket.gethostbyname(socket.getfqdn(computeHost)))"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa31d9ce_c9c43461","line":222,"updated":"2017-02-16 19:37:47.000000000","message":"remove commented out code","commit_id":"27623a94df2f4633696e186da6175b982d9daf19"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"d107a8e24d3b1dea12db32d0d3cfdb2190645e53","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2012 Hedvig, Inc."},{"line_number":2,"context_line":"# Copyright (c) 2012 OpenStack LLC."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba2be162_a373b114","line":2,"updated":"2017-03-06 20:35:19.000000000","message":"OpenStack LLC should not be listed here.","commit_id":"8934e557857800253a129d41217cc2c90b6cf7d0"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"d107a8e24d3b1dea12db32d0d3cfdb2190645e53","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        self.context_ \u003d context"},{"line_number":85,"context_line":"        LOG.debug(\u0027Context: %s\u0027, context)"},{"line_number":86,"context_line":"        self.hedvig_metadata_server \u003d getattr("},{"line_number":87,"context_line":"            self.configuration, \u0027hedvig_metadata_server\u0027)"},{"line_number":88,"context_line":"        LOG.info("},{"line_number":89,"context_line":"            _LI(\u0027Initializing hedvig cinder driver with server - %s\u0027),"},{"line_number":90,"context_line":"            self.hedvig_metadata_server)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba2be162_6350d95f","line":87,"updated":"2017-03-06 20:35:19.000000000","message":"Check that the metadata_server option has been set to a non-empty value.","commit_id":"8934e557857800253a129d41217cc2c90b6cf7d0"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"d107a8e24d3b1dea12db32d0d3cfdb2190645e53","unresolved":false,"context_lines":[{"line_number":142,"context_line":"                _LE(\u0027Failed to retrieve volume type details for id: %s\u0027),"},{"line_number":143,"context_line":"                volumeTypeId)"},{"line_number":144,"context_line":"            LOG.error(msg)"},{"line_number":145,"context_line":"            raise exception.HedvigDriverException()"},{"line_number":146,"context_line":"        try:"},{"line_number":147,"context_line":"            LOG.debug("},{"line_number":148,"context_line":"                \"Volume name: %s, description: %s, size: %s\","}],"source_content_type":"text/x-python","patch_set":2,"id":"ba2be162_0382bdc8","line":145,"updated":"2017-03-06 20:35:19.000000000","message":"This exception doesn\u0027t exist.  Use VolumeBackendAPIException or VolumeDriverException.","commit_id":"8934e557857800253a129d41217cc2c90b6cf7d0"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"d107a8e24d3b1dea12db32d0d3cfdb2190645e53","unresolved":false,"context_lines":[{"line_number":173,"context_line":"            LOG.error(msg)"},{"line_number":174,"context_line":"            LOG.error(e.args[0])"},{"line_number":175,"context_line":"            if \u0027TException\u0027 in e.args[0]:"},{"line_number":176,"context_line":"                LOG.error(_LE(\"Virtual Disk Does Not Exist On Hedvig\"))"},{"line_number":177,"context_line":"                return"},{"line_number":178,"context_line":"            raise exception.VolumeIsBusy(volume_name\u003dname)"},{"line_number":179,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba2be162_c3ec2595","line":176,"updated":"2017-03-06 20:35:19.000000000","message":"This is not an error -- should be logged at a lower level.","commit_id":"8934e557857800253a129d41217cc2c90b6cf7d0"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"d107a8e24d3b1dea12db32d0d3cfdb2190645e53","unresolved":false,"context_lines":[{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        Irrelevant for Hedvig. Export is created during attachment to instance."},{"line_number":190,"context_line":"        \"\"\""},{"line_number":191,"context_line":"        LOG.debug(\"context: %s, volume: %s\", context, volume)"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    def create_export(self, context, volume, properties):"},{"line_number":194,"context_line":"        \"\"\"Driver entry point to get the export info for a new volume."}],"source_content_type":"text/x-python","patch_set":2,"id":"ba2be162_637379e8","line":191,"updated":"2017-03-06 20:35:19.000000000","message":"This method should just contain \"pass\" and not log anything.","commit_id":"8934e557857800253a129d41217cc2c90b6cf7d0"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"d107a8e24d3b1dea12db32d0d3cfdb2190645e53","unresolved":false,"context_lines":[{"line_number":199,"context_line":"            \"context: %s, volume: %s, properties: %s\","},{"line_number":200,"context_line":"            context,"},{"line_number":201,"context_line":"            volume,"},{"line_number":202,"context_line":"            properties)"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def remove_export(self, context, volume):"},{"line_number":205,"context_line":"        \"\"\"Driver entry point to remove an export for a volume."}],"source_content_type":"text/x-python","patch_set":2,"id":"ba2be162_03439d6d","line":202,"updated":"2017-03-06 20:35:19.000000000","message":"Same ^","commit_id":"8934e557857800253a129d41217cc2c90b6cf7d0"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"d107a8e24d3b1dea12db32d0d3cfdb2190645e53","unresolved":false,"context_lines":[{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        Irrelevant for Hedvig. Export should be deleted on detachment."},{"line_number":208,"context_line":"        \"\"\""},{"line_number":209,"context_line":"        LOG.debug(\"context: %s, volume: %s\", context, volume)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":212,"context_line":"        \"\"\"Driver entry point to attach a volume to an instance."}],"source_content_type":"text/x-python","patch_set":2,"id":"ba2be162_435d9547","line":209,"updated":"2017-03-06 20:35:19.000000000","message":"Same ^","commit_id":"8934e557857800253a129d41217cc2c90b6cf7d0"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"d107a8e24d3b1dea12db32d0d3cfdb2190645e53","unresolved":false,"context_lines":[{"line_number":763,"context_line":"            name,"},{"line_number":764,"context_line":"            description,"},{"line_number":765,"context_line":"            size)"},{"line_number":766,"context_line":"        LOG.info(_LI(\u0027Cloning a snapshot. snapshotName: %(snapshotName)s, \\"},{"line_number":767,"context_line":"                    name: %(name)s, description: %(description)s, \\"},{"line_number":768,"context_line":"                    size: %(size)s\u0027), {"},{"line_number":769,"context_line":"            \u0027snapshotName\u0027: snapshotName,"},{"line_number":770,"context_line":"            \u0027name\u0027: name,"},{"line_number":771,"context_line":"            \u0027description\u0027: description,"},{"line_number":772,"context_line":"            \u0027size\u0027: size})"},{"line_number":773,"context_line":"        vDiskInfo \u003d hc.VDiskInfo()"},{"line_number":774,"context_line":"        cloneInfo \u003d hc.CloneInfo()"},{"line_number":775,"context_line":"        baseDisk \u003d snapshotName.split(\"$\")[0]"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba2be162_be24a6b2","line":772,"range":{"start_line":766,"start_character":0,"end_line":772,"end_character":26},"updated":"2017-03-06 20:35:19.000000000","message":"This logs the same info as the debug message above -- only need one of these.","commit_id":"8934e557857800253a129d41217cc2c90b6cf7d0"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"36b406692220cb5a07bac4370e5f6f1e33798da2","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    cfg.StrOpt(\u0027hedvig_cluster_username\u0027,"},{"line_number":44,"context_line":"               help\u003d\u0027The username of a hedvig node in the cluster\u0027),"},{"line_number":45,"context_line":"    cfg.StrOpt(\u0027hedvig_cluster_password\u0027,"},{"line_number":46,"context_line":"               help\u003d\u0027The password  of a hedvig metadata node in the cluster\u0027),"},{"line_number":47,"context_line":"    cfg.StrOpt(\u0027hedvig_cluster_name\u0027,"},{"line_number":48,"context_line":"               help\u003d\u0027The cluster name  of a hedvig metadata node \\"},{"line_number":49,"context_line":"               in the cluster\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_a10dba3f","line":46,"range":{"start_line":46,"start_character":33,"end_line":46,"end_character":34},"updated":"2017-04-24 14:51:02.000000000","message":"Extra space\n\nNeeds secret\u003dTrue parameter.","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"d441bd3214d06ffbead900a8db108067c9c03c9e","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    cfg.StrOpt(\u0027hedvig_cluster_username\u0027,"},{"line_number":44,"context_line":"               help\u003d\u0027The username of a hedvig node in the cluster\u0027),"},{"line_number":45,"context_line":"    cfg.StrOpt(\u0027hedvig_cluster_password\u0027,"},{"line_number":46,"context_line":"               help\u003d\u0027The password  of a hedvig metadata node in the cluster\u0027),"},{"line_number":47,"context_line":"    cfg.StrOpt(\u0027hedvig_cluster_name\u0027,"},{"line_number":48,"context_line":"               help\u003d\u0027The cluster name  of a hedvig metadata node \\"},{"line_number":49,"context_line":"               in the cluster\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f044301_e53c0cc1","line":46,"range":{"start_line":46,"start_character":33,"end_line":46,"end_character":34},"in_reply_to":"5ff73747_a10dba3f","updated":"2017-10-31 17:35:53.000000000","message":"Done","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"36b406692220cb5a07bac4370e5f6f1e33798da2","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        self.group_stats \u003d {\"volume_backend_name\": \"hedvig\","},{"line_number":101,"context_line":"                            \"vendor_name\": \"Hedvig Inc\","},{"line_number":102,"context_line":"                            \"driver_version\": \"0.99\","},{"line_number":103,"context_line":"                            \"storage_protocol\": \"ISCSI\","},{"line_number":104,"context_line":"                            \"total_capacity_gb\": total_capacity,"},{"line_number":105,"context_line":"                            \"free_capacity_gb\": free_capacity,"},{"line_number":106,"context_line":"                            \"reserved_percentage\": 0,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_4156f62b","line":103,"updated":"2017-04-24 14:51:02.000000000","message":"Most drivers return storage_protocol: \"iSCSI\" -- please use that capitalization here too.","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"d441bd3214d06ffbead900a8db108067c9c03c9e","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        self.group_stats \u003d {\"volume_backend_name\": \"hedvig\","},{"line_number":101,"context_line":"                            \"vendor_name\": \"Hedvig Inc\","},{"line_number":102,"context_line":"                            \"driver_version\": \"0.99\","},{"line_number":103,"context_line":"                            \"storage_protocol\": \"ISCSI\","},{"line_number":104,"context_line":"                            \"total_capacity_gb\": total_capacity,"},{"line_number":105,"context_line":"                            \"free_capacity_gb\": free_capacity,"},{"line_number":106,"context_line":"                            \"reserved_percentage\": 0,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f044301_8575489b","line":103,"in_reply_to":"5ff73747_4156f62b","updated":"2017-10-31 17:35:53.000000000","message":"Done","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"36b406692220cb5a07bac4370e5f6f1e33798da2","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        project \u003d volume[\u0027project_id\u0027]"},{"line_number":113,"context_line":"        displayName \u003d volume[\u0027display_name\u0027]"},{"line_number":114,"context_line":"        displayDescription \u003d volume[\u0027display_description\u0027]"},{"line_number":115,"context_line":"        if project is None:"},{"line_number":116,"context_line":"            project \u003d \"\""},{"line_number":117,"context_line":"        if displayName is None:"},{"line_number":118,"context_line":"            displayName \u003d \"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_042d9c94","line":115,"updated":"2017-04-24 14:51:02.000000000","message":"Can simplify 115, 117, and 119 by using\n\nproject \u003d volume.get(\u0027project_id\u0027, \u0027\u0027) above.","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"d441bd3214d06ffbead900a8db108067c9c03c9e","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        project \u003d volume[\u0027project_id\u0027]"},{"line_number":113,"context_line":"        displayName \u003d volume[\u0027display_name\u0027]"},{"line_number":114,"context_line":"        displayDescription \u003d volume[\u0027display_description\u0027]"},{"line_number":115,"context_line":"        if project is None:"},{"line_number":116,"context_line":"            project \u003d \"\""},{"line_number":117,"context_line":"        if displayName is None:"},{"line_number":118,"context_line":"            displayName \u003d \"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"3f044301_657a3c89","line":115,"in_reply_to":"5ff73747_042d9c94","updated":"2017-10-31 17:35:53.000000000","message":"Done","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"36b406692220cb5a07bac4370e5f6f1e33798da2","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        if displayDescription is None:"},{"line_number":120,"context_line":"            displayDescription \u003d \"\""},{"line_number":121,"context_line":"        description \u003d project + \"\\n\" + displayName + \"\\n\" + displayDescription"},{"line_number":122,"context_line":"        size \u003d long(volume[\u0027size\u0027])"},{"line_number":123,"context_line":"        if size \u003d\u003d 0:"},{"line_number":124,"context_line":"            size \u003d HedvigISCSIDriver.defaultVolumeSizeInGB_"},{"line_number":125,"context_line":"        size \u003d size * HedvigISCSIDriver.toGB_"}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_a1249ac7","line":122,"range":{"start_line":122,"start_character":15,"end_line":122,"end_character":19},"updated":"2017-04-24 14:51:02.000000000","message":"Python 3 doesn\u0027t use \"long\" -- int should be sufficient here.","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"d441bd3214d06ffbead900a8db108067c9c03c9e","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        if displayDescription is None:"},{"line_number":120,"context_line":"            displayDescription \u003d \"\""},{"line_number":121,"context_line":"        description \u003d project + \"\\n\" + displayName + \"\\n\" + displayDescription"},{"line_number":122,"context_line":"        size \u003d long(volume[\u0027size\u0027])"},{"line_number":123,"context_line":"        if size \u003d\u003d 0:"},{"line_number":124,"context_line":"            size \u003d HedvigISCSIDriver.defaultVolumeSizeInGB_"},{"line_number":125,"context_line":"        size \u003d size * HedvigISCSIDriver.toGB_"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f044301_25743499","line":122,"range":{"start_line":122,"start_character":15,"end_line":122,"end_character":19},"in_reply_to":"5ff73747_a1249ac7","updated":"2017-10-31 17:35:53.000000000","message":"Done","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"36b406692220cb5a07bac4370e5f6f1e33798da2","unresolved":false,"context_lines":[{"line_number":175,"context_line":"            msg \u003d (_(\u0027Failed to delete volume. volume: %s\u0027), volume)"},{"line_number":176,"context_line":"            LOG.error(msg)"},{"line_number":177,"context_line":"            LOG.error(e.args[0])"},{"line_number":178,"context_line":"            if \u0027TException\u0027 in e.args[0]:"},{"line_number":179,"context_line":"                LOG.error(_(\"Virtual Disk Does Not Exist On Hedvig\"))"},{"line_number":180,"context_line":"                return"},{"line_number":181,"context_line":"            raise exception.VolumeIsBusy(volume_name\u003dname)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_644a2056","line":178,"range":{"start_line":178,"start_character":12,"end_line":178,"end_character":40},"updated":"2017-04-24 14:51:02.000000000","message":"This check should be performed for an exception type more specific than Exception.","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"d441bd3214d06ffbead900a8db108067c9c03c9e","unresolved":false,"context_lines":[{"line_number":175,"context_line":"            msg \u003d (_(\u0027Failed to delete volume. volume: %s\u0027), volume)"},{"line_number":176,"context_line":"            LOG.error(msg)"},{"line_number":177,"context_line":"            LOG.error(e.args[0])"},{"line_number":178,"context_line":"            if \u0027TException\u0027 in e.args[0]:"},{"line_number":179,"context_line":"                LOG.error(_(\"Virtual Disk Does Not Exist On Hedvig\"))"},{"line_number":180,"context_line":"                return"},{"line_number":181,"context_line":"            raise exception.VolumeIsBusy(volume_name\u003dname)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f044301_056938bd","line":178,"range":{"start_line":178,"start_character":12,"end_line":178,"end_character":40},"in_reply_to":"5ff73747_644a2056","updated":"2017-10-31 17:35:53.000000000","message":"Done","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"36b406692220cb5a07bac4370e5f6f1e33798da2","unresolved":false,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        \"\"\""},{"line_number":187,"context_line":"        LOG.debug(\"volume: %s\", volume)"},{"line_number":188,"context_line":"        pass"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    def ensure_export(self, context, volume):"},{"line_number":191,"context_line":"        \"\"\"Driver entry point to get the export info for an existing volume."}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_e46f50c3","line":188,"updated":"2017-04-24 14:51:02.000000000","message":"No need for \"pass\".","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"d441bd3214d06ffbead900a8db108067c9c03c9e","unresolved":false,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        \"\"\""},{"line_number":187,"context_line":"        LOG.debug(\"volume: %s\", volume)"},{"line_number":188,"context_line":"        pass"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    def ensure_export(self, context, volume):"},{"line_number":191,"context_line":"        \"\"\"Driver entry point to get the export info for an existing volume."}],"source_content_type":"text/x-python","patch_set":4,"id":"3f044301_e5652ce3","line":188,"in_reply_to":"5ff73747_e46f50c3","updated":"2017-10-31 17:35:53.000000000","message":"Done","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"36b406692220cb5a07bac4370e5f6f1e33798da2","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        Irrelevant for Hedvig. Export is created during attachment to instance."},{"line_number":194,"context_line":"        \"\"\""},{"line_number":195,"context_line":"        LOG.debug(\"context: %s, volume: %s\", context, volume)"},{"line_number":196,"context_line":"        pass"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def create_export(self, context, volume, properties):"},{"line_number":199,"context_line":"        \"\"\"Driver entry point to get the export info for a new volume."}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_247658a6","line":196,"updated":"2017-04-24 14:51:02.000000000","message":"No need for \"pass\".","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"d441bd3214d06ffbead900a8db108067c9c03c9e","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        Irrelevant for Hedvig. Export is created during attachment to instance."},{"line_number":194,"context_line":"        \"\"\""},{"line_number":195,"context_line":"        LOG.debug(\"context: %s, volume: %s\", context, volume)"},{"line_number":196,"context_line":"        pass"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def create_export(self, context, volume, properties):"},{"line_number":199,"context_line":"        \"\"\"Driver entry point to get the export info for a new volume."}],"source_content_type":"text/x-python","patch_set":4,"id":"3f044301_c56230d9","line":196,"in_reply_to":"5ff73747_247658a6","updated":"2017-10-31 17:35:53.000000000","message":"Done","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"36b406692220cb5a07bac4370e5f6f1e33798da2","unresolved":false,"context_lines":[{"line_number":205,"context_line":"            context,"},{"line_number":206,"context_line":"            volume,"},{"line_number":207,"context_line":"            properties)"},{"line_number":208,"context_line":"        pass"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    def remove_export(self, context, volume):"},{"line_number":211,"context_line":"        \"\"\"Driver entry point to remove an export for a volume."}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_047b5c8c","line":208,"updated":"2017-04-24 14:51:02.000000000","message":"No need for \"pass\".","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"d441bd3214d06ffbead900a8db108067c9c03c9e","unresolved":false,"context_lines":[{"line_number":205,"context_line":"            context,"},{"line_number":206,"context_line":"            volume,"},{"line_number":207,"context_line":"            properties)"},{"line_number":208,"context_line":"        pass"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    def remove_export(self, context, volume):"},{"line_number":211,"context_line":"        \"\"\"Driver entry point to remove an export for a volume."}],"source_content_type":"text/x-python","patch_set":4,"id":"3f044301_a55f240d","line":208,"in_reply_to":"5ff73747_047b5c8c","updated":"2017-10-31 17:35:53.000000000","message":"Done","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"36b406692220cb5a07bac4370e5f6f1e33798da2","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        Irrelevant for Hedvig. Export should be deleted on detachment."},{"line_number":214,"context_line":"        \"\"\""},{"line_number":215,"context_line":"        LOG.debug(\"context: %s, volume: %s\", context, volume)"},{"line_number":216,"context_line":"        pass"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":219,"context_line":"        \"\"\"Driver entry point to attach a volume to an instance."}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_84664ced","line":216,"updated":"2017-04-24 14:51:02.000000000","message":"No need for \"pass\".","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"d441bd3214d06ffbead900a8db108067c9c03c9e","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        Irrelevant for Hedvig. Export should be deleted on detachment."},{"line_number":214,"context_line":"        \"\"\""},{"line_number":215,"context_line":"        LOG.debug(\"context: %s, volume: %s\", context, volume)"},{"line_number":216,"context_line":"        pass"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":219,"context_line":"        \"\"\"Driver entry point to attach a volume to an instance."}],"source_content_type":"text/x-python","patch_set":4,"id":"3f044301_859ae8c2","line":216,"in_reply_to":"5ff73747_84664ced","updated":"2017-10-31 17:35:53.000000000","message":"Done","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"36b406692220cb5a07bac4370e5f6f1e33798da2","unresolved":false,"context_lines":[{"line_number":255,"context_line":"                        \u0027volume\u0027: volume, \u0027tgtHost\u0027: tgtHost})"},{"line_number":256,"context_line":"                LOG.error(msg)"},{"line_number":257,"context_line":"                raise exception.HedvigDriverException()"},{"line_number":258,"context_line":"            LOG.debug(\"Reviceved  lun num \" + str(lunnum))"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"            # Addaccess to the mgmt interface addr and iqn of the compute host"},{"line_number":261,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_841e4c0a","line":258,"range":{"start_line":258,"start_character":23,"end_line":258,"end_character":32},"updated":"2017-04-24 14:51:02.000000000","message":"typo","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"d441bd3214d06ffbead900a8db108067c9c03c9e","unresolved":false,"context_lines":[{"line_number":255,"context_line":"                        \u0027volume\u0027: volume, \u0027tgtHost\u0027: tgtHost})"},{"line_number":256,"context_line":"                LOG.error(msg)"},{"line_number":257,"context_line":"                raise exception.HedvigDriverException()"},{"line_number":258,"context_line":"            LOG.debug(\"Reviceved  lun num \" + str(lunnum))"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"            # Addaccess to the mgmt interface addr and iqn of the compute host"},{"line_number":261,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3f044301_659fdcb4","line":258,"range":{"start_line":258,"start_character":23,"end_line":258,"end_character":32},"in_reply_to":"5ff73747_841e4c0a","updated":"2017-10-31 17:35:53.000000000","message":"Done","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"36b406692220cb5a07bac4370e5f6f1e33798da2","unresolved":false,"context_lines":[{"line_number":423,"context_line":"                       \u0027exit_code\u0027: e.exit_code})"},{"line_number":424,"context_line":"            raise e"},{"line_number":425,"context_line":"        if targetName is None or portal is None:"},{"line_number":426,"context_line":"            raise Exception("},{"line_number":427,"context_line":"                \"Failed iscsi discovery. hedvig controller: %s, lun: %s\" %"},{"line_number":428,"context_line":"                (tgtHost, lunNum))"},{"line_number":429,"context_line":"        return targetName, portal"}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_c4e1f400","line":426,"updated":"2017-04-24 14:51:02.000000000","message":"Should raise a more specific exception class here.","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"d441bd3214d06ffbead900a8db108067c9c03c9e","unresolved":false,"context_lines":[{"line_number":423,"context_line":"                       \u0027exit_code\u0027: e.exit_code})"},{"line_number":424,"context_line":"            raise e"},{"line_number":425,"context_line":"        if targetName is None or portal is None:"},{"line_number":426,"context_line":"            raise Exception("},{"line_number":427,"context_line":"                \"Failed iscsi discovery. hedvig controller: %s, lun: %s\" %"},{"line_number":428,"context_line":"                (tgtHost, lunNum))"},{"line_number":429,"context_line":"        return targetName, portal"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f044301_45a4e008","line":426,"in_reply_to":"5ff73747_c4e1f400","updated":"2017-10-31 17:35:53.000000000","message":"Done","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"36b406692220cb5a07bac4370e5f6f1e33798da2","unresolved":false,"context_lines":[{"line_number":525,"context_line":"                snapshotId,"},{"line_number":526,"context_line":"                snapshotName,"},{"line_number":527,"context_line":"                hedvigSnapshotName)"},{"line_number":528,"context_line":"            self.db.snapshot_update("},{"line_number":529,"context_line":"                ctxt, snapshotId, {"},{"line_number":530,"context_line":"                    \u0027display_name\u0027: str(hedvigSnapshotName)})"},{"line_number":531,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_04a6bcc2","line":528,"range":{"start_line":528,"start_character":12,"end_line":528,"end_character":35},"updated":"2017-04-24 14:51:02.000000000","message":"Do not make db.snapshot_update calls here.\n\nThis can be returned from this method as a model update if needed.\n\nBut, why is this updating the display_name anyway?  This is a user-set field in Cinder.","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"d441bd3214d06ffbead900a8db108067c9c03c9e","unresolved":false,"context_lines":[{"line_number":525,"context_line":"                snapshotId,"},{"line_number":526,"context_line":"                snapshotName,"},{"line_number":527,"context_line":"                hedvigSnapshotName)"},{"line_number":528,"context_line":"            self.db.snapshot_update("},{"line_number":529,"context_line":"                ctxt, snapshotId, {"},{"line_number":530,"context_line":"                    \u0027display_name\u0027: str(hedvigSnapshotName)})"},{"line_number":531,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f044301_25a9d4de","line":528,"range":{"start_line":528,"start_character":12,"end_line":528,"end_character":35},"in_reply_to":"5ff73747_04a6bcc2","updated":"2017-10-31 17:35:53.000000000","message":"Done","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"36b406692220cb5a07bac4370e5f6f1e33798da2","unresolved":false,"context_lines":[{"line_number":579,"context_line":"            msg \u003d (_(\u0027Failed to delete snapshot: %s\u0027),"},{"line_number":580,"context_line":"                   snapshotName)"},{"line_number":581,"context_line":"            LOG.error(msg)"},{"line_number":582,"context_line":"            raise exception.SnapshotIsBusy(snapshot_name\u003dsnapshotName)"},{"line_number":583,"context_line":""},{"line_number":584,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":585,"context_line":"        \"\"\"Driver entry point for creating a new volume from a snapshot."}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_04947c36","line":582,"range":{"start_line":582,"start_character":18,"end_line":582,"end_character":42},"updated":"2017-04-24 14:51:02.000000000","message":"This should only be raised when the driver can tell that the real failure here is that it\u0027s busy.  Here, this could be raised for any reason since it\u0027s in the \"except Exception\" block.","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"d441bd3214d06ffbead900a8db108067c9c03c9e","unresolved":false,"context_lines":[{"line_number":579,"context_line":"            msg \u003d (_(\u0027Failed to delete snapshot: %s\u0027),"},{"line_number":580,"context_line":"                   snapshotName)"},{"line_number":581,"context_line":"            LOG.error(msg)"},{"line_number":582,"context_line":"            raise exception.SnapshotIsBusy(snapshot_name\u003dsnapshotName)"},{"line_number":583,"context_line":""},{"line_number":584,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":585,"context_line":"        \"\"\"Driver entry point for creating a new volume from a snapshot."}],"source_content_type":"text/x-python","patch_set":4,"id":"3f044301_e5aaccd0","line":582,"range":{"start_line":582,"start_character":18,"end_line":582,"end_character":42},"in_reply_to":"5ff73747_04947c36","updated":"2017-10-31 17:35:53.000000000","message":"Done","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"36b406692220cb5a07bac4370e5f6f1e33798da2","unresolved":false,"context_lines":[{"line_number":656,"context_line":"                _(\u0027Creating virtual disk. name: %(name)s, \\"},{"line_number":657,"context_line":"                    description: %(description)s, size: %(size)s\u0027), {"},{"line_number":658,"context_line":"                    \u0027name\u0027: name, \u0027description\u0027: description, \u0027size\u0027: size})"},{"line_number":659,"context_line":"            vDiskInfo \u003d {}"},{"line_number":660,"context_line":"            vDiskInfo[\u0027name\u0027] \u003d str(name)"},{"line_number":661,"context_line":"            vDiskInfo[\u0027blockSize\u0027] \u003d HedvigISCSIDriver.defaultVolumeBlkSize_"},{"line_number":662,"context_line":"            vDiskInfo[\u0027size\u0027] \u003d size"}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_a4cb8851","line":659,"updated":"2017-04-24 14:51:02.000000000","message":"This would be easier to read if the fields below were initialized in the dict literal.","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"d441bd3214d06ffbead900a8db108067c9c03c9e","unresolved":false,"context_lines":[{"line_number":656,"context_line":"                _(\u0027Creating virtual disk. name: %(name)s, \\"},{"line_number":657,"context_line":"                    description: %(description)s, size: %(size)s\u0027), {"},{"line_number":658,"context_line":"                    \u0027name\u0027: name, \u0027description\u0027: description, \u0027size\u0027: size})"},{"line_number":659,"context_line":"            vDiskInfo \u003d {}"},{"line_number":660,"context_line":"            vDiskInfo[\u0027name\u0027] \u003d str(name)"},{"line_number":661,"context_line":"            vDiskInfo[\u0027blockSize\u0027] \u003d HedvigISCSIDriver.defaultVolumeBlkSize_"},{"line_number":662,"context_line":"            vDiskInfo[\u0027size\u0027] \u003d size"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f044301_c5b7d03a","line":659,"in_reply_to":"5ff73747_a4cb8851","updated":"2017-10-31 17:35:53.000000000","message":"Done","commit_id":"4c12799bcc4b1f3f64c2b1ff1242755f4e5d0833"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"7a2ef219c8159eaec7c01399ceb4a7e65bb06289","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            self.hedvigCreateVirtualDisk(name, description, size, volumeType)"},{"line_number":147,"context_line":"        except Exception:"},{"line_number":148,"context_line":"            msg \u003d ("},{"line_number":149,"context_line":"                _(\u0027Failed to create volume. name: %(name)s, \\"},{"line_number":150,"context_line":"                description: %(description)s, \\"},{"line_number":151,"context_line":"                size: %(size)s\u0027),"},{"line_number":152,"context_line":"                name,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f044301_cdfecead","line":149,"range":{"start_line":149,"start_character":60,"end_line":149,"end_character":61},"updated":"2017-05-04 06:49:38.000000000","message":"redundant","commit_id":"9e6a33fb3e9c15158d25ed9cae0c44abd114b1de"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"d441bd3214d06ffbead900a8db108067c9c03c9e","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            self.hedvigCreateVirtualDisk(name, description, size, volumeType)"},{"line_number":147,"context_line":"        except Exception:"},{"line_number":148,"context_line":"            msg \u003d ("},{"line_number":149,"context_line":"                _(\u0027Failed to create volume. name: %(name)s, \\"},{"line_number":150,"context_line":"                description: %(description)s, \\"},{"line_number":151,"context_line":"                size: %(size)s\u0027),"},{"line_number":152,"context_line":"                name,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f044301_bd34b44b","line":149,"in_reply_to":"3f044301_cdfecead","updated":"2017-10-31 17:35:53.000000000","message":"Done","commit_id":"9e6a33fb3e9c15158d25ed9cae0c44abd114b1de"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"7a2ef219c8159eaec7c01399ceb4a7e65bb06289","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        except Exception:"},{"line_number":148,"context_line":"            msg \u003d ("},{"line_number":149,"context_line":"                _(\u0027Failed to create volume. name: %(name)s, \\"},{"line_number":150,"context_line":"                description: %(description)s, \\"},{"line_number":151,"context_line":"                size: %(size)s\u0027),"},{"line_number":152,"context_line":"                name,"},{"line_number":153,"context_line":"                description,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f044301_2df892c2","line":150,"range":{"start_line":150,"start_character":46,"end_line":150,"end_character":47},"updated":"2017-05-04 06:49:38.000000000","message":"redundant","commit_id":"9e6a33fb3e9c15158d25ed9cae0c44abd114b1de"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"d441bd3214d06ffbead900a8db108067c9c03c9e","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        except Exception:"},{"line_number":148,"context_line":"            msg \u003d ("},{"line_number":149,"context_line":"                _(\u0027Failed to create volume. name: %(name)s, \\"},{"line_number":150,"context_line":"                description: %(description)s, \\"},{"line_number":151,"context_line":"                size: %(size)s\u0027),"},{"line_number":152,"context_line":"                name,"},{"line_number":153,"context_line":"                description,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f044301_9d39f842","line":150,"in_reply_to":"3f044301_2df892c2","updated":"2017-10-31 17:35:53.000000000","message":"Done","commit_id":"9e6a33fb3e9c15158d25ed9cae0c44abd114b1de"},{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"fd1dad1ce85f6e2695ee3ae9441d660692f4e718","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    \"\"\"Hedvig iSCSI volume driver.\"\"\""},{"line_number":59,"context_line":"    defaultVolumeSizeInGB_ \u003d 1"},{"line_number":60,"context_line":"    defaultVolumeBlkSize_ \u003d 4096"},{"line_number":61,"context_line":"    toGB_ \u003d 1024 * 1024 * 1024"},{"line_number":62,"context_line":"    defaultCreatedBy_ \u003d \"Openstack\""},{"line_number":63,"context_line":"    defaultExportedBlkSize_ \u003d 512"},{"line_number":64,"context_line":"    defaultVolumeSizeUnit_ \u003d \"GB\""}],"source_content_type":"text/x-python","patch_set":11,"id":"3f044301_9a09e596","line":61,"range":{"start_line":61,"start_character":0,"end_line":61,"end_character":30},"updated":"2017-05-05 16:11:11.000000000","message":"same about oslo units","commit_id":"034b60f00851215dcf32ad58e10a020f4170f678"},{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"fd1dad1ce85f6e2695ee3ae9441d660692f4e718","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        LOG.info(_(\"Initialization done\"))"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def get_volume_stats(self, refresh\u003dFalse):"},{"line_number":94,"context_line":"        # we need to get get stats for server."},{"line_number":95,"context_line":"        total_capacity \u003d float(1024)"},{"line_number":96,"context_line":"        used_capacity \u003d float(0)"},{"line_number":97,"context_line":"        free_capacity \u003d total_capacity - used_capacity"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f044301_ba7941fd","line":94,"range":{"start_line":94,"start_character":25,"end_line":94,"end_character":28},"updated":"2017-05-05 16:11:11.000000000","message":"nit: double get","commit_id":"034b60f00851215dcf32ad58e10a020f4170f678"},{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"fd1dad1ce85f6e2695ee3ae9441d660692f4e718","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    def get_volume_stats(self, refresh\u003dFalse):"},{"line_number":94,"context_line":"        # we need to get get stats for server."},{"line_number":95,"context_line":"        total_capacity \u003d float(1024)"},{"line_number":96,"context_line":"        used_capacity \u003d float(0)"},{"line_number":97,"context_line":"        free_capacity \u003d total_capacity - used_capacity"},{"line_number":98,"context_line":"        self.group_stats \u003d {\"volume_backend_name\": \"hedvig\","},{"line_number":99,"context_line":"                            \"vendor_name\": \"Hedvig Inc\","},{"line_number":100,"context_line":"                            \"driver_version\": \"0.99\","}],"source_content_type":"text/x-python","patch_set":11,"id":"3f044301_dadf6dd4","line":97,"range":{"start_line":96,"start_character":0,"end_line":97,"end_character":54},"updated":"2017-05-05 16:11:11.000000000","message":"It looks really weird. We even don\u0027t use \u0027used_capacity\u0027 variable after it","commit_id":"034b60f00851215dcf32ad58e10a020f4170f678"},{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"fd1dad1ce85f6e2695ee3ae9441d660692f4e718","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                _(\u0027Failed to retrieve volume type details for id: %s\u0027),"},{"line_number":137,"context_line":"                volumeTypeId)"},{"line_number":138,"context_line":"            LOG.error(msg)"},{"line_number":139,"context_line":"            raise exception.HedvigDriverException()"},{"line_number":140,"context_line":"        try:"},{"line_number":141,"context_line":"            LOG.debug("},{"line_number":142,"context_line":"                \"Volume name: %s, description: %s, size: %s\","}],"source_content_type":"text/x-python","patch_set":11,"id":"3f044301_da02cd0b","line":139,"updated":"2017-05-05 16:11:11.000000000","message":"maybe we need to add more useful message here instead of \u0027Hedvig server error\u0027 that will be used by default?\n\nAnd I\u0027m not sure that it\u0027s driver error here","commit_id":"034b60f00851215dcf32ad58e10a020f4170f678"},{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"fd1dad1ce85f6e2695ee3ae9441d660692f4e718","unresolved":false,"context_lines":[{"line_number":640,"context_line":"                0: \u0027FLASH\u0027,"},{"line_number":641,"context_line":"                1: \u0027HDD\u0027"},{"line_number":642,"context_line":"            }"},{"line_number":643,"context_line":"            vDiskInfo \u003d {\u0027name\u0027: str(name),"},{"line_number":644,"context_line":"                         \u0027blockSize\u0027: HedvigISCSIDriver.defaultVolumeBlkSize_,"},{"line_number":645,"context_line":"                         \u0027size\u0027: size,"},{"line_number":646,"context_line":"                         \u0027createdBy\u0027: str(HedvigISCSIDriver.defaultCreatedBy_),"},{"line_number":647,"context_line":"                         \u0027description\u0027: str(description),"},{"line_number":648,"context_line":"                         \u0027residence\u0027: DiskResidence[1],"},{"line_number":649,"context_line":"                         \u0027replicationFactor\u0027: 3,"},{"line_number":650,"context_line":"                         \u0027replicationPolicy\u0027: \u0027Agnostic\u0027,"},{"line_number":651,"context_line":"                         \u0027clusteredFileSystem\u0027: False,"},{"line_number":652,"context_line":"                         \u0027exportedBlockSize\u0027: HedvigISCSIDriver."},{"line_number":653,"context_line":"                         defaultExportedBlkSize_,"},{"line_number":654,"context_line":"                         \u0027cacheEnabled\u0027: HedvigConfig.getInstance("},{"line_number":655,"context_line":"            ).isCinderDedupEnabled(),"},{"line_number":656,"context_line":"                \u0027diskType\u0027: \u0027BLOCK\u0027,"},{"line_number":657,"context_line":"                \u0027immutable\u0027: False,"},{"line_number":658,"context_line":"                \u0027deduplication\u0027: HedvigConfig.getInstance("},{"line_number":659,"context_line":"            ).isCinderDedupEnabled(),"},{"line_number":660,"context_line":"                \u0027compressed\u0027: HedvigConfig.getInstance("},{"line_number":661,"context_line":"            ).isCinderCompressEnabled(),"},{"line_number":662,"context_line":"                \u0027cloudEnabled\u0027: False,"},{"line_number":663,"context_line":"                \u0027cloudProvider\u0027: 0,"},{"line_number":664,"context_line":"                \u0027isClone\u0027: False,"},{"line_number":665,"context_line":"                \u0027consistency\u0027: \u0027STRONG\u0027,"},{"line_number":666,"context_line":"                \u0027scsi3pr\u0027: False"},{"line_number":667,"context_line":"            }"},{"line_number":668,"context_line":"            if \"extra_specs\" in volumeType:"},{"line_number":669,"context_line":"                qos_specs_id \u003d volumeType.get(\u0027qos_specs_id\u0027)"},{"line_number":670,"context_line":"                if qos_specs_id is not None:"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f044301_ddb3e74c","line":667,"range":{"start_line":643,"start_character":0,"end_line":667,"end_character":13},"updated":"2017-05-05 16:11:11.000000000","message":"is it possible to make it a little bit readable?","commit_id":"034b60f00851215dcf32ad58e10a020f4170f678"},{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"fd1dad1ce85f6e2695ee3ae9441d660692f4e718","unresolved":false,"context_lines":[{"line_number":692,"context_line":"                            val \u003d HedvigConfig.parseAndGetReplicationPolicy("},{"line_number":693,"context_line":"                                value)"},{"line_number":694,"context_line":"                            if val is not None:"},{"line_number":695,"context_line":"                                RepPolicy \u003d {"},{"line_number":696,"context_line":"                                    0: \u0027Agnostic\u0027,"},{"line_number":697,"context_line":"                                    1: \u0027RackAware\u0027,"},{"line_number":698,"context_line":"                                    2: \u0027DataCenterAware\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f044301_dd8c0781","line":695,"range":{"start_line":695,"start_character":32,"end_line":695,"end_character":41},"updated":"2017-05-05 16:11:11.000000000","message":"and you already created this constants in ReplicationPolicy class. Why don\u0027t you use it?","commit_id":"034b60f00851215dcf32ad58e10a020f4170f678"},{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"fd1dad1ce85f6e2695ee3ae9441d660692f4e718","unresolved":false,"context_lines":[{"line_number":701,"context_line":"                                    RepPolicy[val])"},{"line_number":702,"context_line":"                        if \"disk_residence\" in key:"},{"line_number":703,"context_line":"                            val \u003d HedvigConfig.parseAndGetDiskResidence(value)"},{"line_number":704,"context_line":"                            DiskResidence \u003d {"},{"line_number":705,"context_line":"                                0: \u0027FLASH\u0027,"},{"line_number":706,"context_line":"                                1: \u0027HDD\u0027"},{"line_number":707,"context_line":"                            }"},{"line_number":708,"context_line":""},{"line_number":709,"context_line":"                            if val is not None:"},{"line_number":710,"context_line":"                                vDiskInfo[\u0027residence\u0027] \u003d str("}],"source_content_type":"text/x-python","patch_set":11,"id":"3f044301_7df3b30b","line":707,"range":{"start_line":704,"start_character":27,"end_line":707,"end_character":29},"updated":"2017-05-05 16:11:11.000000000","message":"Same","commit_id":"034b60f00851215dcf32ad58e10a020f4170f678"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"f9b52544ce1e689fd0bd88fcbb61125b5031a58a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/python"},{"line_number":2,"context_line":"# Copyright (c) 2012 Hedvig, Inc."},{"line_number":3,"context_line":"# Copyright (c) 2012 OpenStack LLC."},{"line_number":4,"context_line":"# All Rights Reserved."}],"source_content_type":"text/x-python","patch_set":12,"id":"1f013ff3_9ccb3852","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":17},"updated":"2017-05-15 21:37:24.000000000","message":"Don\u0027t need this line.","commit_id":"2279db4f807f7c291648d1f9759a48a3968e3b1e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"f9b52544ce1e689fd0bd88fcbb61125b5031a58a","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from cinder.volume.drivers.hedvig.HedvigConfig import HedvigConfig"},{"line_number":30,"context_line":"from cinder.volume.drivers.hedvig.HedvigRestClient import HedvigRestClient"},{"line_number":31,"context_line":"from cinder.volume import qos_specs"},{"line_number":32,"context_line":"from oslo_concurrency import processutils"},{"line_number":33,"context_line":"from oslo_config import cfg"},{"line_number":34,"context_line":"from oslo_log import log as logging"},{"line_number":35,"context_line":"from oslo_utils import units"}],"source_content_type":"text/x-python","patch_set":12,"id":"1f013ff3_9cd0d8f9","line":32,"updated":"2017-05-15 21:37:24.000000000","message":"oslo imports should be in a section before cinder imports, see https://docs.openstack.org/developer/hacking/#imports .","commit_id":"2279db4f807f7c291648d1f9759a48a3968e3b1e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"f9b52544ce1e689fd0bd88fcbb61125b5031a58a","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        help\u003d\u0027The username of a hedvig node in the cluster\u0027),"},{"line_number":46,"context_line":"    cfg.StrOpt("},{"line_number":47,"context_line":"        \u0027hedvig_cluster_password\u0027,"},{"line_number":48,"context_line":"        help\u003d\u0027The password of a hedvig metadata node in the cluster\u0027),"},{"line_number":49,"context_line":"    cfg.StrOpt("},{"line_number":50,"context_line":"        \u0027hedvig_cluster_name\u0027,"},{"line_number":51,"context_line":"        help\u003d\u0027The cluster name of a hedvig metadata node in the cluster\u0027),"}],"source_content_type":"text/x-python","patch_set":12,"id":"1f013ff3_5cac908b","line":48,"updated":"2017-05-15 21:37:24.000000000","message":"Still needs secret\u003dTrue StrOpt parameter.","commit_id":"2279db4f807f7c291648d1f9759a48a3968e3b1e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"f9b52544ce1e689fd0bd88fcbb61125b5031a58a","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":68,"context_line":"        super(HedvigISCSIDriver, self).__init__(*args, **kwargs)"},{"line_number":69,"context_line":"        self.group_stats \u003d {}"},{"line_number":70,"context_line":"        self.configuration.append_config_values(hedvig_opts)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def check_for_setup_error(self):"},{"line_number":73,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":12,"id":"1f013ff3_bc1274b0","line":70,"updated":"2017-05-15 21:37:24.000000000","message":"Init all variables set in do_setup() to None here.  (self.context_, hedvig_cluster_nodes, hedvig_cluster_username, hedvig_cluster_password, hedvig_cluster_name)","commit_id":"2279db4f807f7c291648d1f9759a48a3968e3b1e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"f9b52544ce1e689fd0bd88fcbb61125b5031a58a","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        self.group_stats \u003d {}"},{"line_number":70,"context_line":"        self.configuration.append_config_values(hedvig_opts)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def check_for_setup_error(self):"},{"line_number":73,"context_line":"        pass"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def do_setup(self, context):"}],"source_content_type":"text/x-python","patch_set":12,"id":"1f013ff3_9c27b813","line":72,"updated":"2017-05-15 21:37:24.000000000","message":"Remove this method.","commit_id":"2279db4f807f7c291648d1f9759a48a3968e3b1e"},{"author":{"_account_id":26028,"name":"Swathi Hrishikesh","email":"swathi@hedviginc.com","username":"hrishs"},"change_message_id":"c42e698650609c7bc9234ca962f4facecaa648fb","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        self.group_stats \u003d {}"},{"line_number":70,"context_line":"        self.configuration.append_config_values(hedvig_opts)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def check_for_setup_error(self):"},{"line_number":73,"context_line":"        pass"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def do_setup(self, context):"}],"source_content_type":"text/x-python","patch_set":12,"id":"ff0f0b1f_a6c60b16","line":72,"in_reply_to":"1f013ff3_9c27b813","updated":"2018-04-23 21:39:39.000000000","message":"This method has to be overridden. If I delete this method, the cinder driver throws an exception","commit_id":"2279db4f807f7c291648d1f9759a48a3968e3b1e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"f9b52544ce1e689fd0bd88fcbb61125b5031a58a","unresolved":false,"context_lines":[{"line_number":407,"context_line":""},{"line_number":408,"context_line":"        \"\"\""},{"line_number":409,"context_line":"        try:"},{"line_number":410,"context_line":"            LOG.debug(\"Getting IQN for hostname: %s\", hostname)"},{"line_number":411,"context_line":"            iqn \u003d self.hrs.getIqn(hostname)"},{"line_number":412,"context_line":"            LOG.debug(\"Got IQN: %s, for hostname: %s\", iqn, hostname)"},{"line_number":413,"context_line":"            return iqn"}],"source_content_type":"text/x-python","patch_set":12,"id":"1f013ff3_7c3bcc37","line":410,"updated":"2017-05-15 21:37:24.000000000","message":"Move this LOG.debug outside of the try block.","commit_id":"2279db4f807f7c291648d1f9759a48a3968e3b1e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"f9b52544ce1e689fd0bd88fcbb61125b5031a58a","unresolved":false,"context_lines":[{"line_number":466,"context_line":""},{"line_number":467,"context_line":"        \"\"\""},{"line_number":468,"context_line":"        try:"},{"line_number":469,"context_line":"            LOG.debug(\"Creating snapshot...\")"},{"line_number":470,"context_line":"            snapshotName \u003d self.hrs.createSnapshot(vDiskName, snapshotId)"},{"line_number":471,"context_line":"            LOG.debug(\"Receieved snapshotName %s from rest call \","},{"line_number":472,"context_line":"                      snapshotName)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1f013ff3_bc395442","line":469,"updated":"2017-05-15 21:37:24.000000000","message":"Move this LOG.debug outside of the try block.","commit_id":"2279db4f807f7c291648d1f9759a48a3968e3b1e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"f9b52544ce1e689fd0bd88fcbb61125b5031a58a","unresolved":false,"context_lines":[{"line_number":631,"context_line":""},{"line_number":632,"context_line":"    def hedvigDeleteVirtualDisk(self, name):"},{"line_number":633,"context_line":"        try:"},{"line_number":634,"context_line":"            LOG.debug(\u0027Deleting virtual disk. name - %s\u0027, name)"},{"line_number":635,"context_line":"            self.hrs.deleteVDisk(str(name))"},{"line_number":636,"context_line":"        except Exception:"},{"line_number":637,"context_line":"            raise exception.HedvigDriverException()"}],"source_content_type":"text/x-python","patch_set":12,"id":"1f013ff3_3cf0a490","line":634,"updated":"2017-05-15 21:37:24.000000000","message":"Move LOG.debug() statement outside of the try block.","commit_id":"2279db4f807f7c291648d1f9759a48a3968e3b1e"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ca41b81a4cfbeb6232ed5654a3e4b4b18b05f107","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/python"},{"line_number":2,"context_line":"# Copyright (c) 2012 Hedvig, Inc."},{"line_number":3,"context_line":"# Copyright (c) 2012 OpenStack LLC."},{"line_number":4,"context_line":"# All Rights Reserved."}],"source_content_type":"text/x-python","patch_set":14,"id":"1f013ff3_dad18dfd","line":1,"updated":"2017-05-17 08:42:41.000000000","message":"We don\u0027t need this string","commit_id":"2086049cc4a9246ca9d8653919c8fec9188953a9"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3c73c82f46ad7e1b27eb610edabdb3e8fbbf33fa","unresolved":false,"context_lines":[{"line_number":41,"context_line":"hedvig_opts \u003d ["},{"line_number":42,"context_line":"    cfg.StrOpt("},{"line_number":43,"context_line":"        \u0027hedvig_cluster_nodes\u0027,"},{"line_number":44,"context_line":"        help\u003d\u0027The hostname (or IP address) of a hedvig nodes in the cluster\u0027),"},{"line_number":45,"context_line":"    cfg.StrOpt("},{"line_number":46,"context_line":"        \u0027hedvig_cluster_username\u0027,"},{"line_number":47,"context_line":"        help\u003d\u0027The username of a hedvig node in the cluster\u0027),"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff0f0b1f_77368e53","line":44,"range":{"start_line":44,"start_character":55,"end_line":44,"end_character":60},"updated":"2017-05-24 21:02:41.000000000","message":"s/nodes/node/\n\nPlease consider using the existing san_ip, san_user, etc config options.","commit_id":"c48817fa3007d4ba419131687027a91ffcd94abf"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3c73c82f46ad7e1b27eb610edabdb3e8fbbf33fa","unresolved":false,"context_lines":[{"line_number":59,"context_line":"CONF.register_opts(hedvig_opts)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class HedvigISCSIDriver(driver.ISCSIDriver):"},{"line_number":63,"context_line":"    \"\"\"Hedvig iSCSI volume driver.\"\"\""},{"line_number":64,"context_line":"    defaultVolumeSizeInGB_ \u003d 1"},{"line_number":65,"context_line":"    defaultVolumeBlkSize_ \u003d 4096"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff0f0b1f_174752be","line":62,"updated":"2017-05-24 21:02:41.000000000","message":"Needs cinder.interface.volumedriver decorator.","commit_id":"c48817fa3007d4ba419131687027a91ffcd94abf"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3c73c82f46ad7e1b27eb610edabdb3e8fbbf33fa","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class HedvigISCSIDriver(driver.ISCSIDriver):"},{"line_number":63,"context_line":"    \"\"\"Hedvig iSCSI volume driver.\"\"\""},{"line_number":64,"context_line":"    defaultVolumeSizeInGB_ \u003d 1"},{"line_number":65,"context_line":"    defaultVolumeBlkSize_ \u003d 4096"},{"line_number":66,"context_line":"    defaultCreatedBy_ \u003d \"Openstack\""},{"line_number":67,"context_line":"    defaultExportedBlkSize_ \u003d 512"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff0f0b1f_f71a9ec3","line":64,"range":{"start_line":64,"start_character":4,"end_line":64,"end_character":26},"updated":"2017-05-24 21:02:41.000000000","message":"Constants should be all uppercase.","commit_id":"c48817fa3007d4ba419131687027a91ffcd94abf"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3c73c82f46ad7e1b27eb610edabdb3e8fbbf33fa","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    defaultCreatedBy_ \u003d \"Openstack\""},{"line_number":67,"context_line":"    defaultExportedBlkSize_ \u003d 512"},{"line_number":68,"context_line":"    defaultVolumeSizeUnit_ \u003d \"GB\""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":71,"context_line":"        super(HedvigISCSIDriver, self).__init__(*args, **kwargs)"},{"line_number":72,"context_line":"        self.group_stats \u003d {}"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff0f0b1f_b77e66e1","line":69,"updated":"2017-05-24 21:02:41.000000000","message":"Needs VERSION and CI_WIKI_NAME constants.","commit_id":"c48817fa3007d4ba419131687027a91ffcd94abf"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3c73c82f46ad7e1b27eb610edabdb3e8fbbf33fa","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        self.configuration.append_config_values(hedvig_opts)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def check_for_setup_error(self):"},{"line_number":76,"context_line":"        pass"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def do_setup(self, context):"},{"line_number":79,"context_line":"        self.context_ \u003d context"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff0f0b1f_77844ed3","line":76,"range":{"start_line":76,"start_character":8,"end_line":76,"end_character":12},"updated":"2017-05-24 21:02:41.000000000","message":"Should probably at least validate that you can connect to the API endpoint.","commit_id":"c48817fa3007d4ba419131687027a91ffcd94abf"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3c73c82f46ad7e1b27eb610edabdb3e8fbbf33fa","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        self.hedvig_cluster_name \u003d getattr("},{"line_number":92,"context_line":"            self.configuration, \u0027hedvig_cluster_name\u0027)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        LOG.info(_(\u0027Initializing hedvig cinder driver with server - %s\u0027),"},{"line_number":95,"context_line":"                 self.hedvig_cluster_nodes)"},{"line_number":96,"context_line":"        self.hrs \u003d HedvigRestClient(self.hedvig_cluster_nodes,"},{"line_number":97,"context_line":"                                    self.hedvig_cluster_username,"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff0f0b1f_f76f3e25","line":94,"range":{"start_line":94,"start_character":17,"end_line":94,"end_character":19},"updated":"2017-05-24 21:02:41.000000000","message":"Remove _()","commit_id":"c48817fa3007d4ba419131687027a91ffcd94abf"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3c73c82f46ad7e1b27eb610edabdb3e8fbbf33fa","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def get_volume_stats(self, refresh\u003dFalse):"},{"line_number":103,"context_line":"        # we need to get get stats for server."},{"line_number":104,"context_line":"        total_capacity \u003d float(1024)"},{"line_number":105,"context_line":"        free_capacity \u003d total_capacity"},{"line_number":106,"context_line":"        self.group_stats \u003d {\"volume_backend_name\": \"hedvig\","},{"line_number":107,"context_line":"                            \"vendor_name\": \"Hedvig Inc\","}],"source_content_type":"text/x-python","patch_set":17,"id":"ff0f0b1f_174e32c0","line":104,"range":{"start_line":104,"start_character":25,"end_line":104,"end_character":36},"updated":"2017-05-24 21:02:41.000000000","message":"Is this still a TODO?","commit_id":"c48817fa3007d4ba419131687027a91ffcd94abf"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3c73c82f46ad7e1b27eb610edabdb3e8fbbf33fa","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def create_volume(self, volume):"},{"line_number":129,"context_line":"        \"\"\"Driver entry point for creating a new volume."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        \"\"\""},{"line_number":132,"context_line":"        LOG.debug(\"Creating new volume: %s\", volume)"},{"line_number":133,"context_line":"        name, description, size \u003d self.get_hedvig_volume_details(volume)"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff0f0b1f_17e3d2a5","line":130,"updated":"2017-05-24 21:02:41.000000000","message":"Nit: Single line docstrings should all be on one line.","commit_id":"c48817fa3007d4ba419131687027a91ffcd94abf"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3c73c82f46ad7e1b27eb610edabdb3e8fbbf33fa","unresolved":false,"context_lines":[{"line_number":139,"context_line":"            volumeType \u003d api.volume_type_get(self.context_, volumeTypeId)"},{"line_number":140,"context_line":"            LOG.debug(\"Volume type is: %s\", volumeType)"},{"line_number":141,"context_line":"        except Exception:"},{"line_number":142,"context_line":"            msg \u003d (_(\u0027Failed to retrieve volume type details for id: %s\u0027),"},{"line_number":143,"context_line":"                   volumeTypeId)"},{"line_number":144,"context_line":"            LOG.error(msg)"},{"line_number":145,"context_line":"            raise exception.HedvigVolumeException(\"Failed to retrieve \\"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff0f0b1f_5706ea53","line":142,"range":{"start_line":142,"start_character":19,"end_line":142,"end_character":21},"updated":"2017-05-24 21:02:41.000000000","message":"Remove _() or use msg for the LOG.error and the exception.","commit_id":"c48817fa3007d4ba419131687027a91ffcd94abf"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3c73c82f46ad7e1b27eb610edabdb3e8fbbf33fa","unresolved":false,"context_lines":[{"line_number":145,"context_line":"            raise exception.HedvigVolumeException(\"Failed to retrieve \\"},{"line_number":146,"context_line":"                                                   volume type details\")"},{"line_number":147,"context_line":"        try:"},{"line_number":148,"context_line":"            LOG.debug(\"Volume name: %s, description: %s, size: %s\", name,"},{"line_number":149,"context_line":"                      description, size)"},{"line_number":150,"context_line":"            self.hedvig_create_virtualdisk(name, description, size, volumeType)"},{"line_number":151,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff0f0b1f_77a0ce42","line":148,"range":{"start_line":148,"start_character":63,"end_line":148,"end_character":65},"updated":"2017-05-24 21:02:41.000000000","message":"If more than a couple values being formatted, please use named values: %(name)s","commit_id":"c48817fa3007d4ba419131687027a91ffcd94abf"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3c73c82f46ad7e1b27eb610edabdb3e8fbbf33fa","unresolved":false,"context_lines":[{"line_number":149,"context_line":"                      description, size)"},{"line_number":150,"context_line":"            self.hedvig_create_virtualdisk(name, description, size, volumeType)"},{"line_number":151,"context_line":"        except Exception:"},{"line_number":152,"context_line":"            msg \u003d (_(\u0027Failed to create volume. name: %(name)s, \\"},{"line_number":153,"context_line":"                     description: %(description)s, \\"},{"line_number":154,"context_line":"                     size: %(size)s\u0027), name, description, size)"},{"line_number":155,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff0f0b1f_f7f61e5d","line":152,"range":{"start_line":152,"start_character":63,"end_line":152,"end_character":64},"updated":"2017-05-24 21:02:41.000000000","message":"Get rid of all these.","commit_id":"c48817fa3007d4ba419131687027a91ffcd94abf"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3c73c82f46ad7e1b27eb610edabdb3e8fbbf33fa","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        try:"},{"line_number":165,"context_line":"            self.hedvig_delete_virtualdisk(name)"},{"line_number":166,"context_line":"        except Exception as e:"},{"line_number":167,"context_line":"            msg \u003d (_(\u0027Failed to delete volume. volume: %s\u0027), volume)"},{"line_number":168,"context_line":"            LOG.error(msg)"},{"line_number":169,"context_line":"            LOG.error(e.args[0])"},{"line_number":170,"context_line":"            if \u0027TException\u0027 in e.args[0]:"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff0f0b1f_f78bbebc","line":167,"range":{"start_line":167,"start_character":59,"end_line":167,"end_character":67},"updated":"2017-05-24 21:02:41.000000000","message":"Pass this in to the logger call.","commit_id":"c48817fa3007d4ba419131687027a91ffcd94abf"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3c73c82f46ad7e1b27eb610edabdb3e8fbbf33fa","unresolved":false,"context_lines":[{"line_number":319,"context_line":"        except Exception as e:"},{"line_number":320,"context_line":"            LOG.error(_(\u0027Failed to get hedvig controller for compute \\"},{"line_number":321,"context_line":"                      host: %s\u0027), host)"},{"line_number":322,"context_line":"            raise e"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    def hedvig_do_iscsi_logout(self, targetName, portal, toThrow\u003dFalse):"},{"line_number":325,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff0f0b1f_370b762a","line":322,"range":{"start_line":322,"start_character":12,"end_line":322,"end_character":19},"updated":"2017-05-24 21:02:41.000000000","message":"Should just be \"raise\" not \"raise e\"","commit_id":"c48817fa3007d4ba419131687027a91ffcd94abf"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3c73c82f46ad7e1b27eb610edabdb3e8fbbf33fa","unresolved":false,"context_lines":[{"line_number":366,"context_line":"                    self.hedvig_do_iscsi_logout(targetName, portal)"},{"line_number":367,"context_line":"            targetName \u003d None"},{"line_number":368,"context_line":"            portal \u003d None"},{"line_number":369,"context_line":"            if retOut is not None and len(retOut) \u003e 0:"},{"line_number":370,"context_line":"                expectedTarget \u003d tgtHost + \"-\" + six.text_type(lunNum)"},{"line_number":371,"context_line":"                for line in retOut.strip(\" \").split(\"\\n\"):"},{"line_number":372,"context_line":"                    if expectedTarget in line:"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff0f0b1f_0216ee49","line":369,"range":{"start_line":369,"start_character":12,"end_line":369,"end_character":54},"updated":"2017-05-24 21:02:41.000000000","message":"Could just be \"if retOut:\"","commit_id":"c48817fa3007d4ba419131687027a91ffcd94abf"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f2f0057e3425ddd638e0e08df3204be9984c9857","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2012 Hedvig, Inc."},{"line_number":2,"context_line":"# Copyright (c) 2012 OpenStack LLC."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":18,"id":"df140735_b17df91d","line":1,"range":{"start_line":1,"start_character":16,"end_line":1,"end_character":21},"updated":"2017-05-30 22:17:27.000000000","message":"2017","commit_id":"ae362ffdeb6182116c920b992ccdd8eef37e6bfa"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f2f0057e3425ddd638e0e08df3204be9984c9857","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2012 Hedvig, Inc."},{"line_number":2,"context_line":"# Copyright (c) 2012 OpenStack LLC."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":18,"id":"df140735_51745d35","line":2,"updated":"2017-05-30 22:17:27.000000000","message":"Remove this OpenStack copyright.","commit_id":"ae362ffdeb6182116c920b992ccdd8eef37e6bfa"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f2f0057e3425ddd638e0e08df3204be9984c9857","unresolved":false,"context_lines":[{"line_number":31,"context_line":"from cinder import interface"},{"line_number":32,"context_line":"from cinder import utils"},{"line_number":33,"context_line":"from cinder.volume import driver"},{"line_number":34,"context_line":"from cinder.volume.drivers.hedvig.HedvigConfig import HedvigConfig"},{"line_number":35,"context_line":"from cinder.volume.drivers.hedvig.HedvigRestClient import HedvigRestClient"},{"line_number":36,"context_line":"from cinder.volume import qos_specs"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":18,"id":"df140735_719e4164","line":35,"range":{"start_line":34,"start_character":0,"end_line":35,"end_character":74},"updated":"2017-05-30 22:17:27.000000000","message":"import module please.","commit_id":"ae362ffdeb6182116c920b992ccdd8eef37e6bfa"},{"author":{"_account_id":26028,"name":"Swathi Hrishikesh","email":"swathi@hedviginc.com","username":"hrishs"},"change_message_id":"c86f32da62f47e3c80d0f5a98d276012078ef6ac","unresolved":false,"context_lines":[{"line_number":31,"context_line":"from cinder import interface"},{"line_number":32,"context_line":"from cinder import utils"},{"line_number":33,"context_line":"from cinder.volume import driver"},{"line_number":34,"context_line":"from cinder.volume.drivers.hedvig.HedvigConfig import HedvigConfig"},{"line_number":35,"context_line":"from cinder.volume.drivers.hedvig.HedvigRestClient import HedvigRestClient"},{"line_number":36,"context_line":"from cinder.volume import qos_specs"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":18,"id":"df140735_ab72d8ab","line":35,"range":{"start_line":34,"start_character":0,"end_line":35,"end_character":74},"in_reply_to":"df140735_719e4164","updated":"2017-06-02 18:52:23.000000000","message":"Replace \"from cinder.volume.drivers.hedvig.HedvigConfig import HedvigConfig\" by \" import cinder.volume.drivers.hedvig.HedvigConfig\"\nIs this what you implied?","commit_id":"ae362ffdeb6182116c920b992ccdd8eef37e6bfa"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"afd4a7a59392a827eae03650985472e3d814d4fa","unresolved":false,"context_lines":[{"line_number":31,"context_line":"from cinder import interface"},{"line_number":32,"context_line":"from cinder import utils"},{"line_number":33,"context_line":"from cinder.volume import driver"},{"line_number":34,"context_line":"from cinder.volume.drivers.hedvig.HedvigConfig import HedvigConfig"},{"line_number":35,"context_line":"from cinder.volume.drivers.hedvig.HedvigRestClient import HedvigRestClient"},{"line_number":36,"context_line":"from cinder.volume import qos_specs"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":18,"id":"df140735_512073ac","line":35,"range":{"start_line":34,"start_character":0,"end_line":35,"end_character":74},"in_reply_to":"df140735_ab72d8ab","updated":"2017-06-02 18:58:47.000000000","message":"And ideally, the files should not be HedvigConfig and HedvigRestClient, but config.py and rest_client.py to follow Python coding style guidelines.","commit_id":"ae362ffdeb6182116c920b992ccdd8eef37e6bfa"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"460bee8b0f750547b648fa67f4d5eb3737f216e0","unresolved":false,"context_lines":[{"line_number":31,"context_line":"from cinder import interface"},{"line_number":32,"context_line":"from cinder import utils"},{"line_number":33,"context_line":"from cinder.volume import driver"},{"line_number":34,"context_line":"from cinder.volume.drivers.hedvig.HedvigConfig import HedvigConfig"},{"line_number":35,"context_line":"from cinder.volume.drivers.hedvig.HedvigRestClient import HedvigRestClient"},{"line_number":36,"context_line":"from cinder.volume import qos_specs"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":18,"id":"df140735_58341093","line":35,"range":{"start_line":34,"start_character":0,"end_line":35,"end_character":74},"in_reply_to":"df140735_ab72d8ab","updated":"2017-06-02 21:53:01.000000000","message":"Yes, \"from cinder.volume.drivers.hedvig import HedvigConfig\" and then use HedvigConfig.HedvigConfig.\n\nAs Sean said, please make the file name snake_case, not CamelCase.","commit_id":"ae362ffdeb6182116c920b992ccdd8eef37e6bfa"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f2f0057e3425ddd638e0e08df3204be9984c9857","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    cfg.StrOpt("},{"line_number":42,"context_line":"        \u0027san_clusternode\u0027,"},{"line_number":43,"context_line":"        help\u003d\u0027The hostnames (or IP address) of hedvig nodes in the cluster\u0027),"},{"line_number":44,"context_line":"    cfg.StrOpt("},{"line_number":45,"context_line":"        \u0027san_login\u0027,"},{"line_number":46,"context_line":"        help\u003d\u0027The username of a hedvig node in the cluster\u0027),"},{"line_number":47,"context_line":"    cfg.StrOpt("},{"line_number":48,"context_line":"        \u0027san_password\u0027,"},{"line_number":49,"context_line":"        help\u003d\u0027The password of a hedvig node in the cluster\u0027,"},{"line_number":50,"context_line":"        secret\u003dTrue),"},{"line_number":51,"context_line":"    cfg.StrOpt("},{"line_number":52,"context_line":"        \u0027san_clustername\u0027,"},{"line_number":53,"context_line":"        help\u003d\u0027The cluster name of a hedvig node in the cluster\u0027),"}],"source_content_type":"text/x-python","patch_set":18,"id":"df140735_51a9fd78","line":50,"range":{"start_line":44,"start_character":0,"end_line":50,"end_character":21},"updated":"2017-05-30 22:17:27.000000000","message":"These are already defined in https://github.com/openstack/cinder/blob/master/cinder/volume/drivers/san/san.py#L45.  You should use those already defined and not re-define them.","commit_id":"ae362ffdeb6182116c920b992ccdd8eef37e6bfa"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f2f0057e3425ddd638e0e08df3204be9984c9857","unresolved":false,"context_lines":[{"line_number":61,"context_line":"class HedvigISCSIDriver(driver.ISCSIDriver):"},{"line_number":62,"context_line":"    \"\"\"Hedvig iSCSI volume driver.\"\"\""},{"line_number":63,"context_line":"    DEFAULT_VOL_SIZE_IN_GB \u003d 1"},{"line_number":64,"context_line":"    DEFAULT_VOL_BLOCK_SIZE \u003d 4096"},{"line_number":65,"context_line":"    DEFAULT_CREATEDBY \u003d \"Openstack\""},{"line_number":66,"context_line":"    DEFAULT_EXPORT_BLK_SIZE \u003d 512"},{"line_number":67,"context_line":"    DEFAULT_VOL_SIZE_UNIT \u003d \"GB\""}],"source_content_type":"text/x-python","patch_set":18,"id":"df140735_b1d059f9","line":64,"range":{"start_line":64,"start_character":4,"end_line":64,"end_character":33},"updated":"2017-05-30 22:17:27.000000000","message":"Use constants in oslo_utils.","commit_id":"ae362ffdeb6182116c920b992ccdd8eef37e6bfa"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f2f0057e3425ddd638e0e08df3204be9984c9857","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    DEFAULT_CREATEDBY \u003d \"Openstack\""},{"line_number":66,"context_line":"    DEFAULT_EXPORT_BLK_SIZE \u003d 512"},{"line_number":67,"context_line":"    DEFAULT_VOL_SIZE_UNIT \u003d \"GB\""},{"line_number":68,"context_line":"    DEFAULT_CAPACITY \u003d 1024"},{"line_number":69,"context_line":"    VERSION \u003d \"1.0.0\""},{"line_number":70,"context_line":"    CI_WIKI_NAME \u003d \"Hedvig_CI\""},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"df140735_11e265d6","line":68,"updated":"2017-05-30 22:17:27.000000000","message":"Use the already defined constants in oslo_utils.\n\nhttps://github.com/openstack/oslo.utils/blob/master/oslo_utils/units.py#L21","commit_id":"ae362ffdeb6182116c920b992ccdd8eef37e6bfa"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5c21dac60769590bcb312c25272d880762a464c8","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    def check_for_setup_error(self):"},{"line_number":62,"context_line":"        self.check_config()"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def check_config(self):"},{"line_number":65,"context_line":"        # Ensure that the data required by hedvig are provided"},{"line_number":66,"context_line":"        required_config \u003d [\u0027san_login\u0027, \u0027san_password\u0027, \u0027san_ip\u0027,"},{"line_number":67,"context_line":"                           \u0027san_clustername\u0027]"}],"source_content_type":"text/x-python","patch_set":22,"id":"df140735_dc446676","line":64,"range":{"start_line":64,"start_character":4,"end_line":64,"end_character":27},"updated":"2017-06-05 19:20:56.000000000","message":"This is only called from check_for_setup_error. Is there a reason not to just have this as that method body?","commit_id":"1755f7c49421f00e941de6a9893b85882ae658a0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5c21dac60769590bcb312c25272d880762a464c8","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        for attr in required_config:"},{"line_number":69,"context_line":"            if not getattr(self.configuration, attr, None):"},{"line_number":70,"context_line":"                raise exception.HedvigVolumeException(\"param %s is \""},{"line_number":71,"context_line":"                                                      \"not set\", attr)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def do_setup(self, context):"},{"line_number":74,"context_line":"        self.context_ \u003d context"}],"source_content_type":"text/x-python","patch_set":22,"id":"df140735_5caa9618","line":71,"range":{"start_line":71,"start_character":63,"end_line":71,"end_character":64},"updated":"2017-06-05 19:20:56.000000000","message":"I don\u0027t think you want to pass in attr as an arg. You need to format the string with %.","commit_id":"1755f7c49421f00e941de6a9893b85882ae658a0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5c21dac60769590bcb312c25272d880762a464c8","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def do_setup(self, context):"},{"line_number":74,"context_line":"        self.context_ \u003d context"},{"line_number":75,"context_line":"        self.san_ip \u003d getattr("},{"line_number":76,"context_line":"            self.configuration, \u0027san_ip\u0027, None)"},{"line_number":77,"context_line":"        self.san_login \u003d getattr("},{"line_number":78,"context_line":"            self.configuration, \u0027san_login\u0027, None)"}],"source_content_type":"text/x-python","patch_set":22,"id":"df140735_1c341efb","line":75,"range":{"start_line":75,"start_character":22,"end_line":75,"end_character":29},"updated":"2017-06-05 19:20:56.000000000","message":"No reason to use getattr here. Just do:\n\nself.san_ip \u003d self.configuration.san_ip","commit_id":"1755f7c49421f00e941de6a9893b85882ae658a0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5c21dac60769590bcb312c25272d880762a464c8","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        free_capacity \u003d total_capacity"},{"line_number":96,"context_line":"        self.group_stats \u003d {\"volume_backend_name\": \"hedvig\","},{"line_number":97,"context_line":"                            \"vendor_name\": \"Hedvig Inc\","},{"line_number":98,"context_line":"                            \"driver_version\": \"0.99\","},{"line_number":99,"context_line":"                            \"storage_protocol\": \"iSCSI\","},{"line_number":100,"context_line":"                            \"total_capacity_gb\": total_capacity,"},{"line_number":101,"context_line":"                            \"free_capacity_gb\": free_capacity,"}],"source_content_type":"text/x-python","patch_set":22,"id":"df140735_5c2df6a5","line":98,"range":{"start_line":98,"start_character":46,"end_line":98,"end_character":52},"updated":"2017-06-05 19:20:56.000000000","message":"This doesn\u0027t match. Just use self.VERSION","commit_id":"1755f7c49421f00e941de6a9893b85882ae658a0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5c21dac60769590bcb312c25272d880762a464c8","unresolved":false,"context_lines":[{"line_number":127,"context_line":"            volumeType \u003d api.volume_type_get(self.context_, volumeTypeId)"},{"line_number":128,"context_line":"            LOG.debug(\"Volume type is: %s\", volumeType)"},{"line_number":129,"context_line":"        except Exception:"},{"line_number":130,"context_line":"            msg \u003d (\u0027Failed to retrieve volume type details for id: %s\u0027,"},{"line_number":131,"context_line":"                   volumeTypeId)"},{"line_number":132,"context_line":"            LOG.error(msg)"},{"line_number":133,"context_line":"            raise exception.HedvigVolumeException(\"Failed to retrieve \""}],"source_content_type":"text/x-python","patch_set":22,"id":"df140735_5c061622","line":130,"range":{"start_line":130,"start_character":12,"end_line":130,"end_character":15},"updated":"2017-06-05 19:20:56.000000000","message":"Get rid of msg, move this directly into the LOG.error call.","commit_id":"1755f7c49421f00e941de6a9893b85882ae658a0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5c21dac60769590bcb312c25272d880762a464c8","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            msg \u003d (\u0027Failed to retrieve volume type details for id: %s\u0027,"},{"line_number":131,"context_line":"                   volumeTypeId)"},{"line_number":132,"context_line":"            LOG.error(msg)"},{"line_number":133,"context_line":"            raise exception.HedvigVolumeException(\"Failed to retrieve \""},{"line_number":134,"context_line":"                                                  \"volume type details\")"},{"line_number":135,"context_line":"        try:"},{"line_number":136,"context_line":"            LOG.debug(\"Volume name: %(name)s, description: %(description)s, \""}],"source_content_type":"text/x-python","patch_set":22,"id":"df140735_b7230da7","line":133,"range":{"start_line":133,"start_character":50,"end_line":133,"end_character":51},"updated":"2017-06-05 19:20:56.000000000","message":"Exception strings should have _() for translation.","commit_id":"1755f7c49421f00e941de6a9893b85882ae658a0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5c21dac60769590bcb312c25272d880762a464c8","unresolved":false,"context_lines":[{"line_number":138,"context_line":"                      description, size)"},{"line_number":139,"context_line":"            self.hedvig_create_virtualdisk(name, description, size, volumeType)"},{"line_number":140,"context_line":"        except Exception:"},{"line_number":141,"context_line":"            msg \u003d (\u0027Failed to create volume. name: %(name)s, \u0027"},{"line_number":142,"context_line":"                   \u0027description: %(description)s,\u0027"},{"line_number":143,"context_line":"                   \u0027size: %(size)s\u0027, name, description, size)"},{"line_number":144,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":22,"id":"df140735_973ec9be","line":141,"range":{"start_line":141,"start_character":12,"end_line":141,"end_character":15},"updated":"2017-06-05 19:20:56.000000000","message":"Get rid of msg, move into LOG.error call.","commit_id":"1755f7c49421f00e941de6a9893b85882ae658a0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5c21dac60769590bcb312c25272d880762a464c8","unresolved":false,"context_lines":[{"line_number":142,"context_line":"                   \u0027description: %(description)s,\u0027"},{"line_number":143,"context_line":"                   \u0027size: %(size)s\u0027, name, description, size)"},{"line_number":144,"context_line":"            LOG.error(msg)"},{"line_number":145,"context_line":"            raise exception.HedvigVolumeException(\"Failed to create volume\")"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def delete_volume(self, volume):"},{"line_number":148,"context_line":"        \"\"\"Driver entry point for deleting volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":22,"id":"df140735_7739f5d4","line":145,"range":{"start_line":145,"start_character":50,"end_line":145,"end_character":51},"updated":"2017-06-05 19:20:56.000000000","message":"_()","commit_id":"1755f7c49421f00e941de6a9893b85882ae658a0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5c21dac60769590bcb312c25272d880762a464c8","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        try:"},{"line_number":152,"context_line":"            self.hedvig_delete_virtualdisk(name)"},{"line_number":153,"context_line":"        except Exception as e:"},{"line_number":154,"context_line":"            msg \u003d (\u0027Failed to delete volume. volume: %s\u0027, volume)"},{"line_number":155,"context_line":"            LOG.error(msg)"},{"line_number":156,"context_line":"            LOG.error(e.args[0])"},{"line_number":157,"context_line":"            if \u0027TException\u0027 in e.args[0]:"}],"source_content_type":"text/x-python","patch_set":22,"id":"df140735_d75561fb","line":154,"range":{"start_line":154,"start_character":12,"end_line":154,"end_character":15},"updated":"2017-06-05 19:20:56.000000000","message":"Get rid of msg.","commit_id":"1755f7c49421f00e941de6a9893b85882ae658a0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5c21dac60769590bcb312c25272d880762a464c8","unresolved":false,"context_lines":[{"line_number":217,"context_line":""},{"line_number":218,"context_line":"            lunnum \u003d self.hedvig_get_lun(tgtHost, volName)"},{"line_number":219,"context_line":"            if lunnum \u003d\u003d -1:"},{"line_number":220,"context_line":"                msg \u003d (\u0027Failed to get lun for volume: %(volume)s, \u0027"},{"line_number":221,"context_line":"                       \u0027hedvig controller: %(tgtHost)s\u0027,"},{"line_number":222,"context_line":"                       {\u0027volume\u0027: volume, \u0027tgtHost\u0027: tgtHost})"},{"line_number":223,"context_line":"                LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":22,"id":"df140735_5749515d","line":220,"range":{"start_line":220,"start_character":16,"end_line":220,"end_character":19},"updated":"2017-06-05 19:20:56.000000000","message":"Move to LOG.error call.","commit_id":"1755f7c49421f00e941de6a9893b85882ae658a0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5c21dac60769590bcb312c25272d880762a464c8","unresolved":false,"context_lines":[{"line_number":222,"context_line":"                       {\u0027volume\u0027: volume, \u0027tgtHost\u0027: tgtHost})"},{"line_number":223,"context_line":"                LOG.error(msg)"},{"line_number":224,"context_line":"                raise exception.HedvigDriverException()"},{"line_number":225,"context_line":"            LOG.debug(\"Received lun num \" + six.text_type(lunnum))"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"            # Addaccess to the mgmt interface addr and iqn of the compute host"},{"line_number":228,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"df140735_179e39b8","line":225,"range":{"start_line":225,"start_character":42,"end_line":225,"end_character":58},"updated":"2017-06-05 19:20:56.000000000","message":"Don\u0027t do this here. Add %s to the end of the string and pass lunnum as an argument to the logger call.","commit_id":"1755f7c49421f00e941de6a9893b85882ae658a0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5c21dac60769590bcb312c25272d880762a464c8","unresolved":false,"context_lines":[{"line_number":226,"context_line":""},{"line_number":227,"context_line":"            # Addaccess to the mgmt interface addr and iqn of the compute host"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"            LOG.debug(\" calling add access with \" + six.text_type(tgtHost) +"},{"line_number":230,"context_line":"                      \" : \" + six.text_type(volName) + \" : \" +"},{"line_number":231,"context_line":"                      six.text_type(connector[\u0027initiator\u0027]))"},{"line_number":232,"context_line":"            self.hedvig_add_access(six.text_type(tgtHost),"}],"source_content_type":"text/x-python","patch_set":22,"id":"df140735_b7a66d0e","line":229,"range":{"start_line":229,"start_character":52,"end_line":229,"end_character":65},"updated":"2017-06-05 19:20:56.000000000","message":"Same with these. Try to avoid string conversion and concatenation up front with logger calls.","commit_id":"1755f7c49421f00e941de6a9893b85882ae658a0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5c21dac60769590bcb312c25272d880762a464c8","unresolved":false,"context_lines":[{"line_number":235,"context_line":"            # Addaccess to both storage and mgmt interface addrs for"},{"line_number":236,"context_line":"            # iscsi discovery to succeed"},{"line_number":237,"context_line":"            LOG.debug(\" calling hedvig_get_iqn \" +"},{"line_number":238,"context_line":"                      six.text_type(socket.getfqdn()))"},{"line_number":239,"context_line":"            controller_host_iqn \u003d self.hedvig_get_iqn(socket.getfqdn())"},{"line_number":240,"context_line":"            LOG.debug(\" calling add access with \" +"},{"line_number":241,"context_line":"                      six.text_type(tgtHost) + \" : \" +"}],"source_content_type":"text/x-python","patch_set":22,"id":"df140735_97b1294a","line":238,"range":{"start_line":238,"start_character":26,"end_line":238,"end_character":35},"updated":"2017-06-05 19:20:56.000000000","message":"x","commit_id":"1755f7c49421f00e941de6a9893b85882ae658a0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5c21dac60769590bcb312c25272d880762a464c8","unresolved":false,"context_lines":[{"line_number":238,"context_line":"                      six.text_type(socket.getfqdn()))"},{"line_number":239,"context_line":"            controller_host_iqn \u003d self.hedvig_get_iqn(socket.getfqdn())"},{"line_number":240,"context_line":"            LOG.debug(\" calling add access with \" +"},{"line_number":241,"context_line":"                      six.text_type(tgtHost) + \" : \" +"},{"line_number":242,"context_line":"                      six.text_type(volName) + \" : \" +"},{"line_number":243,"context_line":"                      six.text_type(controller_host_iqn))"},{"line_number":244,"context_line":"            self.hedvig_add_access(tgtHost, volName, controller_host_iqn)"},{"line_number":245,"context_line":"            targetName, portal \u003d self.hedvig_do_iscsi_discovery(tgtHost,"},{"line_number":246,"context_line":"                                                                lunnum)"}],"source_content_type":"text/x-python","patch_set":22,"id":"df140735_37b25d4a","line":243,"range":{"start_line":241,"start_character":22,"end_line":243,"end_character":37},"updated":"2017-06-05 19:20:56.000000000","message":"x","commit_id":"1755f7c49421f00e941de6a9893b85882ae658a0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5c21dac60769590bcb312c25272d880762a464c8","unresolved":false,"context_lines":[{"line_number":252,"context_line":"                      volName, connector, iscsi_properties)"},{"line_number":253,"context_line":"            return {\u0027driver_volume_type\u0027: \u0027iscsi\u0027, \u0027data\u0027: iscsi_properties}"},{"line_number":254,"context_line":"        except Exception:"},{"line_number":255,"context_line":"            msg \u003d (\u0027Volume assignment to connect failed.\u0027"},{"line_number":256,"context_line":"                   \u0027volume: %(volume)s, connector: %(connector)s\u0027,"},{"line_number":257,"context_line":"                   {\u0027volume\u0027: volume, \u0027connector\u0027: connector})"},{"line_number":258,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":22,"id":"df140735_17875964","line":255,"range":{"start_line":255,"start_character":12,"end_line":255,"end_character":15},"updated":"2017-06-05 19:20:56.000000000","message":"Move into logger call.","commit_id":"1755f7c49421f00e941de6a9893b85882ae658a0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5c21dac60769590bcb312c25272d880762a464c8","unresolved":false,"context_lines":[{"line_number":269,"context_line":"            volName \u003d volume[\u0027name\u0027]"},{"line_number":270,"context_line":"            tgtHost \u003d self.hedvig_lookup_tgt(computeHost)"},{"line_number":271,"context_line":"            if tgtHost \u003d\u003d \u0027\u0027:"},{"line_number":272,"context_line":"                msg \u003d (\u0027Failed to get hedvig controller for compute \u0027"},{"line_number":273,"context_line":"                       \u0027host: %s\u0027, computeHost)"},{"line_number":274,"context_line":"                LOG.error(msg)"},{"line_number":275,"context_line":"                raise exception.HedvigDriverException()"}],"source_content_type":"text/x-python","patch_set":22,"id":"df140735_d77c4173","line":272,"range":{"start_line":272,"start_character":16,"end_line":272,"end_character":19},"updated":"2017-06-05 19:20:56.000000000","message":"Move into logger call.","commit_id":"1755f7c49421f00e941de6a9893b85882ae658a0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5c21dac60769590bcb312c25272d880762a464c8","unresolved":false,"context_lines":[{"line_number":275,"context_line":"                raise exception.HedvigDriverException()"},{"line_number":276,"context_line":"            lunnum \u003d self.hedvig_get_lun(tgtHost, volName)"},{"line_number":277,"context_line":"            if lunnum \u003d\u003d -1:"},{"line_number":278,"context_line":"                msg \u003d (\u0027Failed to get lun for volume: %s\u0027, volume)"},{"line_number":279,"context_line":"                LOG.error(msg)"},{"line_number":280,"context_line":"                raise exception.HedvigDriverException()"},{"line_number":281,"context_line":"            self.hedvig_delete_lun(tgtHost, volName, lunnum)"}],"source_content_type":"text/x-python","patch_set":22,"id":"df140735_d7f1e102","line":278,"range":{"start_line":278,"start_character":16,"end_line":278,"end_character":19},"updated":"2017-06-05 19:20:56.000000000","message":"x","commit_id":"1755f7c49421f00e941de6a9893b85882ae658a0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5c21dac60769590bcb312c25272d880762a464c8","unresolved":false,"context_lines":[{"line_number":280,"context_line":"                raise exception.HedvigDriverException()"},{"line_number":281,"context_line":"            self.hedvig_delete_lun(tgtHost, volName, lunnum)"},{"line_number":282,"context_line":"        except Exception:"},{"line_number":283,"context_line":"            msg \u003d (\u0027Failed to terminate connection. volume: %(volume)s, \u0027"},{"line_number":284,"context_line":"                   \u0027connector: %(connector)s\u0027,"},{"line_number":285,"context_line":"                   {\u0027volume\u0027: volume, \u0027connector\u0027: connector})"},{"line_number":286,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":22,"id":"df140735_b7f42df2","line":283,"range":{"start_line":283,"start_character":12,"end_line":283,"end_character":15},"updated":"2017-06-05 19:20:56.000000000","message":"x","commit_id":"1755f7c49421f00e941de6a9893b85882ae658a0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5c21dac60769590bcb312c25272d880762a464c8","unresolved":false,"context_lines":[{"line_number":306,"context_line":"                      \u0027host: %s\u0027, host)"},{"line_number":307,"context_line":"            raise"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    def hedvig_do_iscsi_logout(self, targetName, portal, toThrow\u003dFalse):"},{"line_number":310,"context_line":"        try:"},{"line_number":311,"context_line":"            (retOut, retErr) \u003d utils.execute(\"iscsiadm\", \"--mode\", \"node\","},{"line_number":312,"context_line":"                                             \"--targetname\", targetName,"}],"source_content_type":"text/x-python","patch_set":22,"id":"df140735_f7d7454a","line":309,"range":{"start_line":309,"start_character":8,"end_line":309,"end_character":30},"updated":"2017-06-05 19:20:56.000000000","message":"This should not be done in the driver.","commit_id":"1755f7c49421f00e941de6a9893b85882ae658a0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5c21dac60769590bcb312c25272d880762a464c8","unresolved":false,"context_lines":[{"line_number":326,"context_line":"                 \u0027stdout\u0027: e.stdout, \u0027stderr\u0027: e.stderr,"},{"line_number":327,"context_line":"                 \u0027exit_code\u0027: e.exit_code})"},{"line_number":328,"context_line":"            if toThrow:"},{"line_number":329,"context_line":"                raise e"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    def hedvig_do_iscsi_discovery(self, tgtHost, lunNum):"},{"line_number":332,"context_line":"        LOG.debug(\"Do iscsi discovery, hedvig controller: %s, lun: %s\","}],"source_content_type":"text/x-python","patch_set":22,"id":"df140735_7771f575","line":329,"range":{"start_line":329,"start_character":16,"end_line":329,"end_character":23},"updated":"2017-06-05 19:20:56.000000000","message":"Doesn\u0027t matter, since this all needs to be removed, but should just be \"raise\" not \"raise e\".","commit_id":"1755f7c49421f00e941de6a9893b85882ae658a0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5c21dac60769590bcb312c25272d880762a464c8","unresolved":false,"context_lines":[{"line_number":328,"context_line":"            if toThrow:"},{"line_number":329,"context_line":"                raise e"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    def hedvig_do_iscsi_discovery(self, tgtHost, lunNum):"},{"line_number":332,"context_line":"        LOG.debug(\"Do iscsi discovery, hedvig controller: %s, lun: %s\","},{"line_number":333,"context_line":"                  tgtHost, lunNum)"},{"line_number":334,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":22,"id":"df140735_575391e2","line":331,"range":{"start_line":331,"start_character":8,"end_line":331,"end_character":33},"updated":"2017-06-05 19:20:56.000000000","message":"These should all be removed.","commit_id":"1755f7c49421f00e941de6a9893b85882ae658a0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"4484aa7906915a3f79df0a928338c7aef0da8abf","unresolved":false,"context_lines":[{"line_number":328,"context_line":"            if toThrow:"},{"line_number":329,"context_line":"                raise e"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    def hedvig_do_iscsi_discovery(self, tgtHost, lunNum):"},{"line_number":332,"context_line":"        LOG.debug(\"Do iscsi discovery, hedvig controller: %s, lun: %s\","},{"line_number":333,"context_line":"                  tgtHost, lunNum)"},{"line_number":334,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":22,"id":"df140735_d6d43e4a","line":331,"range":{"start_line":331,"start_character":8,"end_line":331,"end_character":33},"in_reply_to":"df140735_16907694","updated":"2017-06-05 23:26:26.000000000","message":"I\u0027m not sure I understand your question. But drivers should not be doing any rescanning or session management. Usually, Cinder isn\u0027t even on the same node as where the volumes are being exposed to anyway, so it won\u0027t do any good.","commit_id":"1755f7c49421f00e941de6a9893b85882ae658a0"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"08e9688afd5fd940ef40644921ce9142fd80c86f","unresolved":false,"context_lines":[{"line_number":328,"context_line":"            if toThrow:"},{"line_number":329,"context_line":"                raise e"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    def hedvig_do_iscsi_discovery(self, tgtHost, lunNum):"},{"line_number":332,"context_line":"        LOG.debug(\"Do iscsi discovery, hedvig controller: %s, lun: %s\","},{"line_number":333,"context_line":"                  tgtHost, lunNum)"},{"line_number":334,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":22,"id":"df140735_b67b0a8a","line":331,"range":{"start_line":331,"start_character":8,"end_line":331,"end_character":33},"in_reply_to":"df140735_575391e2","updated":"2017-06-05 23:23:43.000000000","message":"I don\u0027t see other vendors using this, Is there any suggestion of this should be implemented apart from the current one?","commit_id":"1755f7c49421f00e941de6a9893b85882ae658a0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"924f8dcdbc5f8aa3e6fe66800f60cadf92715c77","unresolved":false,"context_lines":[{"line_number":328,"context_line":"            if toThrow:"},{"line_number":329,"context_line":"                raise e"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    def hedvig_do_iscsi_discovery(self, tgtHost, lunNum):"},{"line_number":332,"context_line":"        LOG.debug(\"Do iscsi discovery, hedvig controller: %s, lun: %s\","},{"line_number":333,"context_line":"                  tgtHost, lunNum)"},{"line_number":334,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":22,"id":"df140735_5c272dcb","line":331,"range":{"start_line":331,"start_character":8,"end_line":331,"end_character":33},"in_reply_to":"df140735_5cd28d29","updated":"2017-06-06 01:56:54.000000000","message":"No, it will still need to use the normal mechanism.","commit_id":"1755f7c49421f00e941de6a9893b85882ae658a0"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"0efa387fe7965dc4433ca6070b522dad0fb66bd0","unresolved":false,"context_lines":[{"line_number":328,"context_line":"            if toThrow:"},{"line_number":329,"context_line":"                raise e"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    def hedvig_do_iscsi_discovery(self, tgtHost, lunNum):"},{"line_number":332,"context_line":"        LOG.debug(\"Do iscsi discovery, hedvig controller: %s, lun: %s\","},{"line_number":333,"context_line":"                  tgtHost, lunNum)"},{"line_number":334,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":22,"id":"df140735_16907694","line":331,"range":{"start_line":331,"start_character":8,"end_line":331,"end_character":33},"in_reply_to":"df140735_b67b0a8a","updated":"2017-06-05 23:24:55.000000000","message":"*other","commit_id":"1755f7c49421f00e941de6a9893b85882ae658a0"},{"author":{"_account_id":24757,"name":"Dhinesh Balasubramaniam","email":"swathi@hedviginc.com","username":"dhinesh"},"change_message_id":"23b2b0993ec21c7c00f6f8e237cf0e6a81a399fd","unresolved":false,"context_lines":[{"line_number":328,"context_line":"            if toThrow:"},{"line_number":329,"context_line":"                raise e"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    def hedvig_do_iscsi_discovery(self, tgtHost, lunNum):"},{"line_number":332,"context_line":"        LOG.debug(\"Do iscsi discovery, hedvig controller: %s, lun: %s\","},{"line_number":333,"context_line":"                  tgtHost, lunNum)"},{"line_number":334,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":22,"id":"df140735_5cd28d29","line":331,"range":{"start_line":331,"start_character":8,"end_line":331,"end_character":33},"in_reply_to":"df140735_d6d43e4a","updated":"2017-06-06 01:25:33.000000000","message":"Hedvig customers have Cinder on the same node where the volumes are being exposed. ie cinder and controller run on the same node.\nSo would it be okay to have these functions in the driver?","commit_id":"1755f7c49421f00e941de6a9893b85882ae658a0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5c21dac60769590bcb312c25272d880762a464c8","unresolved":false,"context_lines":[{"line_number":391,"context_line":"        try:"},{"line_number":392,"context_line":"            lunNo \u003d self.hrs.get_lun(tgtHost, vDiskName)"},{"line_number":393,"context_line":"            if lunNo \u003e -1:"},{"line_number":394,"context_line":"                LOG.debug(\"Found lun: %s\", six.text_type(lunNo))"},{"line_number":395,"context_line":"                return lunNo"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"            # If the lun is not found, add lun for the vdisk"}],"source_content_type":"text/x-python","patch_set":22,"id":"df140735_b710ad01","line":394,"range":{"start_line":394,"start_character":43,"end_line":394,"end_character":56},"updated":"2017-06-05 19:20:56.000000000","message":"x","commit_id":"1755f7c49421f00e941de6a9893b85882ae658a0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5c21dac60769590bcb312c25272d880762a464c8","unresolved":false,"context_lines":[{"line_number":395,"context_line":"                return lunNo"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"            # If the lun is not found, add lun for the vdisk"},{"line_number":398,"context_line":"            LOG.debug(\"calling add lun on taget : \" + six.text_type(tgtHost) +"},{"line_number":399,"context_line":"                      \" ; vdisk:  \" + six.text_type(vDiskName))"},{"line_number":400,"context_line":"            self.hrs.add_lun(tgtHost, vDiskName, False)"},{"line_number":401,"context_line":"            lunNo \u003d self.hrs.get_lun(tgtHost, vDiskName)"}],"source_content_type":"text/x-python","patch_set":22,"id":"df140735_37fc9db3","line":398,"range":{"start_line":398,"start_character":53,"end_line":398,"end_character":68},"updated":"2017-06-05 19:20:56.000000000","message":"Get rid of six.text_type, us string formatting.","commit_id":"1755f7c49421f00e941de6a9893b85882ae658a0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5c21dac60769590bcb312c25272d880762a464c8","unresolved":false,"context_lines":[{"line_number":399,"context_line":"                      \" ; vdisk:  \" + six.text_type(vDiskName))"},{"line_number":400,"context_line":"            self.hrs.add_lun(tgtHost, vDiskName, False)"},{"line_number":401,"context_line":"            lunNo \u003d self.hrs.get_lun(tgtHost, vDiskName)"},{"line_number":402,"context_line":"            LOG.debug(\"Found lun: %s\", six.text_type(lunNo))"},{"line_number":403,"context_line":"            return lunNo"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":22,"id":"df140735_f733c5a9","line":402,"range":{"start_line":402,"start_character":43,"end_line":402,"end_character":52},"updated":"2017-06-05 19:20:56.000000000","message":"x","commit_id":"1755f7c49421f00e941de6a9893b85882ae658a0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5c21dac60769590bcb312c25272d880762a464c8","unresolved":false,"context_lines":[{"line_number":419,"context_line":"        \"\"\"Adds access to LUN for initiator\u0027s ip/iqn.\"\"\""},{"line_number":420,"context_line":"        try:"},{"line_number":421,"context_line":"            LOG.debug(\"Adding access. hedvig controller: %s, vol name  %s, \""},{"line_number":422,"context_line":"                      \"initiator: %s\", six.text_type(tgtHost),"},{"line_number":423,"context_line":"                      six.text_type(volName), six.text_type(initiator))"},{"line_number":424,"context_line":"            self.hrs.add_access(tgtHost, volName, \"iqn\", initiator)"},{"line_number":425,"context_line":"        except Exception as e:"}],"source_content_type":"text/x-python","patch_set":22,"id":"df140735_b729cd37","line":422,"range":{"start_line":422,"start_character":43,"end_line":422,"end_character":52},"updated":"2017-06-05 19:20:56.000000000","message":"x\n\nAlso, use named formatting args if there are more than one or two values being formatted.","commit_id":"1755f7c49421f00e941de6a9893b85882ae658a0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5c21dac60769590bcb312c25272d880762a464c8","unresolved":false,"context_lines":[{"line_number":442,"context_line":"                      snapshotName, project, snapshotId)"},{"line_number":443,"context_line":"            self.hedvigCreateSnapshot(volName, snapshotId)"},{"line_number":444,"context_line":"        except Exception:"},{"line_number":445,"context_line":"            msg \u003d (\u0027Failed to create snapshot. volName: %(volName)s, \u0027"},{"line_number":446,"context_line":"                   \u0027snapshotName: %(snapshotName)s, project: %(project)s, \u0027"},{"line_number":447,"context_line":"                   \u0027snapshotId: %(snapshotId)s\u0027,"},{"line_number":448,"context_line":"                   {\u0027volName\u0027: volName,"}],"source_content_type":"text/x-python","patch_set":22,"id":"df140735_3715bde5","line":445,"range":{"start_line":445,"start_character":12,"end_line":445,"end_character":15},"updated":"2017-06-05 19:20:56.000000000","message":"x","commit_id":"1755f7c49421f00e941de6a9893b85882ae658a0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5c21dac60769590bcb312c25272d880762a464c8","unresolved":false,"context_lines":[{"line_number":459,"context_line":"                   \u0027attachment\u0027: attachment})"},{"line_number":460,"context_line":"        return"},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"    def hedvigCreateSnapshot(self, vDiskName, snapshotId):"},{"line_number":463,"context_line":"        \"\"\"Hedvig call to create snapshot of vdisk.\"\"\""},{"line_number":464,"context_line":"        LOG.debug(\"Creating snapshot...\")"},{"line_number":465,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":22,"id":"df140735_b7ac2d9f","line":462,"range":{"start_line":462,"start_character":8,"end_line":462,"end_character":28},"updated":"2017-06-05 19:20:56.000000000","message":"Would be better to stick with Python naming conventions.","commit_id":"1755f7c49421f00e941de6a9893b85882ae658a0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5c21dac60769590bcb312c25272d880762a464c8","unresolved":false,"context_lines":[{"line_number":482,"context_line":"            self.hrs.delete_snapshot(six.text_type(snapshotName),"},{"line_number":483,"context_line":"                                     volName, snapshotId)"},{"line_number":484,"context_line":"        except Exception:"},{"line_number":485,"context_line":"            msg \u003d (\u0027Failed to delete snapshot: %s\u0027, snapshotName)"},{"line_number":486,"context_line":"            LOG.error(msg)"},{"line_number":487,"context_line":"            raise exception.HedvigDriverException()"},{"line_number":488,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"df140735_77cd7583","line":485,"range":{"start_line":485,"start_character":12,"end_line":485,"end_character":15},"updated":"2017-06-05 19:20:56.000000000","message":"x","commit_id":"1755f7c49421f00e941de6a9893b85882ae658a0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5c21dac60769590bcb312c25272d880762a464c8","unresolved":false,"context_lines":[{"line_number":503,"context_line":"            volumeType \u003d api.volume_type_get(self.context_, volumeTypeId)"},{"line_number":504,"context_line":"            LOG.debug(\"Volume type is: %s\", volumeType)"},{"line_number":505,"context_line":"        except Exception:"},{"line_number":506,"context_line":"            msg \u003d (\u0027Failed to retrieve volume type details for id: %s\u0027,"},{"line_number":507,"context_line":"                   volumeTypeId)"},{"line_number":508,"context_line":"            LOG.error(msg)"},{"line_number":509,"context_line":"            raise exception.HedvigDriverException()"}],"source_content_type":"text/x-python","patch_set":22,"id":"df140735_57c83172","line":506,"range":{"start_line":506,"start_character":12,"end_line":506,"end_character":15},"updated":"2017-06-05 19:20:56.000000000","message":"x","commit_id":"1755f7c49421f00e941de6a9893b85882ae658a0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5c21dac60769590bcb312c25272d880762a464c8","unresolved":false,"context_lines":[{"line_number":637,"context_line":"            volName,"},{"line_number":638,"context_line":"            name,"},{"line_number":639,"context_line":"            description,"},{"line_number":640,"context_line":"            size,"},{"line_number":641,"context_line":"            openstackSID):"},{"line_number":642,"context_line":"        LOG.debug(\"Cloning a snapshot. snapshotName: %s, name: %s, \""},{"line_number":643,"context_line":"                  \"description: %s\", volName, name,"}],"source_content_type":"text/x-python","patch_set":22,"id":"df140735_77a0d590","line":640,"range":{"start_line":640,"start_character":12,"end_line":640,"end_character":16},"updated":"2017-06-05 19:20:56.000000000","message":"I don\u0027t see where size is being used.","commit_id":"1755f7c49421f00e941de6a9893b85882ae658a0"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"905ff20180f25c61d59510fba0fb198df16a31f5","unresolved":false,"context_lines":[{"line_number":497,"context_line":"                                value)"},{"line_number":498,"context_line":"                            if val is not None:"},{"line_number":499,"context_line":"                                vDiskInfo[\u0027deduplication\u0027] \u003d val"},{"line_number":500,"context_line":"                        if \"compressed_enable\" in key:"},{"line_number":501,"context_line":"                            val \u003d config.Config.parse_and_get_boolean_entry("},{"line_number":502,"context_line":"                                value)"},{"line_number":503,"context_line":"                            if val is not None:"}],"source_content_type":"text/x-python","patch_set":23,"id":"5f2577a7_5dd0fe1f","line":500,"range":{"start_line":500,"start_character":24,"end_line":500,"end_character":26},"updated":"2017-09-12 21:34:35.000000000","message":"elif instead of if?","commit_id":"2634a361be8e927b0d9ac026c0867927fcf1535a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ae1219b74d8ccabc292c207941d78df16bcfff49","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from cinder.volume.drivers.hedvig import rest_client"},{"line_number":30,"context_line":"from cinder.volume.drivers.san import san"},{"line_number":31,"context_line":"from cinder.volume import qos_specs"},{"line_number":32,"context_line":"from oslo_log import log as logging"},{"line_number":33,"context_line":"from oslo_utils import units"},{"line_number":34,"context_line":"import six"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"5f4e5783_a8901397","line":34,"range":{"start_line":32,"start_character":0,"end_line":34,"end_character":10},"updated":"2017-10-10 02:05:42.000000000","message":"These should be in a separate third party import group before the local cinder imports.","commit_id":"ac0757116134ddc7442546e426cf8b496acbb1b1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ae1219b74d8ccabc292c207941d78df16bcfff49","unresolved":false,"context_lines":[{"line_number":40,"context_line":"class HedvigISCSIDriver(driver.ISCSIDriver, san.SanDriver):"},{"line_number":41,"context_line":"    \"\"\"OpenStack Cinder driver to enable Hedvig storage."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    Version history:"},{"line_number":44,"context_line":"    1.0 - Initial driver"},{"line_number":45,"context_line":"    \"\"\""},{"line_number":46,"context_line":"    DEFAULT_VOL_SIZE_IN_GB \u003d 1"}],"source_content_type":"text/x-python","patch_set":26,"id":"5f4e5783_68d1fb57","line":43,"updated":"2017-10-10 02:05:42.000000000","message":"You may want to format this like here:\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/dell_emc/vnx/driver.py#L37\n\nSo it shows up nice and formatted like here:\n\nhttps://docs.openstack.org/cinder/latest/drivers.html#vnxdriver","commit_id":"ac0757116134ddc7442546e426cf8b496acbb1b1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ae1219b74d8ccabc292c207941d78df16bcfff49","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        for attr in required_config:"},{"line_number":66,"context_line":"            if not getattr(self.configuration, attr, None):"},{"line_number":67,"context_line":"                msg \u003d _(\u0027Hedvig params are not set. \u0027"},{"line_number":68,"context_line":"                        \u0027Refer Hedvig cinder setup documentation\u0027)"},{"line_number":69,"context_line":"                raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def do_setup(self, context):"}],"source_content_type":"text/x-python","patch_set":26,"id":"5f4e5783_a8bed3fc","line":68,"range":{"start_line":68,"start_character":25,"end_line":68,"end_character":30},"updated":"2017-10-10 02:05:42.000000000","message":"Refer to","commit_id":"ac0757116134ddc7442546e426cf8b496acbb1b1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ae1219b74d8ccabc292c207941d78df16bcfff49","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        LOG.debug(\"context: %s, volume: %s, properties: %s\", context,"},{"line_number":169,"context_line":"                  volume, properties)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def remove_export(self, context, volume):"},{"line_number":172,"context_line":"        \"\"\"Driver entry point to remove an export for a volume."},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        Irrelevant for Hedvig. Export should be deleted on detachment."}],"source_content_type":"text/x-python","patch_set":26,"id":"5f4e5783_685fbbe5","line":171,"range":{"start_line":171,"start_character":15,"end_line":171,"end_character":21},"updated":"2017-10-10 02:05:42.000000000","message":"All of these \"export\" ones could just be removed.","commit_id":"ac0757116134ddc7442546e426cf8b496acbb1b1"},{"author":{"_account_id":20395,"name":"suhani gupta","email":"suhani@hedviginc.com","username":"suhani"},"change_message_id":"7acaacca593030d93fb801968954d87a348d527b","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        LOG.debug(\"context: %s, volume: %s, properties: %s\", context,"},{"line_number":169,"context_line":"                  volume, properties)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def remove_export(self, context, volume):"},{"line_number":172,"context_line":"        \"\"\"Driver entry point to remove an export for a volume."},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        Irrelevant for Hedvig. Export should be deleted on detachment."}],"source_content_type":"text/x-python","patch_set":26,"id":"5f4e5783_6fa898da","line":171,"range":{"start_line":171,"start_character":15,"end_line":171,"end_character":21},"in_reply_to":"5f4e5783_685fbbe5","updated":"2017-10-16 18:53:06.000000000","message":"These cannot be removed as needed to be overloaded else we get an error saying not implemented.","commit_id":"ac0757116134ddc7442546e426cf8b496acbb1b1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ae1219b74d8ccabc292c207941d78df16bcfff49","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        to _get_iscsi_properties."},{"line_number":186,"context_line":"        Example return value:"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"            {"},{"line_number":189,"context_line":"                \u0027driver_volume_type\u0027: \u0027iscsi\u0027"},{"line_number":190,"context_line":"                \u0027data\u0027: {"},{"line_number":191,"context_line":"                    \u0027target_discovered\u0027: True,"}],"source_content_type":"text/x-python","patch_set":26,"id":"5f4e5783_48099fdb","line":188,"range":{"start_line":188,"start_character":8,"end_line":188,"end_character":12},"updated":"2017-10-10 02:05:42.000000000","message":"This appears to be what is causing the doc warning message (that is treated as an error and causes the job to fail).\n\nI don\u0027t know off hand the correct format, but maybe if you get rid of the leading blank line? Seems to work here:\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/dell_emc/vnx/driver.py#L173","commit_id":"ac0757116134ddc7442546e426cf8b496acbb1b1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ae1219b74d8ccabc292c207941d78df16bcfff49","unresolved":false,"context_lines":[{"line_number":231,"context_line":"            LOG.debug(\" calling add access with %s : %s : %s \", tgtHost,"},{"line_number":232,"context_line":"                      volName, controller_host_iqn)"},{"line_number":233,"context_line":"            self.hedvig_add_access(tgtHost, volName, controller_host_iqn)"},{"line_number":234,"context_line":"            targetName \u003d self.DEAFAULT_TARGET_NAME + tgtHost + \"-\" + six.\\"},{"line_number":235,"context_line":"                text_type(lunnum)"},{"line_number":236,"context_line":"            portal \u003d socket.gethostbyname(tgtHost) + \":\" + six.text_type("},{"line_number":237,"context_line":"                self.DEFAULT_ISCSI_PORT)"}],"source_content_type":"text/x-python","patch_set":26,"id":"5f4e5783_4832bfa9","line":234,"range":{"start_line":234,"start_character":73,"end_line":234,"end_character":74},"updated":"2017-10-10 02:05:42.000000000","message":"Please don\u0027t use \\ to span multiple lines. And really would be best to use string formatting rather that concatenating strings (i.e. \"%s%s-%s\" % (val1, val2, val3) rather than val1 + val2 + \"-\" + val3).\n\ns/DEAFAULT_TARGET_NAME/DEFAULT_TARGET_NAME/","commit_id":"ac0757116134ddc7442546e426cf8b496acbb1b1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ae1219b74d8ccabc292c207941d78df16bcfff49","unresolved":false,"context_lines":[{"line_number":233,"context_line":"            self.hedvig_add_access(tgtHost, volName, controller_host_iqn)"},{"line_number":234,"context_line":"            targetName \u003d self.DEAFAULT_TARGET_NAME + tgtHost + \"-\" + six.\\"},{"line_number":235,"context_line":"                text_type(lunnum)"},{"line_number":236,"context_line":"            portal \u003d socket.gethostbyname(tgtHost) + \":\" + six.text_type("},{"line_number":237,"context_line":"                self.DEFAULT_ISCSI_PORT)"},{"line_number":238,"context_line":"            iscsi_properties \u003d ({\u0027target_discovered\u0027: True,"},{"line_number":239,"context_line":"                                 \u0027target_iqn\u0027: targetName,"}],"source_content_type":"text/x-python","patch_set":26,"id":"5f4e5783_e8204b4c","line":236,"range":{"start_line":236,"start_character":57,"end_line":236,"end_character":58},"updated":"2017-10-10 02:05:42.000000000","message":"Same comment here and throughout about string formatting vs concatenation.","commit_id":"ac0757116134ddc7442546e426cf8b496acbb1b1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ae1219b74d8ccabc292c207941d78df16bcfff49","unresolved":false,"context_lines":[{"line_number":239,"context_line":"                                 \u0027target_iqn\u0027: targetName,"},{"line_number":240,"context_line":"                                 \u0027target_portal\u0027: portal,"},{"line_number":241,"context_line":"                                 \u0027target_lun\u0027: lunnum})"},{"line_number":242,"context_line":"            LOG.debug(\"volName: %s, connector: %s, iscsi_properties: %s\","},{"line_number":243,"context_line":"                      volName, connector, iscsi_properties)"},{"line_number":244,"context_line":"            return {\u0027driver_volume_type\u0027: \u0027iscsi\u0027, \u0027data\u0027: iscsi_properties}"},{"line_number":245,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":26,"id":"5f4e5783_28dc2345","line":242,"range":{"start_line":242,"start_character":69,"end_line":242,"end_character":71},"updated":"2017-10-10 02:05:42.000000000","message":"Please use named values when you have more than two substitutions. A few instances throughout.","commit_id":"ac0757116134ddc7442546e426cf8b496acbb1b1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ae1219b74d8ccabc292c207941d78df16bcfff49","unresolved":false,"context_lines":[{"line_number":243,"context_line":"                      volName, connector, iscsi_properties)"},{"line_number":244,"context_line":"            return {\u0027driver_volume_type\u0027: \u0027iscsi\u0027, \u0027data\u0027: iscsi_properties}"},{"line_number":245,"context_line":"        except Exception:"},{"line_number":246,"context_line":"            LOG.error(\u0027Volume assignment to connect failed.\u0027"},{"line_number":247,"context_line":"                      \u0027volume: %(volume)s, connector: %(connector)s\u0027,"},{"line_number":248,"context_line":"                      {\u0027volume\u0027: volume, \u0027connector\u0027: connector})"},{"line_number":249,"context_line":"            raise exception.HedvigDriverException()"}],"source_content_type":"text/x-python","patch_set":26,"id":"5f4e5783_881797ee","line":246,"range":{"start_line":246,"start_character":59,"end_line":246,"end_character":60},"updated":"2017-10-10 02:05:42.000000000","message":"Missing space on the end.","commit_id":"ac0757116134ddc7442546e426cf8b496acbb1b1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ae1219b74d8ccabc292c207941d78df16bcfff49","unresolved":false,"context_lines":[{"line_number":249,"context_line":"            raise exception.HedvigDriverException()"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":252,"context_line":"        \"\"\"Driver entry point to detach volume from instance."},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        \"\"\""},{"line_number":255,"context_line":"        LOG.debug(\"Terminating connection. volume: %s, connector: %s\","}],"source_content_type":"text/x-python","patch_set":26,"id":"5f4e5783_a8eff3e7","line":252,"range":{"start_line":252,"start_character":60,"end_line":252,"end_character":61},"updated":"2017-10-10 02:05:42.000000000","message":"For single line docstrings end on one line with \"\"\".","commit_id":"ac0757116134ddc7442546e426cf8b496acbb1b1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ae1219b74d8ccabc292c207941d78df16bcfff49","unresolved":false,"context_lines":[{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    def hedvig_delete_lun(self, tgtHost, vDiskName,"},{"line_number":301,"context_line":"                          lunnum):"},{"line_number":302,"context_line":"        LOG.debug(\"Deleting lun. hedvig controller: %s, vDiskName: %s,\""},{"line_number":303,"context_line":"                  \"lun: %s\", tgtHost, vDiskName, lunnum)"},{"line_number":304,"context_line":"        self.hrs.unmap_lun(tgtHost, vDiskName)"},{"line_number":305,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"5f4e5783_889af76b","line":302,"range":{"start_line":302,"start_character":70,"end_line":302,"end_character":71},"updated":"2017-10-10 02:05:42.000000000","message":"Need trailing space.","commit_id":"ac0757116134ddc7442546e426cf8b496acbb1b1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ae1219b74d8ccabc292c207941d78df16bcfff49","unresolved":false,"context_lines":[{"line_number":318,"context_line":"                return lunNo"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"            # If the lun is not found, add lun for the vdisk"},{"line_number":321,"context_line":"            LOG.debug(\"calling add lun on taget : %s vdisk %s  \", tgtHost,"},{"line_number":322,"context_line":"                      vDiskName)"},{"line_number":323,"context_line":"            self.hrs.add_lun(tgtHost, vDiskName, False)"},{"line_number":324,"context_line":"            lunNo \u003d self.hrs.get_lun(tgtHost, vDiskName)"}],"source_content_type":"text/x-python","patch_set":26,"id":"5f4e5783_28830307","line":321,"range":{"start_line":321,"start_character":61,"end_line":321,"end_character":63},"updated":"2017-10-10 02:05:42.000000000","message":"Extra space.","commit_id":"ac0757116134ddc7442546e426cf8b496acbb1b1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ae1219b74d8ccabc292c207941d78df16bcfff49","unresolved":false,"context_lines":[{"line_number":350,"context_line":"                \u0027volName: %(volName)s, initiator: %(initiator)s\u0027, {"},{"line_number":351,"context_line":"                    \u0027controller\u0027: tgtHost, \u0027volName\u0027: volName,"},{"line_number":352,"context_line":"                    \u0027initiator\u0027: initiator})"},{"line_number":353,"context_line":"            raise e"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"    def create_snapshot(self, snapshot):"},{"line_number":356,"context_line":"        \"\"\"Driver entry point for creating a snapshot.\"\"\""}],"source_content_type":"text/x-python","patch_set":26,"id":"5f4e5783_0888471d","line":353,"range":{"start_line":353,"start_character":12,"end_line":353,"end_character":19},"updated":"2017-10-10 02:05:42.000000000","message":"Should just be \"raise\", not \"raise e\".","commit_id":"ac0757116134ddc7442546e426cf8b496acbb1b1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ae1219b74d8ccabc292c207941d78df16bcfff49","unresolved":false,"context_lines":[{"line_number":378,"context_line":"                  \u0027volume: %(volume)s, attachment: %(attachment)s\u0027,"},{"line_number":379,"context_line":"                  {\u0027context\u0027: context, \u0027volume\u0027: volume,"},{"line_number":380,"context_line":"                   \u0027attachment\u0027: attachment})"},{"line_number":381,"context_line":"        return"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"    def hedvig_create_snapshot(self, vDiskName, snapshotId):"},{"line_number":384,"context_line":"        \"\"\"Hedvig call to create snapshot of vdisk.\"\"\""}],"source_content_type":"text/x-python","patch_set":26,"id":"5f4e5783_a876d33d","line":381,"range":{"start_line":381,"start_character":8,"end_line":381,"end_character":14},"updated":"2017-10-10 02:05:42.000000000","message":"Not needed.","commit_id":"ac0757116134ddc7442546e426cf8b496acbb1b1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ae1219b74d8ccabc292c207941d78df16bcfff49","unresolved":false,"context_lines":[{"line_number":385,"context_line":"        LOG.debug(\"Creating snapshot...\")"},{"line_number":386,"context_line":"        try:"},{"line_number":387,"context_line":"            snapshotName \u003d self.hrs.create_snapshot(vDiskName, snapshotId)"},{"line_number":388,"context_line":"            LOG.debug(\"Receieved snapshotName %s from rest call \","},{"line_number":389,"context_line":"                      snapshotName)"},{"line_number":390,"context_line":"            return snapshotName"},{"line_number":391,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":26,"id":"5f4e5783_88c1d731","line":388,"range":{"start_line":388,"start_character":63,"end_line":388,"end_character":64},"updated":"2017-10-10 02:05:42.000000000","message":"Extra space.","commit_id":"ac0757116134ddc7442546e426cf8b496acbb1b1"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"c50c47e2e701ab63960d3de5afb701a64fa04c5b","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"\"\"\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import six"},{"line_number":22,"context_line":"import socket"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from oslo_log import log as logging"}],"source_content_type":"text/x-python","patch_set":27,"id":"3f4b6375_e5be22fe","line":21,"updated":"2017-10-18 18:14:53.000000000","message":"\"six\" belongs in the oslo group of imports here since it isn\u0027t a built-in python lib.\n\nhttps://docs.openstack.org/hacking/latest/user/hacking.html#imports","commit_id":"d3a2e90f87ab6ad2261f125cce6d61873e3f9c39"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"61408770599319d72db9ce4bbf02b86e47886717","unresolved":false,"context_lines":[{"line_number":41,"context_line":"class HedvigISCSIDriver(driver.ISCSIDriver, san.SanDriver):"},{"line_number":42,"context_line":"    \"\"\"OpenStack Cinder driver to enable Hedvig storage."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    Version history:"},{"line_number":45,"context_line":"        1.0 - Initial driver"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    \"\"\""},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"df87a7cf_fbf84f7d","line":45,"range":{"start_line":44,"start_character":0,"end_line":45,"end_character":28},"updated":"2017-12-01 19:54:14.000000000","message":"THis should be in \u0027.. code-block:: none\u0027","commit_id":"c7f91f7c50c6b33e5f1051a3458dc833215b44d9"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"61408770599319d72db9ce4bbf02b86e47886717","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        for attr in required_config:"},{"line_number":69,"context_line":"            if not getattr(self.configuration, attr, None):"},{"line_number":70,"context_line":"                msg \u003d _(\u0027Hedvig params are not set. \u0027"},{"line_number":71,"context_line":"                        \u0027Refer to Hedvig cinder setup documentation\u0027)"},{"line_number":72,"context_line":"                raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def do_setup(self, context):"}],"source_content_type":"text/x-python","patch_set":31,"id":"df87a7cf_9b1823d4","line":71,"range":{"start_line":71,"start_character":66,"end_line":71,"end_character":68},"updated":"2017-12-01 19:54:14.000000000","message":"suggest \u0027.\u0027 at EOL.","commit_id":"c7f91f7c50c6b33e5f1051a3458dc833215b44d9"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"61408770599319d72db9ce4bbf02b86e47886717","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                                          self.san_login,"},{"line_number":85,"context_line":"                                          self.san_password,"},{"line_number":86,"context_line":"                                          self.san_clustername)"},{"line_number":87,"context_line":"        LOG.info(\"Initialization complete\")"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def get_volume_stats(self, refresh\u003dFalse):"},{"line_number":90,"context_line":"        # we need to get get stats for server."}],"source_content_type":"text/x-python","patch_set":31,"id":"df87a7cf_9b7d83e9","line":87,"range":{"start_line":87,"start_character":39,"end_line":87,"end_character":42},"updated":"2017-12-01 19:54:14.000000000","message":"suggest \u0027.\u0027 at EOL.","commit_id":"c7f91f7c50c6b33e5f1051a3458dc833215b44d9"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"61408770599319d72db9ce4bbf02b86e47886717","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def create_volume(self, volume):"},{"line_number":117,"context_line":"        \"\"\"Driver entry point for creating a new volume.\"\"\""},{"line_number":118,"context_line":"        LOG.debug(\"Creating new volume: %s\", volume)"},{"line_number":119,"context_line":"        name, description, size \u003d self.get_hedvig_volume_details(volume)"},{"line_number":120,"context_line":"        volumeTypeId \u003d volume[\"volume_type_id\"]"},{"line_number":121,"context_line":"        volumeType \u003d None"}],"source_content_type":"text/x-python","patch_set":31,"id":"df87a7cf_1b52d368","line":118,"updated":"2017-12-01 19:54:14.000000000","message":"Need a space here after the doc string.","commit_id":"c7f91f7c50c6b33e5f1051a3458dc833215b44d9"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"61408770599319d72db9ce4bbf02b86e47886717","unresolved":false,"context_lines":[{"line_number":133,"context_line":"                      \"size: %(size)s\", name,"},{"line_number":134,"context_line":"                      description, size)"},{"line_number":135,"context_line":"            self.hedvig_create_virtualdisk(name, description, size, volumeType)"},{"line_number":136,"context_line":"        except Exception:"},{"line_number":137,"context_line":"            LOG.error(\u0027Failed to create volume. name: %(name)s, \u0027"},{"line_number":138,"context_line":"                      \u0027description: %(description)s,\u0027"},{"line_number":139,"context_line":"                      \u0027size: %(size)s\u0027, name, description, size)"}],"source_content_type":"text/x-python","patch_set":31,"id":"df87a7cf_36080e27","line":136,"range":{"start_line":136,"start_character":14,"end_line":136,"end_character":24},"updated":"2017-12-01 19:54:14.000000000","message":"Can you report the exception here rather than just saying something went wrong please?","commit_id":"c7f91f7c50c6b33e5f1051a3458dc833215b44d9"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"61408770599319d72db9ce4bbf02b86e47886717","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def delete_volume(self, volume):"},{"line_number":143,"context_line":"        \"\"\"Driver entry point for deleting volume.\"\"\""},{"line_number":144,"context_line":"        LOG.debug(\"Deleting volume: %s\", volume)"},{"line_number":145,"context_line":"        name \u003d volume[\u0027name\u0027]"},{"line_number":146,"context_line":"        try:"},{"line_number":147,"context_line":"            self.hedvig_delete_virtualdisk(name)"}],"source_content_type":"text/x-python","patch_set":31,"id":"df87a7cf_3621eea0","line":144,"range":{"start_line":144,"start_character":7,"end_line":144,"end_character":48},"updated":"2017-12-01 19:54:14.000000000","message":"Should add spaces after the doc string where ever you don\u0027t have it.","commit_id":"c7f91f7c50c6b33e5f1051a3458dc833215b44d9"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"61408770599319d72db9ce4bbf02b86e47886717","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        \"\"\"Driver entry point to attach a volume to an instance."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        Assign any created volume to a compute node/controllerVM so"},{"line_number":186,"context_line":"        that it can be attached to a instance."},{"line_number":187,"context_line":"        This driver returns a driver_volume_type of \u0027iscsi\u0027."},{"line_number":188,"context_line":"        The format of the driver data is defined as follows -- similar"},{"line_number":189,"context_line":"        to _get_iscsi_properties."}],"source_content_type":"text/x-python","patch_set":31,"id":"df87a7cf_d6468250","line":186,"range":{"start_line":186,"start_character":35,"end_line":186,"end_character":36},"updated":"2017-12-01 19:54:14.000000000","message":"an","commit_id":"c7f91f7c50c6b33e5f1051a3458dc833215b44d9"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"61408770599319d72db9ce4bbf02b86e47886717","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        that it can be attached to a instance."},{"line_number":187,"context_line":"        This driver returns a driver_volume_type of \u0027iscsi\u0027."},{"line_number":188,"context_line":"        The format of the driver data is defined as follows -- similar"},{"line_number":189,"context_line":"        to _get_iscsi_properties."},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"        \"\"\""},{"line_number":192,"context_line":"        LOG.info(\u0027Initializing connection. volume: %(volume)s,\u0027"}],"source_content_type":"text/x-python","patch_set":31,"id":"df87a7cf_d68d227c","line":189,"updated":"2017-12-01 19:54:14.000000000","message":"Really should have doc strings to explain the parameters and return/exceptions for each function.  At least for the externally available calls.","commit_id":"c7f91f7c50c6b33e5f1051a3458dc833215b44d9"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"61408770599319d72db9ce4bbf02b86e47886717","unresolved":false,"context_lines":[{"line_number":235,"context_line":"                      volName, connector, iscsi_properties)"},{"line_number":236,"context_line":"            return {\u0027driver_volume_type\u0027: \u0027iscsi\u0027, \u0027data\u0027: iscsi_properties}"},{"line_number":237,"context_line":"        except Exception:"},{"line_number":238,"context_line":"            LOG.error(\u0027Volume assignment to connect failed.\u0027"},{"line_number":239,"context_line":"                      \u0027volume: %(volume)s, connector: %(connector)s\u0027,"},{"line_number":240,"context_line":"                      {\u0027volume\u0027: volume, \u0027connector\u0027: connector})"},{"line_number":241,"context_line":"            raise exception.HedvigDriverException()"}],"source_content_type":"text/x-python","patch_set":31,"id":"df87a7cf_d65f620c","line":238,"range":{"start_line":238,"start_character":58,"end_line":238,"end_character":60},"updated":"2017-12-01 19:54:14.000000000","message":"missing space at EOL","commit_id":"c7f91f7c50c6b33e5f1051a3458dc833215b44d9"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"61408770599319d72db9ce4bbf02b86e47886717","unresolved":false,"context_lines":[{"line_number":331,"context_line":"    def hedvig_add_access(self, tgtHost, volName, initiator):"},{"line_number":332,"context_line":"        \"\"\"Adds access to LUN for initiator\u0027s ip/iqn.\"\"\""},{"line_number":333,"context_line":"        try:"},{"line_number":334,"context_line":"            LOG.debug(\"Adding access. hedvig controller: %s, vol name  %s, \""},{"line_number":335,"context_line":"                      \"initiator: %s\", tgtHost, volName, initiator)"},{"line_number":336,"context_line":"            self.hrs.add_access(tgtHost, volName, \"iqn\", initiator)"},{"line_number":337,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":31,"id":"df87a7cf_b6e5fe3a","line":334,"range":{"start_line":334,"start_character":67,"end_line":334,"end_character":69},"updated":"2017-12-01 19:54:14.000000000","message":"\u0027missing :\u0027","commit_id":"c7f91f7c50c6b33e5f1051a3458dc833215b44d9"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"61408770599319d72db9ce4bbf02b86e47886717","unresolved":false,"context_lines":[{"line_number":378,"context_line":"                      snapshotName)"},{"line_number":379,"context_line":"            return snapshotName"},{"line_number":380,"context_line":"        except Exception:"},{"line_number":381,"context_line":"            raise exception.HedvigDriverException()"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"    def delete_snapshot(self, snapshot):"},{"line_number":384,"context_line":"        \"\"\"Driver entry point for deleting a snapshot.\"\"\""}],"source_content_type":"text/x-python","patch_set":31,"id":"df87a7cf_763696b7","line":381,"updated":"2017-12-01 19:54:14.000000000","message":"Should have an error to go with this.","commit_id":"c7f91f7c50c6b33e5f1051a3458dc833215b44d9"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"61408770599319d72db9ce4bbf02b86e47886717","unresolved":false,"context_lines":[{"line_number":444,"context_line":"        try:"},{"line_number":445,"context_line":"            name, description, size \u003d self.get_hedvig_volume_details(volume)"},{"line_number":446,"context_line":"            newSize \u003d int(newSize) * units.Gi"},{"line_number":447,"context_line":"            LOG.debug(\u0027Resizing virtual disk. name: %(name)s, \u0027"},{"line_number":448,"context_line":"                      \u0027newSize: %(newSize)s\u0027,"},{"line_number":449,"context_line":"                      {\u0027name\u0027: name, \u0027newSize\u0027: newSize})"},{"line_number":450,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"df87a7cf_b653bee2","line":447,"range":{"start_line":447,"start_character":12,"end_line":447,"end_character":21},"updated":"2017-12-01 19:54:14.000000000","message":"Suggest LOG.info in this case.","commit_id":"c7f91f7c50c6b33e5f1051a3458dc833215b44d9"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"61408770599319d72db9ce4bbf02b86e47886717","unresolved":false,"context_lines":[{"line_number":453,"context_line":"                self.DEFAULT_VOL_SIZE_UNIT,"},{"line_number":454,"context_line":"                newSize / units.Gi)"},{"line_number":455,"context_line":"        except Exception:"},{"line_number":456,"context_line":"            raise exception.HedvigDriverException()"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"    def hedvig_create_virtualdisk(self, name, description, size, volumeType):"},{"line_number":459,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":31,"id":"df87a7cf_96647abb","line":456,"updated":"2017-12-01 19:54:14.000000000","message":"Should have a LOG.error here.","commit_id":"c7f91f7c50c6b33e5f1051a3458dc833215b44d9"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"61408770599319d72db9ce4bbf02b86e47886717","unresolved":false,"context_lines":[{"line_number":529,"context_line":"                                    dcList.append(dataCenter.encode(\u0027utf-8\u0027))"},{"line_number":530,"context_line":"                                vDiskInfo[\u0027dataCenters\u0027] \u003d dcList"},{"line_number":531,"context_line":"            if vDiskInfo[\u0027deduplication\u0027] and vDiskInfo[\u0027compressed\u0027] is False:"},{"line_number":532,"context_line":"                LOG.error(\"cannot create dedup enabled disk \""},{"line_number":533,"context_line":"                          \"without compression enabled\")"},{"line_number":534,"context_line":"                raise exception.HedvigDriverException()"},{"line_number":535,"context_line":"            self.hrs.create_vdisk(vDiskInfo)"}],"source_content_type":"text/x-python","patch_set":31,"id":"df87a7cf_9609dade","line":532,"range":{"start_line":532,"start_character":27,"end_line":532,"end_character":32},"updated":"2017-12-01 19:54:14.000000000","message":"Cannot","commit_id":"c7f91f7c50c6b33e5f1051a3458dc833215b44d9"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"61408770599319d72db9ce4bbf02b86e47886717","unresolved":false,"context_lines":[{"line_number":530,"context_line":"                                vDiskInfo[\u0027dataCenters\u0027] \u003d dcList"},{"line_number":531,"context_line":"            if vDiskInfo[\u0027deduplication\u0027] and vDiskInfo[\u0027compressed\u0027] is False:"},{"line_number":532,"context_line":"                LOG.error(\"cannot create dedup enabled disk \""},{"line_number":533,"context_line":"                          \"without compression enabled\")"},{"line_number":534,"context_line":"                raise exception.HedvigDriverException()"},{"line_number":535,"context_line":"            self.hrs.create_vdisk(vDiskInfo)"},{"line_number":536,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":31,"id":"df87a7cf_f6f706d4","line":533,"range":{"start_line":533,"start_character":51,"end_line":533,"end_character":54},"updated":"2017-12-01 19:54:14.000000000","message":"\u0027.\u0027 at EOL","commit_id":"c7f91f7c50c6b33e5f1051a3458dc833215b44d9"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"b532c97be6e94b70048409dcb8dab46427bdedd3","unresolved":false,"context_lines":[{"line_number":559,"context_line":"                description,"},{"line_number":560,"context_line":"                openstackSID)"},{"line_number":561,"context_line":"        except Exception:"},{"line_number":562,"context_line":"            raise exception.HedvigDriverException()"}],"source_content_type":"text/x-python","patch_set":31,"id":"df7087c5_68d154fb","line":562,"range":{"start_line":562,"start_character":49,"end_line":562,"end_character":51},"updated":"2018-03-12 20:59:53.000000000","message":"All exception calls like this should at least pass some message into the exception.","commit_id":"c7f91f7c50c6b33e5f1051a3458dc833215b44d9"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"61408770599319d72db9ce4bbf02b86e47886717","unresolved":false,"context_lines":[{"line_number":559,"context_line":"                description,"},{"line_number":560,"context_line":"                openstackSID)"},{"line_number":561,"context_line":"        except Exception:"},{"line_number":562,"context_line":"            raise exception.HedvigDriverException()"}],"source_content_type":"text/x-python","patch_set":31,"id":"df87a7cf_3627ae67","line":562,"updated":"2017-12-01 19:54:14.000000000","message":"Should have LOG.error here.","commit_id":"c7f91f7c50c6b33e5f1051a3458dc833215b44d9"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"e3a10c227fb5f65d921578f6a0c740c1b224d370","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            if not getattr(self.configuration, attr, None):"},{"line_number":69,"context_line":"                LOG.error(\u0027Hedvig params are not set. Refer to\u0027"},{"line_number":70,"context_line":"                          \u0027Hedvig cinder setup documentation\u0027)"},{"line_number":71,"context_line":"                raise exception.VolumeDriverException()"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def do_setup(self, context):"},{"line_number":74,"context_line":"        self.context_ \u003d context"}],"source_content_type":"text/x-python","patch_set":39,"id":"5f7c97a3_c4cc518b","line":71,"updated":"2018-05-07 14:49:09.000000000","message":"Should use exception.InvalidConfigurationValue() to better communicate what is failing here.","commit_id":"2dc3da51576f5f64af77d5973d5b3d2b2ec7a574"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"e3a10c227fb5f65d921578f6a0c740c1b224d370","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        \"\"\"Driver entry point for creating a new volume.\"\"\""},{"line_number":117,"context_line":"        LOG.debug(\"Creating new volume: %s\", volume)"},{"line_number":118,"context_line":"        name, description, size \u003d self.get_hedvig_volume_details(volume)"},{"line_number":119,"context_line":"        volumeTypeId \u003d volume[\"volume_type_id\"]"},{"line_number":120,"context_line":"        volumeType \u003d None"},{"line_number":121,"context_line":"        try:"},{"line_number":122,"context_line":"            LOG.debug(\"Retrieving volume type details for id: %s\","}],"source_content_type":"text/x-python","patch_set":39,"id":"5f7c97a3_e4cb8da2","line":119,"updated":"2018-05-07 14:49:09.000000000","message":"Should use the object notation of volume.volume_type_id.","commit_id":"2dc3da51576f5f64af77d5973d5b3d2b2ec7a574"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"e3a10c227fb5f65d921578f6a0c740c1b224d370","unresolved":false,"context_lines":[{"line_number":139,"context_line":"    def delete_volume(self, volume):"},{"line_number":140,"context_line":"        \"\"\"Driver entry point for deleting volume.\"\"\""},{"line_number":141,"context_line":"        LOG.debug(\"Deleting volume: %s\", volume)"},{"line_number":142,"context_line":"        name \u003d volume[\u0027name\u0027]"},{"line_number":143,"context_line":"        try:"},{"line_number":144,"context_line":"            self.hedvig_delete_virtualdisk(name)"},{"line_number":145,"context_line":"        except Exception as e:"}],"source_content_type":"text/x-python","patch_set":39,"id":"5f7c97a3_c447711d","line":142,"updated":"2018-05-07 14:49:09.000000000","message":"Should use the object notation of \"volume.name\".","commit_id":"2dc3da51576f5f64af77d5973d5b3d2b2ec7a574"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"e3a10c227fb5f65d921578f6a0c740c1b224d370","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        LOG.info(\u0027Initializing connection. volume: %s,\u0027"},{"line_number":190,"context_line":"                 \u0027connector: %s\u0027, volume, connector)"},{"line_number":191,"context_line":"        try:"},{"line_number":192,"context_line":"            if volume[\u0027status\u0027] \u003d\u003d \u0027in-use\u0027:"},{"line_number":193,"context_line":"                LOG.error(\u0027Volume is in use.\u0027)"},{"line_number":194,"context_line":"                raise exception.HedvigDriverException()"},{"line_number":195,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"5f7c97a3_c470d175","line":192,"range":{"start_line":192,"start_character":15,"end_line":192,"end_character":31},"updated":"2018-05-07 14:49:09.000000000","message":"volume.status","commit_id":"2dc3da51576f5f64af77d5973d5b3d2b2ec7a574"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"e3a10c227fb5f65d921578f6a0c740c1b224d370","unresolved":false,"context_lines":[{"line_number":198,"context_line":"            computeHost \u003d \u0027\u0027"},{"line_number":199,"context_line":"            if connectorHost !\u003d localHost:"},{"line_number":200,"context_line":"                computeHost \u003d connectorHost"},{"line_number":201,"context_line":"            volName \u003d volume[\u0027name\u0027]"},{"line_number":202,"context_line":"            tgtHost \u003d self.hedvig_lookup_tgt(computeHost)"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"            lunnum \u003d self.hedvig_get_lun(tgtHost, volName)"}],"source_content_type":"text/x-python","patch_set":39,"id":"5f7c97a3_240505c3","line":201,"range":{"start_line":201,"start_character":22,"end_line":201,"end_character":36},"updated":"2018-05-07 14:49:09.000000000","message":"volume.name","commit_id":"2dc3da51576f5f64af77d5973d5b3d2b2ec7a574"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"e3a10c227fb5f65d921578f6a0c740c1b224d370","unresolved":false,"context_lines":[{"line_number":248,"context_line":"            computeHost \u003d \u0027\u0027"},{"line_number":249,"context_line":"            if connectorHost !\u003d localHost:"},{"line_number":250,"context_line":"                computeHost \u003d connectorHost"},{"line_number":251,"context_line":"            volName \u003d volume[\u0027name\u0027]"},{"line_number":252,"context_line":"            tgtHost \u003d self.hedvig_lookup_tgt(computeHost)"},{"line_number":253,"context_line":"            if tgtHost \u003d\u003d \u0027\u0027:"},{"line_number":254,"context_line":"                LOG.error(\u0027Failed to get hedvig controller for compute \u0027"}],"source_content_type":"text/x-python","patch_set":39,"id":"5f7c97a3_440a81d2","line":251,"range":{"start_line":251,"start_character":22,"end_line":251,"end_character":36},"updated":"2018-05-07 14:49:09.000000000","message":"volume.name","commit_id":"2dc3da51576f5f64af77d5973d5b3d2b2ec7a574"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"94c2751af966510363dea0924715cc1103b7eaa8","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from oslo_utils import units"},{"line_number":25,"context_line":"import six"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"from cinder.db.sqlalchemy import api"},{"line_number":28,"context_line":"from cinder import exception"},{"line_number":29,"context_line":"from cinder import interface"},{"line_number":30,"context_line":"from cinder.volume import driver"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_19f3d9a0","line":27,"range":{"start_line":27,"start_character":33,"end_line":27,"end_character":36},"updated":"2018-07-10 13:49:52.000000000","message":"Remove","commit_id":"ccbed2e08e8048d726ffbdee858a69821b721279"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"94c2751af966510363dea0924715cc1103b7eaa8","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        try:"},{"line_number":122,"context_line":"            LOG.debug(\"Retrieving volume type details for id: %s\","},{"line_number":123,"context_line":"                      volumeTypeId)"},{"line_number":124,"context_line":"            volumeType \u003d api.volume_type_get(self.context_, volumeTypeId)"},{"line_number":125,"context_line":"            LOG.debug(\"Volume type is: %s\", volumeType)"},{"line_number":126,"context_line":"        except Exception:"},{"line_number":127,"context_line":"            LOG.error(\u0027Failed to retrieve volume type details for id: %s\u0027,"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_d9cfa151","line":124,"range":{"start_line":124,"start_character":12,"end_line":124,"end_character":73},"updated":"2018-07-10 13:49:52.000000000","message":"You can just reference volume.volume_type.","commit_id":"ccbed2e08e8048d726ffbdee858a69821b721279"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"94c2751af966510363dea0924715cc1103b7eaa8","unresolved":false,"context_lines":[{"line_number":417,"context_line":"        try:"},{"line_number":418,"context_line":"            LOG.debug(\"Retrieving volume type details for id: %s\","},{"line_number":419,"context_line":"                      volumeTypeId)"},{"line_number":420,"context_line":"            volumeType \u003d api.volume_type_get(self.context_, volumeTypeId)"},{"line_number":421,"context_line":"            LOG.debug(\"Volume type is: %s\", volumeType)"},{"line_number":422,"context_line":"        except Exception:"},{"line_number":423,"context_line":"            LOG.error(\u0027Failed to retrieve volume type details for id: %s\u0027,"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_f9f7fd8a","line":420,"updated":"2018-07-10 13:49:52.000000000","message":"volume.volume_type","commit_id":"ccbed2e08e8048d726ffbdee858a69821b721279"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from oslo_utils import units"},{"line_number":25,"context_line":"import six"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"from cinder.db.sqlalchemy import api"},{"line_number":28,"context_line":"from cinder import exception"},{"line_number":29,"context_line":"from cinder import interface"},{"line_number":30,"context_line":"from cinder.volume import driver"}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_27b50bf1","line":27,"updated":"2018-11-01 19:25:44.000000000","message":"Driver should not be making DB calls directly.","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    DEFAULT_VOL_SIZE_IN_GB \u003d 1"},{"line_number":49,"context_line":"    DEFAULT_VOL_BLOCK_SIZE \u003d 4 * units.Ki"},{"line_number":50,"context_line":"    DEFAULT_CREATEDBY \u003d \"Openstack\""},{"line_number":51,"context_line":"    DEFAULT_EXPORT_BLK_SIZE \u003d 512"},{"line_number":52,"context_line":"    DEFAULT_VOL_SIZE_UNIT \u003d \"GB\""},{"line_number":53,"context_line":"    DEFAULT_CAPACITY \u003d units.Ki"}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_74008f04","line":50,"range":{"start_line":50,"start_character":29,"end_line":50,"end_character":30},"updated":"2018-11-01 19:25:44.000000000","message":"S","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    DEFAULT_CREATEDBY \u003d \"Openstack\""},{"line_number":51,"context_line":"    DEFAULT_EXPORT_BLK_SIZE \u003d 512"},{"line_number":52,"context_line":"    DEFAULT_VOL_SIZE_UNIT \u003d \"GB\""},{"line_number":53,"context_line":"    DEFAULT_CAPACITY \u003d units.Ki"},{"line_number":54,"context_line":"    DEFAULT_ISCSI_PORT \u003d 3260"},{"line_number":55,"context_line":"    DEFAULT_TARGET_NAME \u003d \"iqn.2012-05.com.hedvig:storage.\""},{"line_number":56,"context_line":"    VERSION \u003d \"1.0.0\""}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_4774c79b","line":53,"range":{"start_line":53,"start_character":29,"end_line":53,"end_character":31},"updated":"2018-11-01 19:25:44.000000000","message":"Everything in Cinder works in units of GB. get_volume_stats should not return this for capacity.","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":66,"context_line":"                           \u0027san_clustername\u0027]"},{"line_number":67,"context_line":"        for attr in required_config:"},{"line_number":68,"context_line":"            if not getattr(self.configuration, attr, None):"},{"line_number":69,"context_line":"                LOG.error(\u0027Hedvig params are not set. Refer to\u0027"},{"line_number":70,"context_line":"                          \u0027Hedvig cinder setup documentation\u0027)"},{"line_number":71,"context_line":"                raise exception.InvalidConfigurationValue()"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_47fda705","line":69,"range":{"start_line":69,"start_character":62,"end_line":69,"end_character":63},"updated":"2018-11-01 19:25:44.000000000","message":"Missing space at the end.","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            if not getattr(self.configuration, attr, None):"},{"line_number":69,"context_line":"                LOG.error(\u0027Hedvig params are not set. Refer to\u0027"},{"line_number":70,"context_line":"                          \u0027Hedvig cinder setup documentation\u0027)"},{"line_number":71,"context_line":"                raise exception.InvalidConfigurationValue()"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def do_setup(self, context):"},{"line_number":74,"context_line":"        self.context_ \u003d context"}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_c708d726","line":71,"updated":"2018-11-01 19:25:44.000000000","message":"Need to provide \u0027value\u0027 and \u0027option\u0027 values for InvalidConfigurationValue exception initialization.","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        LOG.info(\u0027Initializing hedvig cinder driver with \u0027"},{"line_number":81,"context_line":"                 \u0027server: %s\u0027, self.san_ip)"},{"line_number":82,"context_line":"        self.hrs \u003d rest_client.RestClient(self.san_ip,"},{"line_number":83,"context_line":"                                          self.san_login,"},{"line_number":84,"context_line":"                                          self.san_password,"},{"line_number":85,"context_line":"                                          self.san_clustername)"}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_67430342","line":82,"updated":"2018-11-01 19:25:44.000000000","message":"Might be good to validate this connection in check_for_setup_error(). Most of this should probably move there.","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def get_volume_stats(self, refresh\u003dFalse):"},{"line_number":89,"context_line":"        # we need to get get stats for server."},{"line_number":90,"context_line":"        total_capacity \u003d HedvigISCSIDriver.DEFAULT_CAPACITY"},{"line_number":91,"context_line":"        free_capacity \u003d total_capacity"},{"line_number":92,"context_line":"        self.group_stats \u003d {\"volume_backend_name\": \"hedvig\","},{"line_number":93,"context_line":"                            \"vendor_name\": \"Hedvig Inc\","}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_27942b98","line":90,"updated":"2018-11-01 19:25:44.000000000","message":"These results need to be pulled from the actual storage, not hard coded to a fake value.\n\nBest practice then is to cache those values and only refetch them if the \u0027refresh\u0027 kwarg is True.","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        # we need to get get stats for server."},{"line_number":90,"context_line":"        total_capacity \u003d HedvigISCSIDriver.DEFAULT_CAPACITY"},{"line_number":91,"context_line":"        free_capacity \u003d total_capacity"},{"line_number":92,"context_line":"        self.group_stats \u003d {\"volume_backend_name\": \"hedvig\","},{"line_number":93,"context_line":"                            \"vendor_name\": \"Hedvig Inc\","},{"line_number":94,"context_line":"                            \"driver_version\": self.VERSION,"},{"line_number":95,"context_line":"                            \"storage_protocol\": \"iSCSI\","}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_87ae5fe2","line":92,"range":{"start_line":92,"start_character":52,"end_line":92,"end_character":58},"updated":"2018-11-01 19:25:44.000000000","message":"This might not be what they have configured as the backend name. That should be fetched from the config with:\n\nself.configuration.safe_get(\u0027volume_backend_name\u0027)","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        return self.group_stats"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def get_hedvig_volume_details(self, volume):"},{"line_number":103,"context_line":"        volName \u003d volume.get(\u0027name\u0027, \u0027\u0027)"},{"line_number":104,"context_line":"        project \u003d volume.get(\u0027project_id\u0027, \u0027\u0027)"},{"line_number":105,"context_line":"        displayName \u003d volume.get(\u0027display_name\u0027, \u0027\u0027)"},{"line_number":106,"context_line":"        displayDescription \u003d volume.get(\u0027display_description\u0027, \u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_470367be","line":103,"updated":"2018-11-01 19:25:44.000000000","message":"volume is an object. It has backwards compatible code to behave like a dict, but that may be removed. This should just use \"volume.name\", \"volume.size\", etc.","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        try:"},{"line_number":122,"context_line":"            LOG.debug(\"Retrieving volume type details for id: %s\","},{"line_number":123,"context_line":"                      volumeTypeId)"},{"line_number":124,"context_line":"            volumeType \u003d api.volume_type_get(self.context_, volumeTypeId)"},{"line_number":125,"context_line":"            LOG.debug(\"Volume type is: %s\", volumeType)"},{"line_number":126,"context_line":"        except Exception:"},{"line_number":127,"context_line":"            LOG.error(\u0027Failed to retrieve volume type details for id: %s\u0027,"}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_67c22357","line":124,"range":{"start_line":124,"start_character":29,"end_line":124,"end_character":44},"updated":"2018-11-01 19:25:44.000000000","message":"from cinder.volume import volume_types\n\nextra_specs \u003d volume_types.get_volume_type_extra_specs(type_id)\n\nThen just pass the extra specs to your internal create call.","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":141,"context_line":"            self.hedvig_delete_virtualdisk(name)"},{"line_number":142,"context_line":"        except Exception as e:"},{"line_number":143,"context_line":"            LOG.error(\u0027Failed to delete volume. volume: %s\u0027, volume)"},{"line_number":144,"context_line":"            LOG.error(e.args[0])"},{"line_number":145,"context_line":"            if \u0027TException\u0027 in e.args[0]:"},{"line_number":146,"context_line":"                LOG.error(\"Virtual Disk Does Not Exist On Hedvig\")"},{"line_number":147,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_a776fb3f","line":144,"range":{"start_line":144,"start_character":12,"end_line":144,"end_character":32},"updated":"2018-11-01 19:25:44.000000000","message":"Remove this, change the previous line to use LOG.exception.","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def get_export(self, volume):"},{"line_number":151,"context_line":"        \"\"\"Get the iSCSI export details for a volume.\"\"\""},{"line_number":152,"context_line":"        LOG.debug(\"volume: %s\", volume)"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def ensure_export(self, context, volume):"},{"line_number":155,"context_line":"        \"\"\"Driver entry point to get the export info for an existing volume."}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_6770e342","line":152,"updated":"2018-11-01 19:25:44.000000000","message":"All of these can just use pass instead of logging useless messages.","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":180,"context_line":"                      \u0027volume_id \u003d %(volume)s and src_vol_id \u003d %(src_vol_id)s\u0027,"},{"line_number":181,"context_line":"                      {\u0027volume\u0027: volume.id, \u0027src_vol_id\u0027: src_vref.id})"},{"line_number":182,"context_line":"            name, desc, size \u003d self.get_hedvig_volume_details(volume)"},{"line_number":183,"context_line":"            self.hrs.clone_vdisk(srcVolName\u003dsrc_vref.name, dstVolName\u003dname)"},{"line_number":184,"context_line":"        except Exception as e:"},{"line_number":185,"context_line":"            LOG.error(\u0027Failed to create_cloned_volume\u0027 + e.message +"},{"line_number":186,"context_line":"                      six.text_type(e))"}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_a7c91b53","line":183,"updated":"2018-11-01 19:25:44.000000000","message":"I don\u0027t see size being used anywhere here. The new volume may be requested larger than the original volume size. The driver needs to handle this situation.","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":182,"context_line":"            name, desc, size \u003d self.get_hedvig_volume_details(volume)"},{"line_number":183,"context_line":"            self.hrs.clone_vdisk(srcVolName\u003dsrc_vref.name, dstVolName\u003dname)"},{"line_number":184,"context_line":"        except Exception as e:"},{"line_number":185,"context_line":"            LOG.error(\u0027Failed to create_cloned_volume\u0027 + e.message +"},{"line_number":186,"context_line":"                      six.text_type(e))"},{"line_number":187,"context_line":"            raise exception.HedvigDriverException()"},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_27b18be4","line":185,"range":{"start_line":185,"start_character":55,"end_line":185,"end_character":56},"updated":"2018-11-01 19:25:44.000000000","message":"Use string formatting instead of concatenation.","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":183,"context_line":"            self.hrs.clone_vdisk(srcVolName\u003dsrc_vref.name, dstVolName\u003dname)"},{"line_number":184,"context_line":"        except Exception as e:"},{"line_number":185,"context_line":"            LOG.error(\u0027Failed to create_cloned_volume\u0027 + e.message +"},{"line_number":186,"context_line":"                      six.text_type(e))"},{"line_number":187,"context_line":"            raise exception.HedvigDriverException()"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    def initialize_connection(self, volume, connector):"}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_a7c4bb43","line":186,"range":{"start_line":186,"start_character":22,"end_line":186,"end_character":38},"updated":"2018-11-01 19:25:44.000000000","message":"Drop this and call LOG.exception instead.","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        This driver returns a driver_volume_type of \u0027iscsi\u0027."},{"line_number":195,"context_line":"        The format of the driver data is defined as follows -- similar"},{"line_number":196,"context_line":"        to _get_iscsi_properties."},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"        \"\"\""},{"line_number":199,"context_line":"        LOG.info(\u0027Initializing connection. volume: %s,\u0027"},{"line_number":200,"context_line":"                 \u0027connector: %s\u0027, volume, connector)"}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_c7c69742","line":197,"updated":"2018-11-01 19:25:44.000000000","message":"Remove extra blank line.","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        to _get_iscsi_properties."},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"        \"\"\""},{"line_number":199,"context_line":"        LOG.info(\u0027Initializing connection. volume: %s,\u0027"},{"line_number":200,"context_line":"                 \u0027connector: %s\u0027, volume, connector)"},{"line_number":201,"context_line":"        try:"},{"line_number":202,"context_line":"            connectorHost \u003d socket.getfqdn(connector[\u0027host\u0027])"}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_27ff4b6a","line":199,"range":{"start_line":199,"start_character":54,"end_line":199,"end_character":55},"updated":"2018-11-01 19:25:44.000000000","message":"Missing space at the end.","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":202,"context_line":"            connectorHost \u003d socket.getfqdn(connector[\u0027host\u0027])"},{"line_number":203,"context_line":"            localHost \u003d socket.gethostname()"},{"line_number":204,"context_line":"            computeHost \u003d \u0027\u0027"},{"line_number":205,"context_line":"            if connectorHost !\u003d localHost:"},{"line_number":206,"context_line":"                computeHost \u003d connectorHost"},{"line_number":207,"context_line":"            volName \u003d volume.name"},{"line_number":208,"context_line":"            tgtHost \u003d self.hedvig_lookup_tgt(computeHost)"}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_c7f9b74f","line":205,"updated":"2018-11-01 19:25:44.000000000","message":"Is this ever not going to be true? Otherwise computeHost is going to be an empty string, which doesn\u0027t seem right.","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":207,"context_line":"            volName \u003d volume.name"},{"line_number":208,"context_line":"            tgtHost \u003d self.hedvig_lookup_tgt(computeHost)"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"            lunnum \u003d self.hedvig_get_lun(tgtHost, volName)"},{"line_number":211,"context_line":"            if lunnum \u003d\u003d -1:"},{"line_number":212,"context_line":"                LOG.error(\u0027Failed to get lun for volume: %s, \u0027"},{"line_number":213,"context_line":"                          \u0027hedvig controller: %s\u0027, volume, tgtHost)"}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_270d0b92","line":210,"range":{"start_line":210,"start_character":26,"end_line":210,"end_character":40},"updated":"2018-11-01 19:25:44.000000000","message":"What protects concurrent requests from getting the same LUN?","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":212,"context_line":"                LOG.error(\u0027Failed to get lun for volume: %s, \u0027"},{"line_number":213,"context_line":"                          \u0027hedvig controller: %s\u0027, volume, tgtHost)"},{"line_number":214,"context_line":"                raise exception.HedvigDriverException()"},{"line_number":215,"context_line":"            LOG.debug(\"Received lun num %s\", lunnum)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"            # Addaccess to the mgmt interface addr and iqn of the compute host"},{"line_number":218,"context_line":""}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_a74efbc0","line":215,"updated":"2018-11-01 19:25:44.000000000","message":"lun, portal, and targetName all get logged as part of logging the iscsi_properties at the end, so these individual logging calls should be removed.","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":214,"context_line":"                raise exception.HedvigDriverException()"},{"line_number":215,"context_line":"            LOG.debug(\"Received lun num %s\", lunnum)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"            # Addaccess to the mgmt interface addr and iqn of the compute host"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"            LOG.debug(\" calling add access with %s : %s  : %s \", tgtHost,"},{"line_number":220,"context_line":"                      volName, connector[\u0027initiator\u0027])"}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_a737db4c","line":217,"range":{"start_line":217,"start_character":14,"end_line":217,"end_character":23},"updated":"2018-11-01 19:25:44.000000000","message":"Add access","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":216,"context_line":""},{"line_number":217,"context_line":"            # Addaccess to the mgmt interface addr and iqn of the compute host"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"            LOG.debug(\" calling add access with %s : %s  : %s \", tgtHost,"},{"line_number":220,"context_line":"                      volName, connector[\u0027initiator\u0027])"},{"line_number":221,"context_line":"            self.hedvig_add_access(six.text_type(tgtHost),"},{"line_number":222,"context_line":"                                   six.text_type(volName),"}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_c734574a","line":219,"range":{"start_line":219,"start_character":23,"end_line":219,"end_character":24},"updated":"2018-11-01 19:25:44.000000000","message":"Extra leading space.","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":221,"context_line":"            self.hedvig_add_access(six.text_type(tgtHost),"},{"line_number":222,"context_line":"                                   six.text_type(volName),"},{"line_number":223,"context_line":"                                   six.text_type(connector[\u0027initiator\u0027]))"},{"line_number":224,"context_line":"            # Addaccess to both storage and mgmt interface addrs for"},{"line_number":225,"context_line":"            # iscsi discovery to succeed"},{"line_number":226,"context_line":"            LOG.debug(\" calling hedvig_get_iqn %s\", socket.getfqdn())"},{"line_number":227,"context_line":"            controller_host_iqn \u003d self.hedvig_get_iqn(socket.getfqdn())"}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_e7063375","line":224,"range":{"start_line":224,"start_character":14,"end_line":224,"end_character":23},"updated":"2018-11-01 19:25:44.000000000","message":"Add access","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                                   six.text_type(connector[\u0027initiator\u0027]))"},{"line_number":224,"context_line":"            # Addaccess to both storage and mgmt interface addrs for"},{"line_number":225,"context_line":"            # iscsi discovery to succeed"},{"line_number":226,"context_line":"            LOG.debug(\" calling hedvig_get_iqn %s\", socket.getfqdn())"},{"line_number":227,"context_line":"            controller_host_iqn \u003d self.hedvig_get_iqn(socket.getfqdn())"},{"line_number":228,"context_line":"            LOG.debug(\" calling add access with %s : %s : %s \", tgtHost,"},{"line_number":229,"context_line":"                      volName, controller_host_iqn)"}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_c71d37c0","line":226,"range":{"start_line":226,"start_character":22,"end_line":226,"end_character":24},"updated":"2018-11-01 19:25:44.000000000","message":"Extra leading space.","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":225,"context_line":"            # iscsi discovery to succeed"},{"line_number":226,"context_line":"            LOG.debug(\" calling hedvig_get_iqn %s\", socket.getfqdn())"},{"line_number":227,"context_line":"            controller_host_iqn \u003d self.hedvig_get_iqn(socket.getfqdn())"},{"line_number":228,"context_line":"            LOG.debug(\" calling add access with %s : %s : %s \", tgtHost,"},{"line_number":229,"context_line":"                      volName, controller_host_iqn)"},{"line_number":230,"context_line":"            self.hedvig_add_access(tgtHost, volName, controller_host_iqn)"},{"line_number":231,"context_line":"            LOG.debug(\"add access complete\")"}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_671a23c8","line":228,"range":{"start_line":228,"start_character":23,"end_line":228,"end_character":24},"updated":"2018-11-01 19:25:44.000000000","message":"Extra leading space.","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":230,"context_line":"            self.hedvig_add_access(tgtHost, volName, controller_host_iqn)"},{"line_number":231,"context_line":"            LOG.debug(\"add access complete\")"},{"line_number":232,"context_line":"            targetName \u003d (\"%s%s-%s\" % (self.DEFAULT_TARGET_NAME, tgtHost,"},{"line_number":233,"context_line":"                                       six.text_type(lunnum)))"},{"line_number":234,"context_line":"            LOG.debug(\"targetName %s\", targetName)"},{"line_number":235,"context_line":"            portal \u003d (\"%s:%s\" % (socket.gethostbyname(tgtHost),"},{"line_number":236,"context_line":"                                 six.text_type(self.DEFAULT_ISCSI_PORT)))"}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_e77b93f0","line":233,"range":{"start_line":233,"start_character":39,"end_line":233,"end_character":52},"updated":"2018-11-01 19:25:44.000000000","message":"Not needed since it\u0027s being formatted into a string (%s).","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":233,"context_line":"                                       six.text_type(lunnum)))"},{"line_number":234,"context_line":"            LOG.debug(\"targetName %s\", targetName)"},{"line_number":235,"context_line":"            portal \u003d (\"%s:%s\" % (socket.gethostbyname(tgtHost),"},{"line_number":236,"context_line":"                                 six.text_type(self.DEFAULT_ISCSI_PORT)))"},{"line_number":237,"context_line":"            LOG.debug(\"portal %s\", portal)"},{"line_number":238,"context_line":"            iscsi_properties \u003d ({\u0027target_discovered\u0027: True,"},{"line_number":239,"context_line":"                                 \u0027target_iqn\u0027: targetName,"}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_0781efc2","line":236,"range":{"start_line":236,"start_character":37,"end_line":236,"end_character":46},"updated":"2018-11-01 19:25:44.000000000","message":"Not needed.","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":243,"context_line":"                      volName, connector, iscsi_properties)"},{"line_number":244,"context_line":"            return {\u0027driver_volume_type\u0027: \u0027iscsi\u0027, \u0027data\u0027: iscsi_properties}"},{"line_number":245,"context_line":"        except Exception:"},{"line_number":246,"context_line":"            LOG.error(\u0027Volume assignment to connect failed.\u0027"},{"line_number":247,"context_line":"                      \u0027volume: %s, connector: %s\u0027, volume, connector)"},{"line_number":248,"context_line":"            raise exception.HedvigDriverException()"},{"line_number":249,"context_line":""}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_27c0abf9","line":246,"range":{"start_line":246,"start_character":59,"end_line":246,"end_character":60},"updated":"2018-11-01 19:25:44.000000000","message":"Missing space at the end.","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":253,"context_line":"                  volume, connector)"},{"line_number":254,"context_line":"        try:"},{"line_number":255,"context_line":"            if connector is None:"},{"line_number":256,"context_line":"                LOG.debug(\u0027Connector is not specified. Nothing to do.\u0027)"},{"line_number":257,"context_line":"                return"},{"line_number":258,"context_line":"            connectorHost \u003d socket.getfqdn(connector[\u0027host\u0027])"},{"line_number":259,"context_line":"            localHost \u003d socket.gethostname()"}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_c7d0d7c9","line":256,"range":{"start_line":256,"start_character":16,"end_line":256,"end_character":71},"updated":"2018-11-01 19:25:44.000000000","message":"If connector is not supplied, then it is a force detach call and the volume should be detached from everything.","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":255,"context_line":"            if connector is None:"},{"line_number":256,"context_line":"                LOG.debug(\u0027Connector is not specified. Nothing to do.\u0027)"},{"line_number":257,"context_line":"                return"},{"line_number":258,"context_line":"            connectorHost \u003d socket.getfqdn(connector[\u0027host\u0027])"},{"line_number":259,"context_line":"            localHost \u003d socket.gethostname()"},{"line_number":260,"context_line":"            computeHost \u003d \u0027\u0027"},{"line_number":261,"context_line":"            if connectorHost !\u003d localHost:"},{"line_number":262,"context_line":"                computeHost \u003d connectorHost"},{"line_number":263,"context_line":"            volName \u003d volume.name"},{"line_number":264,"context_line":"            tgtHost \u003d self.hedvig_lookup_tgt(computeHost)"},{"line_number":265,"context_line":"            if tgtHost \u003d\u003d \u0027\u0027:"}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_27e98b81","line":262,"range":{"start_line":258,"start_character":12,"end_line":262,"end_character":43},"updated":"2018-11-01 19:25:44.000000000","message":"This is duplicated. Move this into a common method that can be called from all locations that need it.","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":277,"context_line":"            raise exception.HedvigDriverException()"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    def hedvig_lookup_tgt(self, host):"},{"line_number":280,"context_line":"        \"\"\"Get the tgt instance associated with the compute host."},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"        \"\"\""},{"line_number":283,"context_line":"        LOG.debug(\"Looking up hedvig controller for compute host: %s\","}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_a7811ba4","line":280,"range":{"start_line":280,"start_character":64,"end_line":280,"end_character":65},"updated":"2018-11-01 19:25:44.000000000","message":"Put \"\"\" on the end and get rid of the next two lines.","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        try:"},{"line_number":314,"context_line":"            lunNo \u003d self.hrs.get_lun(tgtHost, vDiskName)"},{"line_number":315,"context_line":"            if lunNo \u003e -1:"},{"line_number":316,"context_line":"                LOG.debug(\"Found lun: %s\", lunNo)"},{"line_number":317,"context_line":"                return lunNo"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"            # If the lun is not found, add lun for the vdisk"}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_87765fd5","line":316,"range":{"start_line":316,"start_character":20,"end_line":316,"end_character":25},"updated":"2018-11-01 19:25:44.000000000","message":"Looks like everywhere this is used checks for -1 and logs if that is the case, so this debug log should be removed.","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":391,"context_line":"            snapshotId \u003d snapshot.id"},{"line_number":392,"context_line":"            LOG.debug(\"Deleting snapshot. volName: %s, snapshotName: %s, \""},{"line_number":393,"context_line":"                      \"project: %s\", volName, snapshotName, project)"},{"line_number":394,"context_line":"            self.hrs.delete_snapshot(six.text_type(snapshotName),"},{"line_number":395,"context_line":"                                     volName, snapshotId)"},{"line_number":396,"context_line":"        except Exception:"},{"line_number":397,"context_line":"            LOG.error(\u0027Failed to delete snapshot: %s\u0027, snapshotName)"}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_272aeb96","line":394,"range":{"start_line":394,"start_character":37,"end_line":394,"end_character":50},"updated":"2018-11-01 19:25:44.000000000","message":"This shouldn\u0027t be necessary.","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":422,"context_line":"            LOG.debug(\u0027Creating volume from snapshot. name: %s,\u0027"},{"line_number":423,"context_line":"                      \u0027 description: %s, srcVolName : %s, snap_id: %s\u0027,"},{"line_number":424,"context_line":"                      name, description, srcVolName, snapshotId)"},{"line_number":425,"context_line":"            self.hedvig_clone_snapshot(name, snapshotId, srcVolName)"},{"line_number":426,"context_line":"        except Exception as e:"},{"line_number":427,"context_line":"            LOG.error(e.args[0])"},{"line_number":428,"context_line":"            LOG.error("}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_a71d9b79","line":425,"updated":"2018-11-01 19:25:44.000000000","message":"Needs to handle requests for a larger size volume.","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":424,"context_line":"                      name, description, srcVolName, snapshotId)"},{"line_number":425,"context_line":"            self.hedvig_clone_snapshot(name, snapshotId, srcVolName)"},{"line_number":426,"context_line":"        except Exception as e:"},{"line_number":427,"context_line":"            LOG.error(e.args[0])"},{"line_number":428,"context_line":"            LOG.error("},{"line_number":429,"context_line":"                \u0027Failed to create volume from snapshot.\u0027"},{"line_number":430,"context_line":"                \u0027snapshotName: %s, name: %s, description: %s, size: %s\u0027,"}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_672783ca","line":427,"updated":"2018-11-01 19:25:44.000000000","message":"Remove this, change the next line to LOG.exception.","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":442,"context_line":"        \"\"\""},{"line_number":443,"context_line":"        try:"},{"line_number":444,"context_line":"            name, description, size \u003d self.get_hedvig_volume_details(volume)"},{"line_number":445,"context_line":"            newSize \u003d int(newSize) * units.Gi"},{"line_number":446,"context_line":"            LOG.debug(\u0027Resizing virtual disk. name: %s, \u0027"},{"line_number":447,"context_line":"                      \u0027newSize: %s\u0027, name, newSize)"},{"line_number":448,"context_line":""}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_a706fb21","line":445,"range":{"start_line":445,"start_character":35,"end_line":445,"end_character":45},"updated":"2018-11-01 19:25:44.000000000","message":"You\u0027re multiplying it just to divide it again later. Remove that.","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":462,"context_line":"                \u0027blockSize\u0027: HedvigISCSIDriver.DEFAULT_VOL_BLOCK_SIZE,"},{"line_number":463,"context_line":"                \u0027size\u0027: size,"},{"line_number":464,"context_line":"                \u0027createdBy\u0027:"},{"line_number":465,"context_line":"                    HedvigISCSIDriver.DEFAULT_CREATEDBY.encode(\u0027utf-8\u0027),"},{"line_number":466,"context_line":"                \u0027description\u0027: description.encode(\u0027utf-8\u0027),"},{"line_number":467,"context_line":"                \u0027residence\u0027: config.Config.DiskResidence[1],"},{"line_number":468,"context_line":"                \u0027replicationFactor\u0027: 3,"}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_87fdff0a","line":465,"range":{"start_line":465,"start_character":56,"end_line":465,"end_character":71},"updated":"2018-11-01 19:25:44.000000000","message":"No need to encode this since you have it hard coded.","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":489,"context_line":"                        if \"dedup_enable\" \u003d\u003d key:"},{"line_number":490,"context_line":"                            val \u003d config.Config.parse_and_get_boolean_entry("},{"line_number":491,"context_line":"                                value)"},{"line_number":492,"context_line":"                            if val is not None:"},{"line_number":493,"context_line":"                                vDiskInfo[\u0027deduplication\u0027] \u003d val"},{"line_number":494,"context_line":"                        elif \"compressed_enable\" \u003d\u003d key:"},{"line_number":495,"context_line":"                            val \u003d config.Config.parse_and_get_boolean_entry("}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_4afdae05","line":492,"range":{"start_line":492,"start_character":28,"end_line":492,"end_character":47},"updated":"2018-11-01 19:25:44.000000000","message":"Can just be:\n\nif val:\n\nSame for cases below.","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":536,"context_line":"    def hedvig_delete_virtualdisk(self, name):"},{"line_number":537,"context_line":"        LOG.debug(\u0027Deleting virtual disk. name - %s\u0027, name)"},{"line_number":538,"context_line":"        try:"},{"line_number":539,"context_line":"            self.hrs.delete_vdisk(name)"},{"line_number":540,"context_line":"        except Exception:"},{"line_number":541,"context_line":"            raise exception.HedvigDriverException()"},{"line_number":542,"context_line":""}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_e7b07390","line":539,"updated":"2018-11-01 19:25:44.000000000","message":"It\u0027s possible the volume was deleted outside of Cinder, so the driver should handle the case where the volume no longer exists on the storage backend. If it no longer exists, the driver should return success since the caller wanted the volume gone and it is gone.","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"0ed2863dc247900fa91dd1bfa9e4d6ef61c6e537","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":57,"context_line":"        super(HedvigISCSIDriver, self).__init__(*args, **kwargs)"},{"line_number":58,"context_line":"        self.group_stats \u003d {}"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def check_for_setup_error(self):"},{"line_number":61,"context_line":"        self.hrs.connect()"}],"source_content_type":"text/x-python","patch_set":61,"id":"3f79a3b5_0903b60c","line":58,"updated":"2018-11-26 21:35:49.000000000","message":"Should set self.hrs \u003d None here.","commit_id":"81773b3e8522b0c20c74dfd377a55d44266ec121"},{"author":{"_account_id":26028,"name":"Swathi Hrishikesh","email":"swathi@hedviginc.com","username":"hrishs"},"change_message_id":"c70fa34d7e77ea56b7a471e61bf27c89eeec787e","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":57,"context_line":"        super(HedvigISCSIDriver, self).__init__(*args, **kwargs)"},{"line_number":58,"context_line":"        self.group_stats \u003d {}"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def check_for_setup_error(self):"},{"line_number":61,"context_line":"        self.hrs.connect()"}],"source_content_type":"text/x-python","patch_set":61,"id":"3f79a3b5_572b67e7","line":58,"in_reply_to":"3f79a3b5_0903b60c","updated":"2018-11-28 05:33:04.000000000","message":"Added the line. Done","commit_id":"81773b3e8522b0c20c74dfd377a55d44266ec121"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"0260de5b020a2c3f7baacd377579e8b969262ada","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2017 Hedvig, 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":63,"id":"3f79a3b5_a260be0d","line":1,"range":{"start_line":1,"start_character":16,"end_line":1,"end_character":20},"updated":"2018-12-06 20:50:27.000000000","message":"Should probably be updated to 2018 now?","commit_id":"a51f2adf1871d925c84505583694a9de7bc2843c"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"0260de5b020a2c3f7baacd377579e8b969262ada","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        required_config \u003d [\u0027san_login\u0027, \u0027san_password\u0027, \u0027san_ip\u0027,"},{"line_number":69,"context_line":"                           \u0027san_clustername\u0027]"},{"line_number":70,"context_line":"        for attr in required_config:"},{"line_number":71,"context_line":"            if not getattr(self.configuration, attr, None):"},{"line_number":72,"context_line":"                LOG.error(\u0027Hedvig params are not set. Refer to \u0027"},{"line_number":73,"context_line":"                          \u0027Hedvig cinder setup documentation\u0027)"},{"line_number":74,"context_line":"                raise exception.InvalidConfigurationValue(option\u003dattr,"},{"line_number":75,"context_line":"                                                          value\u003dNone)"},{"line_number":76,"context_line":"        self.san_ip \u003d self.configuration.san_ip"},{"line_number":77,"context_line":"        self.san_login \u003d self.configuration.san_login"},{"line_number":78,"context_line":"        self.san_password \u003d self.configuration.san_password"}],"source_content_type":"text/x-python","patch_set":63,"id":"3f79a3b5_e21f966b","line":75,"range":{"start_line":71,"start_character":0,"end_line":75,"end_character":69},"updated":"2018-12-06 20:50:27.000000000","message":"This really doesn\u0027t seem helpful for a user.  First you say that parms aren\u0027t set up but don\u0027t say which one but then raise an InvalidConfigurationValue error even though no value is set.  Think this should be improved.","commit_id":"a51f2adf1871d925c84505583694a9de7bc2843c"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"0260de5b020a2c3f7baacd377579e8b969262ada","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            qos_specs \u003d qos[\u0027qos_specs\u0027]"},{"line_number":111,"context_line":"            self.hedvig_create_virtualdisk(name, description, size, qos_specs)"},{"line_number":112,"context_line":"        except Exception:"},{"line_number":113,"context_line":"            LOG.exception(\"Failed to create volume %s\", volume.name)"},{"line_number":114,"context_line":"            raise exception.VolumeDriverException()"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def delete_volume(self, volume):"}],"source_content_type":"text/x-python","patch_set":63,"id":"3f79a3b5_e2f8f619","line":113,"range":{"start_line":113,"start_character":25,"end_line":113,"end_character":26},"updated":"2018-12-06 20:50:27.000000000","message":"Should have _( here also recommend ending your messages with \u0027.\u0027","commit_id":"a51f2adf1871d925c84505583694a9de7bc2843c"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"0260de5b020a2c3f7baacd377579e8b969262ada","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        try:"},{"line_number":121,"context_line":"            self.hedvig_delete_virtualdisk(name)"},{"line_number":122,"context_line":"        except Exception:"},{"line_number":123,"context_line":"            LOG.exception(\u0027Failed to delete volume: %s\u0027, volume.name)"},{"line_number":124,"context_line":"            raise exception.VolumeDriverException()"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def create_cloned_volume(self, volume, src_vref):"}],"source_content_type":"text/x-python","patch_set":63,"id":"3f79a3b5_5d1bcb6c","line":123,"range":{"start_line":123,"start_character":12,"end_line":123,"end_character":26},"updated":"2018-12-06 20:50:27.000000000","message":"Same comment as above.  This will be true for any user facing messages like exceptions.","commit_id":"a51f2adf1871d925c84505583694a9de7bc2843c"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"0260de5b020a2c3f7baacd377579e8b969262ada","unresolved":false,"context_lines":[{"line_number":276,"context_line":"    def extend_volume(self, volume, newSize):"},{"line_number":277,"context_line":"        \"\"\"Resizes virtual disk."},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"        newSize should be greater than current size."},{"line_number":280,"context_line":"        \"\"\""},{"line_number":281,"context_line":"        try:"},{"line_number":282,"context_line":"            name, description, size \u003d self.get_hedvig_volume_details(volume)"}],"source_content_type":"text/x-python","patch_set":63,"id":"3f79a3b5_1dbb1310","line":279,"range":{"start_line":279,"start_character":7,"end_line":279,"end_character":52},"updated":"2018-12-06 20:50:27.000000000","message":"I think you need to verify that here.  It doesn\u0027t appear there is a check in the manager for this.","commit_id":"a51f2adf1871d925c84505583694a9de7bc2843c"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"0260de5b020a2c3f7baacd377579e8b969262ada","unresolved":false,"context_lines":[{"line_number":308,"context_line":"    def create_export(self, context, volume, properties):"},{"line_number":309,"context_line":"        \"\"\"Driver entry point to get the export info for a new volume."},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"        Irrelevant for Hedvig.Export is created during attachment to instance."},{"line_number":312,"context_line":"        \"\"\""},{"line_number":313,"context_line":"        pass"},{"line_number":314,"context_line":""}],"source_content_type":"text/x-python","patch_set":63,"id":"3f79a3b5_ddb03b2b","line":311,"range":{"start_line":311,"start_character":28,"end_line":311,"end_character":31},"updated":"2018-12-06 20:50:27.000000000","message":"Missing space.","commit_id":"a51f2adf1871d925c84505583694a9de7bc2843c"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"bd36311e86886e417c489dd5305c5ce9ee831d6d","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def create_cloned_volume(self, volume, src_vref):"},{"line_number":129,"context_line":"        \"\"\"Create a clone of the volume.\"\"\""},{"line_number":130,"context_line":"        try:"},{"line_number":131,"context_line":"            LOG.debug(\u0027Create cloned volume called \u0027"},{"line_number":132,"context_line":"                      \u0027volume_id \u003d %(volume)s and src_vol_id \u003d %(src_vol_id)s\u0027,"},{"line_number":133,"context_line":"                      {\u0027volume\u0027: volume.id, \u0027src_vol_id\u0027: src_vref.id})"}],"source_content_type":"text/x-python","patch_set":64,"id":"3f79a3b5_34a570b4","line":130,"updated":"2018-12-11 19:47:05.000000000","message":"It was mentioned by Eric earlier. Wrapping everything try-except Exception makes code almost unmaintainable. On any error, it\u0027ll be very painful to troubleshoot what actually went wrong. Please don\u0027t wrap the whole method with try-except and cant more specific exceptions.\n\nAlso, this driver logs only in debug mode, it would be good to add some info logs too","commit_id":"21ebc89998031b54214eb8075c0b29aaec311de2"},{"author":{"_account_id":26028,"name":"Swathi Hrishikesh","email":"swathi@hedviginc.com","username":"hrishs"},"change_message_id":"02251bb79b5184b963e7a70b957765cfaa445c70","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def create_cloned_volume(self, volume, src_vref):"},{"line_number":129,"context_line":"        \"\"\"Create a clone of the volume.\"\"\""},{"line_number":130,"context_line":"        try:"},{"line_number":131,"context_line":"            LOG.debug(\u0027Create cloned volume called \u0027"},{"line_number":132,"context_line":"                      \u0027volume_id \u003d %(volume)s and src_vol_id \u003d %(src_vol_id)s\u0027,"},{"line_number":133,"context_line":"                      {\u0027volume\u0027: volume.id, \u0027src_vol_id\u0027: src_vref.id})"}],"source_content_type":"text/x-python","patch_set":64,"id":"3f79a3b5_5231ff55","line":130,"in_reply_to":"3f79a3b5_34a570b4","updated":"2018-12-12 21:52:21.000000000","message":"We are now catching Vol backend exception, this will be thrown by all APIs in rest client in the case for REST failure. However, we still retain exception so that log.exception tracks the details of this exception. \nSince the handle comes to storage in the end and we communicate REST API. All REST API errors are filtered and raised in a separate way","commit_id":"21ebc89998031b54214eb8075c0b29aaec311de2"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"0d61d4b0dfd673c22bc54242891ad83ebf59a288","unresolved":false,"context_lines":[{"line_number":363,"context_line":"        displayDescription \u003d volume.display_description"},{"line_number":364,"context_line":"        description \u003d (\"%s\\n%s\\n%s\" % (project, displayName,"},{"line_number":365,"context_line":"                                       displayDescription))"},{"line_number":366,"context_line":"        size \u003d int(volume.size)"},{"line_number":367,"context_line":"        if size \u003d\u003d 0:"},{"line_number":368,"context_line":"            size \u003d HedvigISCSIDriver.DEFAULT_VOL_SIZE_IN_GB"},{"line_number":369,"context_line":"        size \u003d size * units.Gi"}],"source_content_type":"text/x-python","patch_set":64,"id":"3f79a3b5_d4c51c38","line":366,"range":{"start_line":366,"start_character":0,"end_line":366,"end_character":31},"updated":"2018-12-11 19:46:29.000000000","message":"Isn\u0027t volume.size guaranteed to be an int?","commit_id":"21ebc89998031b54214eb8075c0b29aaec311de2"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"0d61d4b0dfd673c22bc54242891ad83ebf59a288","unresolved":false,"context_lines":[{"line_number":364,"context_line":"        description \u003d (\"%s\\n%s\\n%s\" % (project, displayName,"},{"line_number":365,"context_line":"                                       displayDescription))"},{"line_number":366,"context_line":"        size \u003d int(volume.size)"},{"line_number":367,"context_line":"        if size \u003d\u003d 0:"},{"line_number":368,"context_line":"            size \u003d HedvigISCSIDriver.DEFAULT_VOL_SIZE_IN_GB"},{"line_number":369,"context_line":"        size \u003d size * units.Gi"},{"line_number":370,"context_line":"        return volName, description, size"},{"line_number":371,"context_line":""}],"source_content_type":"text/x-python","patch_set":64,"id":"3f79a3b5_34e1f0cf","line":368,"range":{"start_line":367,"start_character":8,"end_line":368,"end_character":59},"updated":"2018-12-11 19:46:29.000000000","message":"I don\u0027t think this is needed.","commit_id":"21ebc89998031b54214eb8075c0b29aaec311de2"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"537fe0722e82eed52a40db84feb0192f5a13097c","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        1.0 - Initial driver"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    \"\"\""},{"line_number":47,"context_line":"    DEFAULT_VOL_SIZE_IN_GB \u003d 1"},{"line_number":48,"context_line":"    DEFAULT_VOL_BLOCK_SIZE \u003d 4 * units.Ki"},{"line_number":49,"context_line":"    DEFAULT_CREATEDBY \u003d \"OpenStack\""},{"line_number":50,"context_line":"    DEFAULT_EXPORT_BLK_SIZE \u003d 4096"}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_ee4c67cb","line":47,"updated":"2018-12-19 17:44:00.000000000","message":"I don\u0027t see this used anywhere, and it shouldn\u0027t be needed since that is the Cinder default size.","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"537fe0722e82eed52a40db84feb0192f5a13097c","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    DEFAULT_VOL_BLOCK_SIZE \u003d 4 * units.Ki"},{"line_number":49,"context_line":"    DEFAULT_CREATEDBY \u003d \"OpenStack\""},{"line_number":50,"context_line":"    DEFAULT_EXPORT_BLK_SIZE \u003d 4096"},{"line_number":51,"context_line":"    DEFAULT_VOL_SIZE_UNIT \u003d \"GB\""},{"line_number":52,"context_line":"    DEFAULT_CAPACITY \u003d units.Gi"},{"line_number":53,"context_line":"    DEFAULT_ISCSI_PORT \u003d 3260"},{"line_number":54,"context_line":"    DEFAULT_TARGET_NAME \u003d \"iqn.2012-05.com.hedvig:storage.\""}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_8e5e1376","line":51,"range":{"start_line":51,"start_character":4,"end_line":51,"end_character":32},"updated":"2018-12-19 17:44:00.000000000","message":"Why is this needed? Cinder only operates on GB size values.","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"a4199d65f591da15515fd42cadd6d142ac1084d4","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        LOG.info(\"Initialization complete\")"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def do_setup(self, context):"},{"line_number":68,"context_line":"        self.context_ \u003d context"},{"line_number":69,"context_line":"        # Ensure that the data required by hedvig are provided"},{"line_number":70,"context_line":"        required_config \u003d [\u0027san_login\u0027, \u0027san_password\u0027, \u0027san_ip\u0027,"},{"line_number":71,"context_line":"                           \u0027san_clustername\u0027]"}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_d7142152","line":68,"range":{"start_line":68,"start_character":8,"end_line":68,"end_character":31},"updated":"2018-12-12 21:19:17.000000000","message":"This should not be stored here.","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"537fe0722e82eed52a40db84feb0192f5a13097c","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        LOG.info(\"Initialization complete\")"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def do_setup(self, context):"},{"line_number":68,"context_line":"        self.context_ \u003d context"},{"line_number":69,"context_line":"        # Ensure that the data required by hedvig are provided"},{"line_number":70,"context_line":"        required_config \u003d [\u0027san_login\u0027, \u0027san_password\u0027, \u0027san_ip\u0027,"},{"line_number":71,"context_line":"                           \u0027san_clustername\u0027]"}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_8e0133b7","line":68,"range":{"start_line":68,"start_character":8,"end_line":68,"end_character":31},"in_reply_to":"3f79a3b5_72ad1b33","updated":"2018-12-19 17:44:00.000000000","message":"Why is this needed to be stored?","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":26028,"name":"Swathi Hrishikesh","email":"swathi@hedviginc.com","username":"hrishs"},"change_message_id":"14b3956f94329e023ee12ae29a3ad9be69553cc7","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        LOG.info(\"Initialization complete\")"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def do_setup(self, context):"},{"line_number":68,"context_line":"        self.context_ \u003d context"},{"line_number":69,"context_line":"        # Ensure that the data required by hedvig are provided"},{"line_number":70,"context_line":"        required_config \u003d [\u0027san_login\u0027, \u0027san_password\u0027, \u0027san_ip\u0027,"},{"line_number":71,"context_line":"                           \u0027san_clustername\u0027]"}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_72ad1b33","line":68,"range":{"start_line":68,"start_character":8,"end_line":68,"end_character":31},"in_reply_to":"3f79a3b5_d7142152","updated":"2018-12-12 22:00:03.000000000","message":"Where else can I make this assignment?","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"a4199d65f591da15515fd42cadd6d142ac1084d4","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def create_volume(self, volume):"},{"line_number":105,"context_line":"        \"\"\"Driver entry point for creating a new volume.\"\"\""},{"line_number":106,"context_line":"        LOG.info(\"Creating new volume: %s\", volume.name)"},{"line_number":107,"context_line":"        try:"},{"line_number":108,"context_line":"            name, description, size \u003d self.get_hedvig_volume_details(volume)"},{"line_number":109,"context_line":"            id \u003d volume.volume_type_id"}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_52057f0c","line":106,"range":{"start_line":106,"start_character":8,"end_line":106,"end_character":16},"updated":"2018-12-12 21:19:17.000000000","message":"This should be LOG.debug","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"537fe0722e82eed52a40db84feb0192f5a13097c","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def create_volume(self, volume):"},{"line_number":105,"context_line":"        \"\"\"Driver entry point for creating a new volume.\"\"\""},{"line_number":106,"context_line":"        LOG.info(\"Creating new volume: %s\", volume.name)"},{"line_number":107,"context_line":"        try:"},{"line_number":108,"context_line":"            name, description, size \u003d self.get_hedvig_volume_details(volume)"},{"line_number":109,"context_line":"            id \u003d volume.volume_type_id"}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_ee18e720","line":106,"range":{"start_line":106,"start_character":8,"end_line":106,"end_character":16},"in_reply_to":"3f79a3b5_32a7a355","updated":"2018-12-19 17:44:00.000000000","message":"There are other logs from the scheduler that show a volume is being created, so unless you have some useful detail to add, this should not be needed.","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":26028,"name":"Swathi Hrishikesh","email":"swathi@hedviginc.com","username":"hrishs"},"change_message_id":"14b3956f94329e023ee12ae29a3ad9be69553cc7","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def create_volume(self, volume):"},{"line_number":105,"context_line":"        \"\"\"Driver entry point for creating a new volume.\"\"\""},{"line_number":106,"context_line":"        LOG.info(\"Creating new volume: %s\", volume.name)"},{"line_number":107,"context_line":"        try:"},{"line_number":108,"context_line":"            name, description, size \u003d self.get_hedvig_volume_details(volume)"},{"line_number":109,"context_line":"            id \u003d volume.volume_type_id"}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_32a7a355","line":106,"range":{"start_line":106,"start_character":8,"end_line":106,"end_character":16},"in_reply_to":"3f79a3b5_52057f0c","updated":"2018-12-12 22:00:03.000000000","message":"A few Log level are changed to info because we got a few comments saying we do not have info logs and it\u0027s difficult to trace in production env. So I made a few logs info so that the code flow can be traced.","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"537fe0722e82eed52a40db84feb0192f5a13097c","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        LOG.info(\"Creating new volume: %s\", volume.name)"},{"line_number":107,"context_line":"        try:"},{"line_number":108,"context_line":"            name, description, size \u003d self.get_hedvig_volume_details(volume)"},{"line_number":109,"context_line":"            id \u003d volume.volume_type_id"},{"line_number":110,"context_line":"            qos \u003d volume_types.get_volume_type_qos_specs(id)"},{"line_number":111,"context_line":"            qos_specs \u003d qos[\u0027qos_specs\u0027]"},{"line_number":112,"context_line":"            self.hedvig_create_virtualdisk(name, description, size, qos_specs)"}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_ae0e6fd6","line":109,"range":{"start_line":109,"start_character":12,"end_line":109,"end_character":15},"updated":"2018-12-19 17:44:00.000000000","message":"id is a python keyword, so would be better to use a different name.","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"537fe0722e82eed52a40db84feb0192f5a13097c","unresolved":false,"context_lines":[{"line_number":115,"context_line":"                    ) % volume.name"},{"line_number":116,"context_line":"            LOG.exception(msg)"},{"line_number":117,"context_line":"            raise exception.VolumeDriverException(msg)"},{"line_number":118,"context_line":"        except exception.CinderException:"},{"line_number":119,"context_line":"            msg \u003d _(\u0027Failed to create volume %s\u0027) % volume.name"},{"line_number":120,"context_line":"            LOG.exception(msg)"},{"line_number":121,"context_line":"            raise exception.VolumeDriverException(msg)"},{"line_number":122,"context_line":"        except Exception:"},{"line_number":123,"context_line":"            msg \u003d _(\u0027Failed to delete volume: %s\u0027) % volume.name"},{"line_number":124,"context_line":"            LOG.exception(msg)"}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_8ecff388","line":121,"range":{"start_line":118,"start_character":8,"end_line":121,"end_character":54},"updated":"2018-12-19 17:44:00.000000000","message":"This whole block can be removed since it isn\u0027t any different than the catchall Exception handling.","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"537fe0722e82eed52a40db84feb0192f5a13097c","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            LOG.exception(msg)"},{"line_number":121,"context_line":"            raise exception.VolumeDriverException(msg)"},{"line_number":122,"context_line":"        except Exception:"},{"line_number":123,"context_line":"            msg \u003d _(\u0027Failed to delete volume: %s\u0027) % volume.name"},{"line_number":124,"context_line":"            LOG.exception(msg)"},{"line_number":125,"context_line":"            raise exception.VolumeDriverException(msg)"},{"line_number":126,"context_line":""}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_4ed55b18","line":123,"range":{"start_line":123,"start_character":31,"end_line":123,"end_character":37},"updated":"2018-12-19 17:44:00.000000000","message":"create","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"a4199d65f591da15515fd42cadd6d142ac1084d4","unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def delete_volume(self, volume):"},{"line_number":128,"context_line":"        \"\"\"Driver entry point for deleting volume.\"\"\""},{"line_number":129,"context_line":"        LOG.info(\"Deleting volume: %s\", volume.name)"},{"line_number":130,"context_line":"        name \u003d volume.name"},{"line_number":131,"context_line":"        try:"},{"line_number":132,"context_line":"            self.hedvig_delete_virtualdisk(name)"}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_f2112b53","line":129,"range":{"start_line":129,"start_character":12,"end_line":129,"end_character":16},"updated":"2018-12-12 21:19:17.000000000","message":"debug","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"537fe0722e82eed52a40db84feb0192f5a13097c","unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def delete_volume(self, volume):"},{"line_number":128,"context_line":"        \"\"\"Driver entry point for deleting volume.\"\"\""},{"line_number":129,"context_line":"        LOG.info(\"Deleting volume: %s\", volume.name)"},{"line_number":130,"context_line":"        name \u003d volume.name"},{"line_number":131,"context_line":"        try:"},{"line_number":132,"context_line":"            self.hedvig_delete_virtualdisk(name)"}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_2ea9ff96","line":129,"range":{"start_line":129,"start_character":12,"end_line":129,"end_character":16},"in_reply_to":"3f79a3b5_f2112b53","updated":"2018-12-19 17:44:00.000000000","message":"++","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"a4199d65f591da15515fd42cadd6d142ac1084d4","unresolved":false,"context_lines":[{"line_number":143,"context_line":"    def create_cloned_volume(self, volume, src_vref):"},{"line_number":144,"context_line":"        \"\"\"Create a clone of the volume.\"\"\""},{"line_number":145,"context_line":"        try:"},{"line_number":146,"context_line":"            LOG.info(\u0027Create cloned volume called \u0027"},{"line_number":147,"context_line":"                     \u0027volume_id \u003d %(volume)s and src_vol_id \u003d %(src_vol_id)s\u0027,"},{"line_number":148,"context_line":"                     {\u0027volume\u0027: volume.id, \u0027src_vol_id\u0027: src_vref.id})"},{"line_number":149,"context_line":"            name, desc, size \u003d self.get_hedvig_volume_details(volume)"}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_d222efa5","line":146,"range":{"start_line":146,"start_character":16,"end_line":146,"end_character":20},"updated":"2018-12-12 21:19:17.000000000","message":"debug","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"a4199d65f591da15515fd42cadd6d142ac1084d4","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        The format of the driver data is defined as follows -- similar"},{"line_number":168,"context_line":"        to _get_iscsi_properties."},{"line_number":169,"context_line":"        \"\"\""},{"line_number":170,"context_line":"        LOG.info(\u0027Initializing connection. volume: %s, \u0027"},{"line_number":171,"context_line":"                 \u0027connector: %s\u0027, volume, connector)"},{"line_number":172,"context_line":"        try:"},{"line_number":173,"context_line":"            computeHost \u003d self.get_compute_host(connector)"}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_921c7766","line":170,"range":{"start_line":170,"start_character":12,"end_line":170,"end_character":16},"updated":"2018-12-12 21:19:17.000000000","message":"debug","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"537fe0722e82eed52a40db84feb0192f5a13097c","unresolved":false,"context_lines":[{"line_number":186,"context_line":"            # Add access to the mgmt interface addr and iqn of compute host"},{"line_number":187,"context_line":"            LOG.debug(\"Calling add access with %s : %s  : %s \", tgtHost,"},{"line_number":188,"context_line":"                      volName, connector[\u0027initiator\u0027])"},{"line_number":189,"context_line":"            self.hedvig_add_access(tgtHost, volName, connector[\u0027initiator\u0027])"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"            # Add access to both storage and mgmt interface addrs for"},{"line_number":192,"context_line":"            # iscsi discovery to succeed"}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_0e72034c","line":189,"updated":"2018-12-19 17:44:00.000000000","message":"initialize_connection can be called multiple times. Does this handle the case where access has already been set up?","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":26028,"name":"Swathi Hrishikesh","email":"swathi@hedviginc.com","username":"hrishs"},"change_message_id":"5bf5928d231ed5223410fa71b3ec4a5ab1cfde60","unresolved":false,"context_lines":[{"line_number":186,"context_line":"            # Add access to the mgmt interface addr and iqn of compute host"},{"line_number":187,"context_line":"            LOG.debug(\"Calling add access with %s : %s  : %s \", tgtHost,"},{"line_number":188,"context_line":"                      volName, connector[\u0027initiator\u0027])"},{"line_number":189,"context_line":"            self.hedvig_add_access(tgtHost, volName, connector[\u0027initiator\u0027])"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"            # Add access to both storage and mgmt interface addrs for"},{"line_number":192,"context_line":"            # iscsi discovery to succeed"}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_afc40d3a","line":189,"in_reply_to":"3f79a3b5_0e72034c","updated":"2018-12-21 01:29:06.000000000","message":"Yes, Hedvig Backend takes care of it.","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"537fe0722e82eed52a40db84feb0192f5a13097c","unresolved":false,"context_lines":[{"line_number":193,"context_line":"            LOG.debug(\"Calling hedvig_get_iqn %s\", socket.getfqdn())"},{"line_number":194,"context_line":"            controller_host_iqn \u003d self.hedvig_get_iqn(socket.getfqdn())"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"            LOG.debug(\"Calling add access with %s : %s : %s \", tgtHost,"},{"line_number":197,"context_line":"                      volName, controller_host_iqn)"},{"line_number":198,"context_line":"            self.hedvig_add_access(tgtHost, volName, controller_host_iqn)"},{"line_number":199,"context_line":"            LOG.info(\"Add access complete\")"}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_6eaff77e","line":196,"range":{"start_line":196,"start_character":47,"end_line":196,"end_character":60},"updated":"2018-12-19 17:44:00.000000000","message":"When there are multiple values to format into the string, named variables should be used. So something like::\n\n\"Calling add access with %(host)s : %(vol)s : %(iqn)s\", {\u0027host\u0027: tgtHost, \u0027vol\u0027: volName, \u0027iqn\u0027: controller_host_iqn)\n\nAlso, extra space on the end.","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"537fe0722e82eed52a40db84feb0192f5a13097c","unresolved":false,"context_lines":[{"line_number":196,"context_line":"            LOG.debug(\"Calling add access with %s : %s : %s \", tgtHost,"},{"line_number":197,"context_line":"                      volName, controller_host_iqn)"},{"line_number":198,"context_line":"            self.hedvig_add_access(tgtHost, volName, controller_host_iqn)"},{"line_number":199,"context_line":"            LOG.info(\"Add access complete\")"},{"line_number":200,"context_line":"            targetName \u003d (\"%s%s-%s\" % (self.DEFAULT_TARGET_NAME, tgtHost,"},{"line_number":201,"context_line":"                                       lunnum))"},{"line_number":202,"context_line":"            LOG.debug(\"targetName %s\", targetName)"}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_8eb4d3d4","line":199,"range":{"start_line":199,"start_character":16,"end_line":199,"end_character":20},"updated":"2018-12-19 17:44:00.000000000","message":"debug","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"537fe0722e82eed52a40db84feb0192f5a13097c","unresolved":false,"context_lines":[{"line_number":208,"context_line":"                                 \u0027target_portal\u0027: portal,"},{"line_number":209,"context_line":"                                 \u0027target_lun\u0027: lunnum})"},{"line_number":210,"context_line":"            LOG.info(\"volName: %s, connector: %s, iscsi_properties: %s\","},{"line_number":211,"context_line":"                     volName, connector, iscsi_properties)"},{"line_number":212,"context_line":"            return {\u0027driver_volume_type\u0027: \u0027iscsi\u0027, \u0027data\u0027: iscsi_properties}"},{"line_number":213,"context_line":"        except exception.VolumeDriverException:"},{"line_number":214,"context_line":"            msg \u003d _(\u0027Volume assignment to connect failed. volume: %s\u0027"}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_2ea57f9c","line":211,"range":{"start_line":211,"start_character":41,"end_line":211,"end_character":57},"updated":"2018-12-19 17:44:00.000000000","message":"Should just remove the individual logs above since this will log all of them together.","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"537fe0722e82eed52a40db84feb0192f5a13097c","unresolved":false,"context_lines":[{"line_number":211,"context_line":"                     volName, connector, iscsi_properties)"},{"line_number":212,"context_line":"            return {\u0027driver_volume_type\u0027: \u0027iscsi\u0027, \u0027data\u0027: iscsi_properties}"},{"line_number":213,"context_line":"        except exception.VolumeDriverException:"},{"line_number":214,"context_line":"            msg \u003d _(\u0027Volume assignment to connect failed. volume: %s\u0027"},{"line_number":215,"context_line":"                    \u0027Rest API failed\u0027) % volume"},{"line_number":216,"context_line":"            LOG.exception(msg)"},{"line_number":217,"context_line":"            raise exception.VolumeDriverException(msg)"}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_aeb8afc1","line":214,"range":{"start_line":214,"start_character":68,"end_line":214,"end_character":69},"updated":"2018-12-19 17:44:00.000000000","message":"Missing space at the end.","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"a4199d65f591da15515fd42cadd6d142ac1084d4","unresolved":false,"context_lines":[{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":224,"context_line":"        \"\"\"Driver entry point to detach volume from instance.\"\"\""},{"line_number":225,"context_line":"        LOG.info(\"Terminating connection. volume: %s, connector: %s\","},{"line_number":226,"context_line":"                 volume, connector)"},{"line_number":227,"context_line":"        try:"},{"line_number":228,"context_line":"            volName \u003d volume.name"}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_522edf8e","line":225,"range":{"start_line":225,"start_character":12,"end_line":225,"end_character":16},"updated":"2018-12-12 21:19:17.000000000","message":"debug","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"537fe0722e82eed52a40db84feb0192f5a13097c","unresolved":false,"context_lines":[{"line_number":287,"context_line":"                     \"project: %s\", volName, snapshotName, project)"},{"line_number":288,"context_line":"            self.hrs.delete_snapshot(snapshotName, volName, snapshotId)"},{"line_number":289,"context_line":"        except exception.VolumeDriverException:"},{"line_number":290,"context_line":"            msg \u003d _(\u0027Failed to delete snapshot: %s\u0027"},{"line_number":291,"context_line":"                    \u0027Rest API failed\u0027) % snapshotName"},{"line_number":292,"context_line":"            LOG.exception(msg)"},{"line_number":293,"context_line":"            raise exception.VolumeDriverException(msg)"}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_eec7873d","line":290,"range":{"start_line":290,"start_character":50,"end_line":290,"end_character":51},"updated":"2018-12-19 17:44:00.000000000","message":"Missing space at the end.","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"537fe0722e82eed52a40db84feb0192f5a13097c","unresolved":false,"context_lines":[{"line_number":306,"context_line":"        snapshotId \u003d snapshot.id"},{"line_number":307,"context_line":"        srcVolName \u003d snapshot.volume_name"},{"line_number":308,"context_line":"        try:"},{"line_number":309,"context_line":"            LOG.info(\u0027Creating volume from snapshot. name: %s,\u0027"},{"line_number":310,"context_line":"                     \u0027 description: %s, srcVolName : %s, snap_id: %s\u0027,"},{"line_number":311,"context_line":"                     name, description, srcVolName, snapshotId)"},{"line_number":312,"context_line":"            self.hedvig_clone_snapshot(name, snapshotId, srcVolName, size)"}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_0ec52335","line":309,"range":{"start_line":309,"start_character":59,"end_line":309,"end_character":61},"updated":"2018-12-19 17:44:00.000000000","message":"Use named values.","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"a4199d65f591da15515fd42cadd6d142ac1084d4","unresolved":false,"context_lines":[{"line_number":346,"context_line":"            LOG.exception(msg)"},{"line_number":347,"context_line":"            raise exception.VolumeDriverException(msg)"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    def check_for_export(self, context, volume_id):"},{"line_number":350,"context_line":"        \"\"\"Not relevant to Hedvig\"\"\""},{"line_number":351,"context_line":"        pass"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"    def get_export(self, volume):"},{"line_number":354,"context_line":"        \"\"\"Get the iSCSI export details for a volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_b26bb3b9","line":351,"range":{"start_line":349,"start_character":0,"end_line":351,"end_character":12},"updated":"2018-12-12 21:19:17.000000000","message":"Don\u0027t need this method","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":26028,"name":"Swathi Hrishikesh","email":"swathi@hedviginc.com","username":"hrishs"},"change_message_id":"14b3956f94329e023ee12ae29a3ad9be69553cc7","unresolved":false,"context_lines":[{"line_number":346,"context_line":"            LOG.exception(msg)"},{"line_number":347,"context_line":"            raise exception.VolumeDriverException(msg)"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    def check_for_export(self, context, volume_id):"},{"line_number":350,"context_line":"        \"\"\"Not relevant to Hedvig\"\"\""},{"line_number":351,"context_line":"        pass"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"    def get_export(self, volume):"},{"line_number":354,"context_line":"        \"\"\"Get the iSCSI export details for a volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_72df5bd3","line":351,"range":{"start_line":349,"start_character":0,"end_line":351,"end_character":12},"in_reply_to":"3f79a3b5_b26bb3b9","updated":"2018-12-12 22:00:03.000000000","message":"We get errors if we submit without these functions. Notimplemented error.","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"a4199d65f591da15515fd42cadd6d142ac1084d4","unresolved":false,"context_lines":[{"line_number":350,"context_line":"        \"\"\"Not relevant to Hedvig\"\"\""},{"line_number":351,"context_line":"        pass"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"    def get_export(self, volume):"},{"line_number":354,"context_line":"        \"\"\"Get the iSCSI export details for a volume.\"\"\""},{"line_number":355,"context_line":"        pass"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"    def ensure_export(self, context, volume):"},{"line_number":358,"context_line":"        \"\"\"Driver entry point to get the export info for an existing volume."}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_72651be4","line":355,"range":{"start_line":353,"start_character":0,"end_line":355,"end_character":12},"updated":"2018-12-12 21:19:17.000000000","message":"Don\u0027t need this method","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":26028,"name":"Swathi Hrishikesh","email":"swathi@hedviginc.com","username":"hrishs"},"change_message_id":"14b3956f94329e023ee12ae29a3ad9be69553cc7","unresolved":false,"context_lines":[{"line_number":350,"context_line":"        \"\"\"Not relevant to Hedvig\"\"\""},{"line_number":351,"context_line":"        pass"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"    def get_export(self, volume):"},{"line_number":354,"context_line":"        \"\"\"Get the iSCSI export details for a volume.\"\"\""},{"line_number":355,"context_line":"        pass"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"    def ensure_export(self, context, volume):"},{"line_number":358,"context_line":"        \"\"\"Driver entry point to get the export info for an existing volume."}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_32f9e34f","line":355,"range":{"start_line":353,"start_character":0,"end_line":355,"end_character":12},"in_reply_to":"3f79a3b5_72651be4","updated":"2018-12-12 22:00:03.000000000","message":"We get errors if we submit without these functions. Notimplemented error.","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"a4199d65f591da15515fd42cadd6d142ac1084d4","unresolved":false,"context_lines":[{"line_number":354,"context_line":"        \"\"\"Get the iSCSI export details for a volume.\"\"\""},{"line_number":355,"context_line":"        pass"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"    def ensure_export(self, context, volume):"},{"line_number":358,"context_line":"        \"\"\"Driver entry point to get the export info for an existing volume."},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"        Irrelevant for Hedvig. Export is created during attachment to instance."},{"line_number":361,"context_line":"        \"\"\""},{"line_number":362,"context_line":"        pass"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"    def create_export(self, context, volume, properties):"},{"line_number":365,"context_line":"        \"\"\"Driver entry point to get the export info for a new volume."}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_325fa312","line":362,"range":{"start_line":357,"start_character":0,"end_line":362,"end_character":12},"updated":"2018-12-12 21:19:17.000000000","message":"Don\u0027t need this method","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":26028,"name":"Swathi Hrishikesh","email":"swathi@hedviginc.com","username":"hrishs"},"change_message_id":"14b3956f94329e023ee12ae29a3ad9be69553cc7","unresolved":false,"context_lines":[{"line_number":354,"context_line":"        \"\"\"Get the iSCSI export details for a volume.\"\"\""},{"line_number":355,"context_line":"        pass"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"    def ensure_export(self, context, volume):"},{"line_number":358,"context_line":"        \"\"\"Driver entry point to get the export info for an existing volume."},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"        Irrelevant for Hedvig. Export is created during attachment to instance."},{"line_number":361,"context_line":"        \"\"\""},{"line_number":362,"context_line":"        pass"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"    def create_export(self, context, volume, properties):"},{"line_number":365,"context_line":"        \"\"\"Driver entry point to get the export info for a new volume."}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_52f6df61","line":362,"range":{"start_line":357,"start_character":0,"end_line":362,"end_character":12},"in_reply_to":"3f79a3b5_325fa312","updated":"2018-12-12 22:00:03.000000000","message":"We get errors if we submit without these functions. Notimplemented error.","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"a4199d65f591da15515fd42cadd6d142ac1084d4","unresolved":false,"context_lines":[{"line_number":383,"context_line":""},{"line_number":384,"context_line":"    def hedvig_create_snapshot(self, vDiskName, snapshotId\u003dNone):"},{"line_number":385,"context_line":"        \"\"\"Hedvig call to create snapshot of vdisk.\"\"\""},{"line_number":386,"context_line":"        LOG.info(\"Creating snapshot..%s , %s.\", vDiskName, snapshotId)"},{"line_number":387,"context_line":"        try:"},{"line_number":388,"context_line":"            snapshotName \u003d self.hrs.create_snapshot(vDiskName, snapshotId)"},{"line_number":389,"context_line":"            LOG.debug(\"Received snapshotName %s from rest call\","}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_125627fb","line":386,"range":{"start_line":386,"start_character":12,"end_line":386,"end_character":16},"updated":"2018-12-12 21:19:17.000000000","message":"debug","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"537fe0722e82eed52a40db84feb0192f5a13097c","unresolved":false,"context_lines":[{"line_number":390,"context_line":"                      snapshotName)"},{"line_number":391,"context_line":"            return snapshotName"},{"line_number":392,"context_line":"        except exception.VolumeDriverException:"},{"line_number":393,"context_line":"            msg \u003d _(\u0027Failed to create snapshot for vdisk %s\u0027"},{"line_number":394,"context_line":"                    \u0027Rest API failed\u0027) % vDiskName"},{"line_number":395,"context_line":"            LOG.exception(msg)"},{"line_number":396,"context_line":"            raise exception.VolumeDriverException()"}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_2e281fea","line":393,"range":{"start_line":393,"start_character":59,"end_line":393,"end_character":60},"updated":"2018-12-19 17:44:00.000000000","message":"Missing trailing space.","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"a4199d65f591da15515fd42cadd6d142ac1084d4","unresolved":false,"context_lines":[{"line_number":400,"context_line":"            raise exception.VolumeDriverException()"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"    def update_volume_stats(self):"},{"line_number":403,"context_line":"        LOG.info(\u0027Update volume stats called\u0027)"},{"line_number":404,"context_line":"        try:"},{"line_number":405,"context_line":"            total_capacity, free_capacity \u003d self.hrs.update_volume_stats()"},{"line_number":406,"context_line":"        except exception.VolumeDriverException:"}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_f2584b27","line":403,"range":{"start_line":403,"start_character":12,"end_line":403,"end_character":16},"updated":"2018-12-12 21:19:17.000000000","message":"LOG.debug","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"a4199d65f591da15515fd42cadd6d142ac1084d4","unresolved":false,"context_lines":[{"line_number":433,"context_line":""},{"line_number":434,"context_line":"    def hedvig_lookup_tgt(self, host\u003dNone):"},{"line_number":435,"context_line":"        \"\"\"Get the tgt instance associated with the compute host\"\"\""},{"line_number":436,"context_line":"        LOG.info(\"Looking up hedvig controller for compute host: %s\","},{"line_number":437,"context_line":"                 host)"},{"line_number":438,"context_line":"        try:"},{"line_number":439,"context_line":"            targetList \u003d self.hrs.list_targets(computeHost\u003dhost)"}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_b29093a5","line":436,"updated":"2018-12-12 21:19:17.000000000","message":"debug","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"537fe0722e82eed52a40db84feb0192f5a13097c","unresolved":false,"context_lines":[{"line_number":444,"context_line":"            LOG.debug(\"Found hedvig controller: %s, for host: %s\", tgt, host)"},{"line_number":445,"context_line":"            return tgt"},{"line_number":446,"context_line":"        except exception.VolumeDriverException:"},{"line_number":447,"context_line":"            msg \u003d _(\u0027Failed to get hedvig controller for compute %s\u0027"},{"line_number":448,"context_line":"                    \u0027Rest API failed\u0027) % host"},{"line_number":449,"context_line":"            LOG.exception(msg)"},{"line_number":450,"context_line":"            raise exception.VolumeDriverException(msg)"}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_0e33e360","line":447,"range":{"start_line":447,"start_character":67,"end_line":447,"end_character":68},"updated":"2018-12-19 17:44:00.000000000","message":"Missing trailing space.","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"537fe0722e82eed52a40db84feb0192f5a13097c","unresolved":false,"context_lines":[{"line_number":457,"context_line":"        try:"},{"line_number":458,"context_line":"            LOG.info(\"Deleting lun. hedvig controller: %s, vDiskName: %s,\","},{"line_number":459,"context_line":"                     tgtHost, vDiskName)"},{"line_number":460,"context_line":"            self.hrs.unmap_lun(tgtHost, vDiskName)"},{"line_number":461,"context_line":"        except Exception:"},{"line_number":462,"context_line":"            msg \u003d _(\u0027Failed to delete lun\u0027)"},{"line_number":463,"context_line":"            LOG.exception(msg)"}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_ce388b3a","line":460,"updated":"2018-12-19 17:44:00.000000000","message":"Nothing needs to be done to delete the lun other than unmapping it?","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":26028,"name":"Swathi Hrishikesh","email":"swathi@hedviginc.com","username":"hrishs"},"change_message_id":"5bf5928d231ed5223410fa71b3ec4a5ab1cfde60","unresolved":false,"context_lines":[{"line_number":457,"context_line":"        try:"},{"line_number":458,"context_line":"            LOG.info(\"Deleting lun. hedvig controller: %s, vDiskName: %s,\","},{"line_number":459,"context_line":"                     tgtHost, vDiskName)"},{"line_number":460,"context_line":"            self.hrs.unmap_lun(tgtHost, vDiskName)"},{"line_number":461,"context_line":"        except Exception:"},{"line_number":462,"context_line":"            msg \u003d _(\u0027Failed to delete lun\u0027)"},{"line_number":463,"context_line":"            LOG.exception(msg)"}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_af608d39","line":460,"in_reply_to":"3f79a3b5_ce388b3a","updated":"2018-12-21 01:29:06.000000000","message":"Yes, Unmap Lun rest api takes care of everything.","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"537fe0722e82eed52a40db84feb0192f5a13097c","unresolved":false,"context_lines":[{"line_number":469,"context_line":"        If lun does not exist then call add_lun and return the lun number."},{"line_number":470,"context_line":"        If lun exists, just return the lun number."},{"line_number":471,"context_line":"        \"\"\""},{"line_number":472,"context_line":"        LOG.info(\"Getting lun. hedvig controller: %s, vDiskName: %s\","},{"line_number":473,"context_line":"                 tgtHost, vDiskName)"},{"line_number":474,"context_line":"        try:"},{"line_number":475,"context_line":"            lunNo \u003d self.hrs.get_lun(tgtHost, vDiskName)"}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_6e0b777e","line":472,"range":{"start_line":472,"start_character":12,"end_line":472,"end_character":16},"updated":"2018-12-19 17:44:00.000000000","message":"debug","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"537fe0722e82eed52a40db84feb0192f5a13097c","unresolved":false,"context_lines":[{"line_number":490,"context_line":""},{"line_number":491,"context_line":"    def hedvig_get_iqn(self, hostname):"},{"line_number":492,"context_line":"        \"\"\"Looks up the iqn for the given host.\"\"\""},{"line_number":493,"context_line":"        LOG.info(\"Getting IQN for hostname: %s\", hostname)"},{"line_number":494,"context_line":"        try:"},{"line_number":495,"context_line":"            iqn \u003d self.hrs.get_iqn(hostname)"},{"line_number":496,"context_line":"            LOG.debug(\"Got IQN: %s, for hostname: %s\", iqn, hostname)"}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_2e01ff5b","line":493,"range":{"start_line":493,"start_character":12,"end_line":493,"end_character":16},"updated":"2018-12-19 17:44:00.000000000","message":"debug\n\nOr remove since there is actual useful information logged below.","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"}],"cinder/volume/drivers/hedvig/hedvigpyc.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"d107a8e24d3b1dea12db32d0d3cfdb2190645e53","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from sys import version_info"},{"line_number":18,"context_line":"if version_info \u003e\u003d (2, 6, 0):"},{"line_number":19,"context_line":"    def swig_import_helper():"},{"line_number":20,"context_line":"        import imp"},{"line_number":21,"context_line":"        from os.path import dirname"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba2be162_633b7939","line":18,"updated":"2017-03-06 20:35:19.000000000","message":"Nobody is running OpenStack on versions of Python older than 2.6 -- this check isn\u0027t needed.","commit_id":"8934e557857800253a129d41217cc2c90b6cf7d0"}],"cinder/volume/drivers/hedvig/rest_client.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ae1219b74d8ccabc292c207941d78df16bcfff49","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from cinder import exception"},{"line_number":23,"context_line":"from cinder.volume.drivers.hedvig import config"},{"line_number":24,"context_line":"from oslo_log import log as logging"},{"line_number":25,"context_line":"from oslo_utils import units"},{"line_number":26,"context_line":"from six.moves import http_client"},{"line_number":27,"context_line":"from six.moves import urllib"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":26,"id":"5f4e5783_a8f25399","line":27,"range":{"start_line":24,"start_character":0,"end_line":27,"end_character":28},"updated":"2017-10-10 02:05:42.000000000","message":"Move in group before cinder imports.","commit_id":"ac0757116134ddc7442546e426cf8b496acbb1b1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ae1219b74d8ccabc292c207941d78df16bcfff49","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            nodeL.append(n.strip())"},{"line_number":103,"context_line":"        for node in nodeL:"},{"line_number":104,"context_line":"            try:"},{"line_number":105,"context_line":"                LOG.debug(\"Attempting store_node_map  with node \", node)"},{"line_number":106,"context_line":"                nodeList \u003d self.get_all_cluster_nodes(node)"},{"line_number":107,"context_line":"                exitFlag \u003d True"},{"line_number":108,"context_line":"                for node_ in nodeList:"}],"source_content_type":"text/x-python","patch_set":26,"id":"5f4e5783_c83a2f33","line":105,"range":{"start_line":105,"start_character":52,"end_line":105,"end_character":54},"updated":"2017-10-10 02:05:42.000000000","message":"extra space","commit_id":"ac0757116134ddc7442546e426cf8b496acbb1b1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ae1219b74d8ccabc292c207941d78df16bcfff49","unresolved":false,"context_lines":[{"line_number":167,"context_line":""},{"line_number":168,"context_line":"            except Exception as e:"},{"line_number":169,"context_line":"                LOG.debug("},{"line_number":170,"context_line":"                    \"Exception details: data - \" + data + \" , node - \" +"},{"line_number":171,"context_line":"                    node + \"exception - \" + e.args)"},{"line_number":172,"context_line":"                node \u003d self.get_pages_host()"},{"line_number":173,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":26,"id":"5f4e5783_081287b2","line":170,"range":{"start_line":170,"start_character":48,"end_line":170,"end_character":57},"updated":"2017-10-10 02:05:42.000000000","message":"Use formatting, especially in a logger call.","commit_id":"ac0757116134ddc7442546e426cf8b496acbb1b1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ae1219b74d8ccabc292c207941d78df16bcfff49","unresolved":false,"context_lines":[{"line_number":321,"context_line":"            return -1"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"    def get_iqn(self, host\u003dNone):"},{"line_number":324,"context_line":"        \"\"\"Retrieve IQN of the host. Ensure registerIqn has been"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"         called as a part of OpenStack setup"},{"line_number":327,"context_line":"        :param host: hostname"}],"source_content_type":"text/x-python","patch_set":26,"id":"5f4e5783_a875b3fc","line":324,"range":{"start_line":324,"start_character":11,"end_line":324,"end_character":64},"updated":"2017-10-10 02:05:42.000000000","message":"First line should be just one line and a short summary.","commit_id":"ac0757116134ddc7442546e426cf8b496acbb1b1"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"c50c47e2e701ab63960d3de5afb701a64fa04c5b","unresolved":false,"context_lines":[{"line_number":451,"context_line":"        :param host: hostname"},{"line_number":452,"context_line":"        :param vDiskName: name of vdisk"},{"line_number":453,"context_line":"        :param address: iqn address of the host"},{"line_number":454,"context_line":"        :return: status of the rest call"},{"line_number":455,"context_line":"        \"\"\""},{"line_number":456,"context_line":"        LOG.debug("},{"line_number":457,"context_line":"            \"remove_access called with  host %s, vdisk %s\", host, vDiskName)"}],"source_content_type":"text/x-python","patch_set":27,"id":"3f4b6375_0547fe1f","line":454,"range":{"start_line":454,"start_character":8,"end_line":454,"end_character":40},"updated":"2017-10-18 18:14:53.000000000","message":"This doesn\u0027t appear to be accurate","commit_id":"d3a2e90f87ab6ad2261f125cce6d61873e3f9c39"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"c50c47e2e701ab63960d3de5afb701a64fa04c5b","unresolved":false,"context_lines":[{"line_number":552,"context_line":"        \"\"\"Rest call to delete snapshot"},{"line_number":553,"context_line":""},{"line_number":554,"context_line":"        :param snapshotName:  name of the snapshot to be deleted"},{"line_number":555,"context_line":"        :return:  status of the rest call"},{"line_number":556,"context_line":"        \"\"\""},{"line_number":557,"context_line":"        LOG.debug("},{"line_number":558,"context_line":"            \"delete_snapshot called with snapshot %s\", snapshotName)"}],"source_content_type":"text/x-python","patch_set":27,"id":"3f4b6375_a55f0ae4","line":555,"range":{"start_line":555,"start_character":8,"end_line":555,"end_character":41},"updated":"2017-10-18 18:14:53.000000000","message":"This doesn\u0027t appear to be accurate","commit_id":"d3a2e90f87ab6ad2261f125cce6d61873e3f9c39"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"61408770599319d72db9ce4bbf02b86e47886717","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        :param username:  username of the cluster"},{"line_number":39,"context_line":"        :param password:  password of the cluster"},{"line_number":40,"context_line":"        :param cluster:  clustername of the cluster"},{"line_number":41,"context_line":"        \"\"\""},{"line_number":42,"context_line":"        LOG.debug(\u0027init called with %s , %s\u0027, nodes, cluster)"},{"line_number":43,"context_line":"        self.username \u003d username"},{"line_number":44,"context_line":"        self.password \u003d password"}],"source_content_type":"text/x-python","patch_set":31,"id":"df87a7cf_4db5fced","line":41,"range":{"start_line":41,"start_character":1,"end_line":41,"end_character":11},"updated":"2017-12-01 19:54:14.000000000","message":"As in the other file, should have a space after the doc strings.  Thank you for using the parameters and stuff here.","commit_id":"c7f91f7c50c6b33e5f1051a3458dc833215b44d9"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"61408770599319d72db9ce4bbf02b86e47886717","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        \"\"\"Stores all the node information along with their sessionID in dict"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        :param nodes: hostname of the nodes in the cluster"},{"line_number":97,"context_line":"        \"\"\""},{"line_number":98,"context_line":"        LOG.debug(\"store_node_map called with node %s\", nodes)"},{"line_number":99,"context_line":"        exitFlag \u003d False"},{"line_number":100,"context_line":"        nodeL \u003d []"}],"source_content_type":"text/x-python","patch_set":31,"id":"df87a7cf_4d989c69","line":97,"range":{"start_line":97,"start_character":8,"end_line":97,"end_character":11},"updated":"2017-12-01 19:54:14.000000000","message":"missing :return:","commit_id":"c7f91f7c50c6b33e5f1051a3458dc833215b44d9"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"61408770599319d72db9ce4bbf02b86e47886717","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                return"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def refresh_session_ids(self):"},{"line_number":124,"context_line":"        \"\"\"In case of session failure , it  refreshes all the"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        session ID stored in nodeMap"},{"line_number":127,"context_line":"        \"\"\""},{"line_number":128,"context_line":"        LOG.debug(\"refresh_session_ids called\")"},{"line_number":129,"context_line":"        if len(self.nodeMap.keys()) \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":31,"id":"df87a7cf_ad8e082c","line":126,"range":{"start_line":124,"start_character":11,"end_line":126,"end_character":36},"updated":"2017-12-01 19:54:14.000000000","message":"This should be its own line and a brief description should be the first line.","commit_id":"c7f91f7c50c6b33e5f1051a3458dc833215b44d9"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"61408770599319d72db9ce4bbf02b86e47886717","unresolved":false,"context_lines":[{"line_number":449,"context_line":"        :param address: iqn address of the host"},{"line_number":450,"context_line":"        \"\"\""},{"line_number":451,"context_line":"        LOG.debug("},{"line_number":452,"context_line":"            \"remove_access called with  host %s, vdisk %s\", host, vDiskName)"},{"line_number":453,"context_line":"        node \u003d self.get_pages_host()"},{"line_number":454,"context_line":"        sessionId \u003d self.retrieve_session_id(node)"},{"line_number":455,"context_line":"        data \u003d {"}],"source_content_type":"text/x-python","patch_set":31,"id":"df87a7cf_cdf26c9b","line":452,"range":{"start_line":452,"start_character":38,"end_line":452,"end_character":39},"updated":"2017-12-01 19:54:14.000000000","message":"extra space here.","commit_id":"c7f91f7c50c6b33e5f1051a3458dc833215b44d9"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            errmsg \u003d \"REST call status - %s\" % obj[\u0027status\u0027]"},{"line_number":177,"context_line":"            raise exception.HedvigDriverException(errmsg)"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    def create_vdisk(self, vDiskInfo\u003dNone):"},{"line_number":180,"context_line":"        \"\"\"Rest call to create a vdisk"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        :param vDiskInfo: json passsed to the rest call"}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_ea683abd","line":179,"range":{"start_line":179,"start_character":36,"end_line":179,"end_character":41},"updated":"2018-11-01 19:25:44.000000000","message":"This probably shouldn\u0027t have a default of None if it\u0027s access internally without any validity checking.","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cb4d5a720f3e0e2a3361ec0d623ef9d3f378a714","unresolved":false,"context_lines":[{"line_number":203,"context_line":"            errmsg \u003d \"create_vdisk REST call status - %s\" % obj[\u0027status\u0027]"},{"line_number":204,"context_line":"            raise exception.HedvigDriverException(errmsg)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    def resize_vdisk(self, vDiskName\u003dNone, unit\u003dNone, value\u003dNone):"},{"line_number":207,"context_line":"        \"\"\"Rest Call to resize Vdisk"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"        :param vDiskName:  name of the vdisk"}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_8a59862a","line":206,"range":{"start_line":206,"start_character":36,"end_line":206,"end_character":41},"updated":"2018-11-01 19:25:44.000000000","message":"Same with these.","commit_id":"d033fe7459b581ef3965c86383a50b9729b7aaf3"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"0260de5b020a2c3f7baacd377579e8b969262ada","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    def connect(self):"},{"line_number":50,"context_line":"        self.store_node_map(self.nodes)"},{"line_number":51,"context_line":"        if len(self.nodeMap) is 0:"},{"line_number":52,"context_line":"            raise exception.VolumeDriverException(\"Unable to \""},{"line_number":53,"context_line":"                                                  \"connect to the nodes\")"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def get_session_id(self, node):"},{"line_number":56,"context_line":"        \"\"\"Retrieves the session Id"}],"source_content_type":"text/x-python","patch_set":63,"id":"3f79a3b5_9d2ba330","line":53,"range":{"start_line":52,"start_character":50,"end_line":53,"end_character":71},"updated":"2018-12-06 20:50:27.000000000","message":"This should be put into a variable using _() and then sent to the exception.","commit_id":"a51f2adf1871d925c84505583694a9de7bc2843c"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"0260de5b020a2c3f7baacd377579e8b969262ada","unresolved":false,"context_lines":[{"line_number":176,"context_line":"                          \"exception - %s\", data, node, e.args)"},{"line_number":177,"context_line":"                node \u003d self.get_pages_host()"},{"line_number":178,"context_line":"        else:"},{"line_number":179,"context_line":"            errmsg \u003d \"REST call status - %s\" % obj[\u0027status\u0027]"},{"line_number":180,"context_line":"            raise exception.VolumeDriverException(errmsg)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def create_vdisk(self, vDiskInfo):"}],"source_content_type":"text/x-python","patch_set":63,"id":"3f79a3b5_bd0f7fd3","line":179,"range":{"start_line":179,"start_character":12,"end_line":179,"end_character":22},"updated":"2018-12-06 20:50:27.000000000","message":"_()","commit_id":"a51f2adf1871d925c84505583694a9de7bc2843c"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"bd36311e86886e417c489dd5305c5ce9ee831d6d","unresolved":false,"context_lines":[{"line_number":476,"context_line":"            raise exception.VolumeDriverException(errmsg)"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"    def get_val_in_gb(self, value, unit):"},{"line_number":479,"context_line":"        unitRef \u003d {"},{"line_number":480,"context_line":"            \u0027B\u0027: 1,"},{"line_number":481,"context_line":"            \u0027KB\u0027: 1024,"},{"line_number":482,"context_line":"            \u0027MB\u0027: 1024 ** 2,"},{"line_number":483,"context_line":"            \u0027GB\u0027: 1024 ** 3,"},{"line_number":484,"context_line":"            \u0027TB\u0027: 1024 ** 4,"},{"line_number":485,"context_line":"            \u0027PB\u0027: 1024 ** 5"},{"line_number":486,"context_line":"        }"},{"line_number":487,"context_line":"        return value * unitRef[unit] / 1024 ** 3"},{"line_number":488,"context_line":""}],"source_content_type":"text/x-python","patch_set":64,"id":"3f79a3b5_54d26c06","line":485,"range":{"start_line":479,"start_character":19,"end_line":485,"end_character":27},"updated":"2018-12-11 19:47:05.000000000","message":"please, use oslo_utils.units","commit_id":"21ebc89998031b54214eb8075c0b29aaec311de2"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"537fe0722e82eed52a40db84feb0192f5a13097c","unresolved":false,"context_lines":[{"line_number":121,"context_line":"            except Exception:"},{"line_number":122,"context_line":"                LOG.exception(\u0027Retrying store_node_map with next node\u0027)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"            if exitFlag is True:"},{"line_number":125,"context_line":"                return"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def refresh_session_ids(self):"}],"source_content_type":"text/x-python","patch_set":65,"id":"3f79a3b5_4ee23b9d","line":124,"range":{"start_line":124,"start_character":23,"end_line":124,"end_character":31},"updated":"2018-12-19 17:44:00.000000000","message":"is True is redundant.","commit_id":"365f93a63311c0a407aea09b0292699a18260d7e"}],"doc/source/configuration/block-storage/drivers/hedvig_driver.rst":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"58e6bca9442b64d227735d259ba9dcfcf96d6552","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"Hedvig Volume Driver"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"Hedvig provides software-defined storage for enterprises building private, hybrid, or multi-cloud environments. Hedvig\u0027s patented Universal Data Plane technology forms a distributed, scale-out cluster that transforms commodity servers or cloud computing into a unified data fabric."}],"source_content_type":"text/x-rst","patch_set":71,"id":"ffd0ebdf_ee8e182d","line":2,"updated":"2019-01-04 21:41:05.000000000","message":"This file needs to be added to doc/source/configuration/block-storage/volume-drivers.rst","commit_id":"9e2c2f98fa20d540f5505a232798c20b3624e2a5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"58e6bca9442b64d227735d259ba9dcfcf96d6552","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"Hedvig Volume Driver"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"Hedvig provides software-defined storage for enterprises building private, hybrid, or multi-cloud environments. Hedvig\u0027s patented Universal Data Plane technology forms a distributed, scale-out cluster that transforms commodity servers or cloud computing into a unified data fabric."},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"The Hedvig Cinder Driver interacts with a configured backend Hedvig Cluster using REST APIs."}],"source_content_type":"text/x-rst","patch_set":71,"id":"ffd0ebdf_6e1ea80d","line":4,"updated":"2019-01-04 21:41:05.000000000","message":"Best to limit line length to 80 characters wherever possible.","commit_id":"9e2c2f98fa20d540f5505a232798c20b3624e2a5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"58e6bca9442b64d227735d259ba9dcfcf96d6552","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Using the Hedvig Volume Driver"},{"line_number":10,"context_line":"------------------------------"},{"line_number":11,"context_line":"With the Hedvig Volume Driver for OpenStack, you can :"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"- Integrate public and private clouds:"},{"line_number":14,"context_line":"    Build a unified hybrid environment to easily migrate to or from your data center and public clouds."}],"source_content_type":"text/x-rst","patch_set":71,"id":"ffd0ebdf_0e1b5c1b","line":11,"range":{"start_line":11,"start_character":52,"end_line":11,"end_character":53},"updated":"2019-01-04 21:41:05.000000000","message":"Extra space.","commit_id":"9e2c2f98fa20d540f5505a232798c20b3624e2a5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"58e6bca9442b64d227735d259ba9dcfcf96d6552","unresolved":false,"context_lines":[{"line_number":10,"context_line":"------------------------------"},{"line_number":11,"context_line":"With the Hedvig Volume Driver for OpenStack, you can :"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"- Integrate public and private clouds:"},{"line_number":14,"context_line":"    Build a unified hybrid environment to easily migrate to or from your data center and public clouds."},{"line_number":15,"context_line":"- Set granular virtual disk policies:"},{"line_number":16,"context_line":"    Assign enterprise-class features on a per volume basis to best fit your application requirements."},{"line_number":17,"context_line":"- Connect to any compute environment:"}],"source_content_type":"text/x-rst","patch_set":71,"id":"ffd0ebdf_aeafb092","line":14,"range":{"start_line":13,"start_character":37,"end_line":14,"end_character":4},"updated":"2019-01-04 21:41:05.000000000","message":"Not sure if this is going to format right. Did you run \"tox -e docs\" locally to see the results? It currently fails so I can\u0027t check.","commit_id":"9e2c2f98fa20d540f5505a232798c20b3624e2a5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"58e6bca9442b64d227735d259ba9dcfcf96d6552","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    Receive consistent high-IOPS performance for demanding applications through massive parallelism, dedicated flash, and edge cache configurations."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Requirement"},{"line_number":25,"context_line":"----------- "},{"line_number":26,"context_line":"Hedvig Volume Driver, version 1.0.0 and later, supports Hedvig release 3.0 and later. "},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Supported operations"}],"source_content_type":"text/x-rst","patch_set":71,"id":"ffd0ebdf_8e274c65","line":25,"range":{"start_line":25,"start_character":11,"end_line":25,"end_character":12},"updated":"2019-01-04 21:41:05.000000000","message":"Extra trailing space.","commit_id":"9e2c2f98fa20d540f5505a232798c20b3624e2a5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"58e6bca9442b64d227735d259ba9dcfcf96d6552","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Requirement"},{"line_number":25,"context_line":"----------- "},{"line_number":26,"context_line":"Hedvig Volume Driver, version 1.0.0 and later, supports Hedvig release 3.0 and later. "},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Supported operations"},{"line_number":29,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":71,"id":"ffd0ebdf_ae2c9047","line":26,"range":{"start_line":26,"start_character":85,"end_line":26,"end_character":86},"updated":"2019-01-04 21:41:05.000000000","message":"Trailing space.","commit_id":"9e2c2f98fa20d540f5505a232798c20b3624e2a5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"58e6bca9442b64d227735d259ba9dcfcf96d6552","unresolved":false,"context_lines":[{"line_number":47,"context_line":"The Hedvig Volume Driver can be configured by editing the cinder.conf file located in the /etc/cinder/ directory."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":".. code-block:: ini"},{"line_number":50,"context_line":"     "},{"line_number":51,"context_line":"    [DEFAULT]"},{"line_number":52,"context_line":"    enabled_backends\u003dhedvig"},{"line_number":53,"context_line":"    "}],"source_content_type":"text/x-rst","patch_set":71,"id":"ffd0ebdf_4e21644d","line":50,"range":{"start_line":50,"start_character":0,"end_line":50,"end_character":5},"updated":"2019-01-04 21:41:05.000000000","message":"Extra spaces in several places here.","commit_id":"9e2c2f98fa20d540f5505a232798c20b3624e2a5"}],"doc/source/configuration/block-storage/volume-drivers.rst":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"eb0804d43e382ce20b90ebcf358bb69560b4c8c4","unresolved":false,"context_lines":[{"line_number":75,"context_line":"   drivers/zadara-volume-driver"},{"line_number":76,"context_line":"   drivers/zfssa-iscsi-driver"},{"line_number":77,"context_line":"   drivers/zfssa-nfs-driver"},{"line_number":78,"context_line":"   drivers/hedvig-volume-driver"}],"source_content_type":"text/x-rst","patch_set":72,"id":"dfd5e7cf_d23bc799","line":78,"updated":"2019-01-07 22:17:18.000000000","message":"Looks like this should be after fujitsu and before hpe-3par.","commit_id":"e08707b06f788f4c10d69f7a9acef0956b9eacf9"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"bfbace3e8ac2542f0d756188a45836efb81d9b35","unresolved":false,"context_lines":[{"line_number":75,"context_line":"   drivers/zadara-volume-driver"},{"line_number":76,"context_line":"   drivers/zfssa-iscsi-driver"},{"line_number":77,"context_line":"   drivers/zfssa-nfs-driver"},{"line_number":78,"context_line":"   drivers/hedvig-volume-driver"}],"source_content_type":"text/x-rst","patch_set":72,"id":"dfd5e7cf_925e9fe4","line":78,"in_reply_to":"dfd5e7cf_d23bc799","updated":"2019-01-07 22:20:57.000000000","message":"Yes this should be in alphabetical order.","commit_id":"e08707b06f788f4c10d69f7a9acef0956b9eacf9"}],"requirements.txt":[{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"fd1dad1ce85f6e2695ee3ae9441d660692f4e718","unresolved":false,"context_lines":[{"line_number":11,"context_line":"httplib2\u003e\u003d0.7.5 # MIT"},{"line_number":12,"context_line":"iso8601\u003e\u003d0.1.11 # MIT"},{"line_number":13,"context_line":"ipaddress\u003e\u003d1.0.7;python_version\u003c\u00273.3\u0027 # PSF"},{"line_number":14,"context_line":"keystoneauth1\u003e\u003d2.20.0 # Apache-2.0"},{"line_number":15,"context_line":"keystonemiddleware\u003e\u003d4.12.0 # Apache-2.0"},{"line_number":16,"context_line":"lxml!\u003d3.7.0,\u003e\u003d2.3 # BSD"},{"line_number":17,"context_line":"oauth2client!\u003d4.0.0,\u003e\u003d1.5.0 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":11,"id":"3f044301_7714f24e","line":14,"range":{"start_line":14,"start_character":15,"end_line":14,"end_character":19},"updated":"2017-05-05 16:11:11.000000000","message":"we really need it?","commit_id":"034b60f00851215dcf32ad58e10a020f4170f678"}]}
