)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"9b2c5f220135b483f03bedf37d262f91b6af910c","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Mikhail Khodos \u003cmikhail.khodos@nexenta.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-10-26 03:48:53 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Re-add Nexenta driver."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This reverts commit Change-Id: I732612e671c57c0b611f1016f22c89a886a317f7."},{"line_number":10,"context_line":"Added some changes to pass tempest."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"3a29b11f_19031911","line":7,"updated":"2015-10-26 17:03:49.000000000","message":"The first line should not end with a period.","commit_id":"3c2c06b0da7aa0ef5e952207af5c2052466030c2"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"9b2c5f220135b483f03bedf37d262f91b6af910c","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Re-add Nexenta driver."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This reverts commit Change-Id: I732612e671c57c0b611f1016f22c89a886a317f7."},{"line_number":10,"context_line":"Added some changes to pass tempest."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I2ff4c79573322a9c0cd473a9d413e1fcdbe55ee0"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"3a29b11f_044bb05a","line":9,"updated":"2015-10-26 17:03:49.000000000","message":"Inspite of saying reverting, i think better would be to explain why it was removed.","commit_id":"3c2c06b0da7aa0ef5e952207af5c2052466030c2"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"9b2c5f220135b483f03bedf37d262f91b6af910c","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Re-add Nexenta driver."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This reverts commit Change-Id: I732612e671c57c0b611f1016f22c89a886a317f7."},{"line_number":10,"context_line":"Added some changes to pass tempest."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I2ff4c79573322a9c0cd473a9d413e1fcdbe55ee0"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"3a29b11f_6410644f","line":10,"updated":"2015-10-26 17:03:49.000000000","message":"Better to describe what was causing tempest failure and how you are fixing it.","commit_id":"3c2c06b0da7aa0ef5e952207af5c2052466030c2"},{"author":{"_account_id":17405,"name":"Jacob Gregor","email":"jgregor@us.ibm.com","username":"jgregor"},"change_message_id":"e1c43d0bd312f25bcb26922920c36bfe65ca5a78","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Nexenta drivers have been removed due to missing CI."},{"line_number":10,"context_line":"This reverts commit Change-Id:"},{"line_number":11,"context_line":"I732612e671c57c0b611f1016f22c89a886a317f7."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I2ff4c79573322a9c0cd473a9d413e1fcdbe55ee0"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"fa80f949_a46976c0","line":12,"updated":"2015-11-04 18:00:27.000000000","message":"I believe we need a DocImpact tag here since config options are being added. \n\nAlso I am thinking it might be a good idea to have a blueprint added. That way we can make sure it is in the release notes and can be tracked.","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"677e13d416b5a8327811aabd761b752c80b0288f","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Nexenta drivers have been removed due to missing CI."},{"line_number":10,"context_line":"This reverts commit Change-Id:"},{"line_number":11,"context_line":"I732612e671c57c0b611f1016f22c89a886a317f7."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I2ff4c79573322a9c0cd473a9d413e1fcdbe55ee0"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"da85f559_ed6973bf","line":12,"in_reply_to":"fa80f949_a46976c0","updated":"2015-11-10 15:37:56.000000000","message":"Done","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":17405,"name":"Jacob Gregor","email":"jgregor@us.ibm.com","username":"jgregor"},"change_message_id":"4db3960fbf67ef97d95b8f7443c120725421073b","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Mikhail Khodos \u003cmikhail.khodos@nexenta.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-11-27 06:45:35 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Re-add Nexenta driver."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This reverts commit Change-Id: I732612e671c57c0b611f1016f22c89a886a317f7."},{"line_number":10,"context_line":"Added some changes to pass tempest."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":24,"id":"9a8ffd7b_643aab9a","line":7,"updated":"2015-12-01 15:52:53.000000000","message":"First line in commit message should not end with a period.\n\nhttps://wiki.openstack.org/wiki/GitCommitMessages#Summary_of_Git_commit_message_structure","commit_id":"cea1f9f713a35368437bffc7815724c195ced0f7"},{"author":{"_account_id":17405,"name":"Jacob Gregor","email":"jgregor@us.ibm.com","username":"jgregor"},"change_message_id":"37ddbacd7a7118aa0b8897e0d46cff1ad486a703","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Re-add Nexenta driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Updated unit tests."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"DocImpact"},{"line_number":12,"context_line":"Implements: blueprint nexentastor-4-cinder-drivers"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":32,"id":"7a740942_4edd3d6f","line":9,"updated":"2015-12-10 16:46:48.000000000","message":"Looking back at previous patch sets, it looks like there was more information here describing this patch. Could you re-add that info and/or add more detail in general about this patch?","commit_id":"3d0e16e4e4e295aae5e9a89c74181de1a795c48c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4a37c3ad98f408d82beb0f7d758502a031379d78","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Alexey Khodos \u003calexey.khodos@nexenta.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-12-31 03:37:08 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Re-add Nexenta driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Driver was removed due to lack of CI."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":49,"id":"fa69d971_72fd8539","line":7,"updated":"2016-01-02 07:04:51.000000000","message":"s/driver/drivers\n\nThere are more than one drivers being added.","commit_id":"81d669db10e498f948ca9e443857b97726a352da"}],"cinder/exception.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"4cec480f9e8840830554693758b5319f1579b44c","unresolved":false,"context_lines":[{"line_number":1026,"context_line":""},{"line_number":1027,"context_line":""},{"line_number":1028,"context_line":"# NexentaStor driver exception"},{"line_number":1029,"context_line":"class NexentaException(CinderException):"},{"line_number":1030,"context_line":"    message \u003d _(\"%(message)s\")"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a7e1126_4d823996","line":1029,"updated":"2015-12-17 14:35:32.000000000","message":"Should it be inherited from VolumeDriverException exception?","commit_id":"1d0173f23c36d968113e4d4f69ab265c3fee3e4f"}],"cinder/tests/unit/test_nexenta.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"25f3502fb373eb9583f4c253a40b93919ec270e2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Copyright 2011 Nexenta Systems, Inc."},{"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":19,"id":"fa80f949_841c72c2","line":2,"updated":"2015-11-04 18:17:28.000000000","message":"2015 now","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"677e13d416b5a8327811aabd761b752c80b0288f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Copyright 2011 Nexenta Systems, Inc."},{"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":19,"id":"da85f559_82a516b6","line":2,"in_reply_to":"fa80f949_841c72c2","updated":"2015-11-10 15:37:56.000000000","message":"Done","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"25f3502fb373eb9583f4c253a40b93919ec270e2","unresolved":false,"context_lines":[{"line_number":17,"context_line":"Unit tests for OpenStack Cinder volume driver"},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from mox3 import mox as mox_lib"},{"line_number":21,"context_line":"from oslo_utils import units"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from cinder import context"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa80f949_2461063a","line":20,"updated":"2015-11-04 18:17:28.000000000","message":"We should use mock instead of mox for new unit tests.","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"677e13d416b5a8327811aabd761b752c80b0288f","unresolved":false,"context_lines":[{"line_number":17,"context_line":"Unit tests for OpenStack Cinder volume driver"},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from mox3 import mox as mox_lib"},{"line_number":21,"context_line":"from oslo_utils import units"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from cinder import context"}],"source_content_type":"text/x-python","patch_set":19,"id":"da85f559_02928657","line":20,"in_reply_to":"fa80f949_2461063a","updated":"2015-11-10 15:37:56.000000000","message":"these are not new, really","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ea1359e11a81dca6aac131ec3b680b0846a0eaa9","unresolved":false,"context_lines":[{"line_number":277,"context_line":"            \u0027health|size|used|available\u0027).AndReturn(stats)"},{"line_number":278,"context_line":"        self.mox.ReplayAll()"},{"line_number":279,"context_line":"        stats \u003d self.drv.get_volume_stats(True)"},{"line_number":280,"context_line":"        self.assertEqual(stats[\u0027storage_protocol\u0027], \u0027iSCSI\u0027)"},{"line_number":281,"context_line":"        self.assertEqual(stats[\u0027total_capacity_gb\u0027], 5368709120.0)"},{"line_number":282,"context_line":"        self.assertEqual(stats[\u0027free_capacity_gb\u0027], 5368709120.0)"},{"line_number":283,"context_line":"        self.assertEqual(stats[\u0027reserved_percentage\u0027], 20)"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa80f949_c3aa9019","line":280,"updated":"2015-11-04 03:17:23.000000000","message":"assertEqual arguments should be in the order (expected,actual).","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"677e13d416b5a8327811aabd761b752c80b0288f","unresolved":false,"context_lines":[{"line_number":277,"context_line":"            \u0027health|size|used|available\u0027).AndReturn(stats)"},{"line_number":278,"context_line":"        self.mox.ReplayAll()"},{"line_number":279,"context_line":"        stats \u003d self.drv.get_volume_stats(True)"},{"line_number":280,"context_line":"        self.assertEqual(stats[\u0027storage_protocol\u0027], \u0027iSCSI\u0027)"},{"line_number":281,"context_line":"        self.assertEqual(stats[\u0027total_capacity_gb\u0027], 5368709120.0)"},{"line_number":282,"context_line":"        self.assertEqual(stats[\u0027free_capacity_gb\u0027], 5368709120.0)"},{"line_number":283,"context_line":"        self.assertEqual(stats[\u0027reserved_percentage\u0027], 20)"}],"source_content_type":"text/x-python","patch_set":19,"id":"da85f559_4d5bdf2e","line":280,"in_reply_to":"fa80f949_c3aa9019","updated":"2015-11-10 15:37:56.000000000","message":"Done","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"4cec480f9e8840830554693758b5319f1579b44c","unresolved":false,"context_lines":[{"line_number":17,"context_line":"Unit tests for OpenStack Cinder volume driver"},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from mox3 import mox as mox_lib"},{"line_number":21,"context_line":"from oslo_utils import units"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from cinder import context"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a7e1126_cd12a962","line":20,"updated":"2015-12-17 14:35:32.000000000","message":"Please, migrate your tests to mock","commit_id":"1d0173f23c36d968113e4d4f69ab265c3fee3e4f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9a7edec7a7203c45bfd23fd4fc46afd93229aaca","unresolved":false,"context_lines":[{"line_number":17,"context_line":"Unit tests for OpenStack Cinder volume driver"},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from mox3 import mox as mox_lib"},{"line_number":21,"context_line":"from oslo_utils import units"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from cinder import context"}],"source_content_type":"text/x-python","patch_set":37,"id":"1a7b0d38_5ca0d2f4","line":20,"in_reply_to":"3a7e1126_cd12a962","updated":"2015-12-23 02:34:35.000000000","message":"I was asking about this as well in patch set 19, but tests are still using mox in the latest patch set.","commit_id":"1d0173f23c36d968113e4d4f69ab265c3fee3e4f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0618d2cb8afa424f162051b8d370a61e98503a3e","unresolved":false,"context_lines":[{"line_number":285,"context_line":"        self.assertEqual(5368709120.0, stats[\u0027total_capacity_gb\u0027])"},{"line_number":286,"context_line":"        self.assertEqual(5368709120.0, stats[\u0027free_capacity_gb\u0027])"},{"line_number":287,"context_line":"        self.assertEqual(20, stats[\u0027reserved_percentage\u0027])"},{"line_number":288,"context_line":"        self.assertEqual(False, stats[\u0027QoS_support\u0027])"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"    def _create_volume_db_entry(self):"},{"line_number":291,"context_line":"        vol \u003d {"}],"source_content_type":"text/x-python","patch_set":52,"id":"fa69d971_7380598c","line":288,"updated":"2016-01-07 20:40:07.000000000","message":"Should be assertFalse","commit_id":"e43fdc09424caed2a72730052e563b377eb842c4"}],"cinder/volume/drivers/nexenta/__init__.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8d0ee55158edd97266dea71418fad17d92fb9148","unresolved":false,"context_lines":[{"line_number":21,"context_line":"\"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class NexentaException(Exception):"},{"line_number":25,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_a12f5cf5","line":24,"updated":"2015-06-19 21:06:23.000000000","message":"This seems very unnecessary.","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"c40b0d5e73c6985bf5af2a9bf7fcf9707b294d1a","unresolved":false,"context_lines":[{"line_number":21,"context_line":"\"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class NexentaException(Exception):"},{"line_number":25,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_647162e0","line":24,"in_reply_to":"fa32b979_a12f5cf5","updated":"2015-06-19 21:42:27.000000000","message":"Done","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"a249ce466a485b30bd9b1ae2daa6465e5bf1e45c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2011-2015 Nexenta Systems, 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":19,"id":"fa80f949_aefda53b","line":1,"updated":"2015-11-05 17:56:27.000000000","message":"2015","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"677e13d416b5a8327811aabd761b752c80b0288f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2011-2015 Nexenta Systems, 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":19,"id":"da85f559_c7eed0b3","line":1,"in_reply_to":"fa80f949_aefda53b","updated":"2015-11-10 15:37:56.000000000","message":"Done","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"a249ce466a485b30bd9b1ae2daa6465e5bf1e45c","unresolved":false,"context_lines":[{"line_number":19,"context_line":".. automodule:: nexenta"},{"line_number":20,"context_line":".. moduleauthor:: Nexenta OpenStack Developers \u003copenstack.team@nexenta.com\u003e"},{"line_number":21,"context_line":"\"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class NexentaException(Exception):"},{"line_number":25,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa80f949_cef8294c","line":22,"updated":"2015-11-05 17:56:27.000000000","message":"Don’t use author tags. http://docs.openstack.org/developer/hacking/#general","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"677e13d416b5a8327811aabd761b752c80b0288f","unresolved":false,"context_lines":[{"line_number":19,"context_line":".. automodule:: nexenta"},{"line_number":20,"context_line":".. moduleauthor:: Nexenta OpenStack Developers \u003copenstack.team@nexenta.com\u003e"},{"line_number":21,"context_line":"\"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class NexentaException(Exception):"},{"line_number":25,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":19,"id":"da85f559_2736bc52","line":22,"in_reply_to":"fa80f949_cef8294c","updated":"2015-11-10 15:37:56.000000000","message":"Done","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"25f3502fb373eb9583f4c253a40b93919ec270e2","unresolved":false,"context_lines":[{"line_number":21,"context_line":"\"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class NexentaException(Exception):"},{"line_number":25,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa80f949_e45a1e83","line":24,"updated":"2015-11-04 18:17:28.000000000","message":"This should be moved to exception.py under cinder and inherit from CinderException.","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"677e13d416b5a8327811aabd761b752c80b0288f","unresolved":false,"context_lines":[{"line_number":21,"context_line":"\"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class NexentaException(Exception):"},{"line_number":25,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":19,"id":"da85f559_073cd82d","line":24,"in_reply_to":"fa80f949_e45a1e83","updated":"2015-11-10 15:37:56.000000000","message":"Done","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"}],"cinder/volume/drivers/nexenta/iscsi.py":[{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"17df8cc5a216250998b4d546b38d89cafd51e3d3","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        :param volume: volume reference"},{"line_number":155,"context_line":"        :param new_size: volume new size in GB"},{"line_number":156,"context_line":"        \"\"\""},{"line_number":157,"context_line":"        LOG.info(_LI(\u0027Extending volume: %(id)s New size: %(size)s GB\u0027),"},{"line_number":158,"context_line":"                 {\u0027id\u0027: volume[\u0027id\u0027], \u0027size\u0027: new_size})"},{"line_number":159,"context_line":"        self.nms.zvol.set_child_prop(self._get_zvol_name(volume[\u0027name\u0027]),"},{"line_number":160,"context_line":"                                     \u0027volsize\u0027, \u0027%sG\u0027 % new_size)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3afb71cf_af55fd50","line":157,"updated":"2015-06-07 13:44:35.000000000","message":"Please add a period \u0027.\u0027 by the end of the log.","commit_id":"5330167879f85d257b76f96bf513aa0fe2e37799"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"8445a72de48a87b58609a0cbbd261b80cb046b43","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        :param volume: volume reference"},{"line_number":155,"context_line":"        :param new_size: volume new size in GB"},{"line_number":156,"context_line":"        \"\"\""},{"line_number":157,"context_line":"        LOG.info(_LI(\u0027Extending volume: %(id)s New size: %(size)s GB\u0027),"},{"line_number":158,"context_line":"                 {\u0027id\u0027: volume[\u0027id\u0027], \u0027size\u0027: new_size})"},{"line_number":159,"context_line":"        self.nms.zvol.set_child_prop(self._get_zvol_name(volume[\u0027name\u0027]),"},{"line_number":160,"context_line":"                                     \u0027volsize\u0027, \u0027%sG\u0027 % new_size)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_22715576","line":157,"in_reply_to":"3afb71cf_af55fd50","updated":"2015-06-18 16:11:59.000000000","message":"Done","commit_id":"5330167879f85d257b76f96bf513aa0fe2e37799"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"eaf06c5fc77cc9d12762ef71b6b56969f3dd63f8","unresolved":false,"context_lines":[{"line_number":270,"context_line":"                break"},{"line_number":271,"context_line":"        if not ssh_bound:"},{"line_number":272,"context_line":"            LOG.warning(_LW(\"Remote NexentaStor appliance at %s should be \""},{"line_number":273,"context_line":"                            \"SSH-bound.\"), dst_host)"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"        # Create temporary snapshot of volume on NexentaStor Appliance."},{"line_number":276,"context_line":"        snapshot \u003d {"}],"source_content_type":"text/x-python","patch_set":4,"id":"3afb71cf_a6abe2d5","line":273,"updated":"2015-06-07 22:50:12.000000000","message":"Destination is non reachable via ssh, maybe return False?","commit_id":"5330167879f85d257b76f96bf513aa0fe2e37799"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"8445a72de48a87b58609a0cbbd261b80cb046b43","unresolved":false,"context_lines":[{"line_number":270,"context_line":"                break"},{"line_number":271,"context_line":"        if not ssh_bound:"},{"line_number":272,"context_line":"            LOG.warning(_LW(\"Remote NexentaStor appliance at %s should be \""},{"line_number":273,"context_line":"                            \"SSH-bound.\"), dst_host)"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"        # Create temporary snapshot of volume on NexentaStor Appliance."},{"line_number":276,"context_line":"        snapshot \u003d {"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_02fd31b3","line":273,"in_reply_to":"3afb71cf_a6abe2d5","updated":"2015-06-18 16:11:59.000000000","message":"Done","commit_id":"5330167879f85d257b76f96bf513aa0fe2e37799"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"eaf06c5fc77cc9d12762ef71b6b56969f3dd63f8","unresolved":false,"context_lines":[{"line_number":345,"context_line":"        migrated \u003d False"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"        capabilities \u003d host[\u0027capabilities\u0027]"},{"line_number":348,"context_line":"        src_backend \u003d self.__class__.__name__"},{"line_number":349,"context_line":"        dst_backend \u003d capabilities[\u0027location_info\u0027].split(\u0027:\u0027)[0]"},{"line_number":350,"context_line":"        if src_backend !\u003d dst_backend:"},{"line_number":351,"context_line":"            LOG.warning(_LW(\u0027Cannot retype from %(src_backend)s to \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"3afb71cf_067d166e","line":348,"updated":"2015-06-07 22:50:12.000000000","message":"Can you use self.backend_name, since it\u0027s available?","commit_id":"5330167879f85d257b76f96bf513aa0fe2e37799"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"8445a72de48a87b58609a0cbbd261b80cb046b43","unresolved":false,"context_lines":[{"line_number":345,"context_line":"        migrated \u003d False"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"        capabilities \u003d host[\u0027capabilities\u0027]"},{"line_number":348,"context_line":"        src_backend \u003d self.__class__.__name__"},{"line_number":349,"context_line":"        dst_backend \u003d capabilities[\u0027location_info\u0027].split(\u0027:\u0027)[0]"},{"line_number":350,"context_line":"        if src_backend !\u003d dst_backend:"},{"line_number":351,"context_line":"            LOG.warning(_LW(\u0027Cannot retype from %(src_backend)s to \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_1f534e6c","line":348,"in_reply_to":"3afb71cf_067d166e","updated":"2015-06-18 16:11:59.000000000","message":"backend_names can differ between 2 hosts, but \u0027real\u0027 backend still the same, so we can retype.","commit_id":"5330167879f85d257b76f96bf513aa0fe2e37799"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"eaf06c5fc77cc9d12762ef71b6b56969f3dd63f8","unresolved":false,"context_lines":[{"line_number":426,"context_line":"                return"},{"line_number":427,"context_line":"            raise"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"    def local_path(self, volume):"},{"line_number":430,"context_line":"        \"\"\"Return local path to existing local volume."},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"        We never have local volumes, so it raises NotImplementedError."}],"source_content_type":"text/x-python","patch_set":4,"id":"3afb71cf_46eaee10","line":429,"updated":"2015-06-07 22:50:12.000000000","message":"VolumeDriver already raises NotImplementedError","commit_id":"5330167879f85d257b76f96bf513aa0fe2e37799"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"8445a72de48a87b58609a0cbbd261b80cb046b43","unresolved":false,"context_lines":[{"line_number":426,"context_line":"                return"},{"line_number":427,"context_line":"            raise"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"    def local_path(self, volume):"},{"line_number":430,"context_line":"        \"\"\"Return local path to existing local volume."},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"        We never have local volumes, so it raises NotImplementedError."}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_822f013e","line":429,"in_reply_to":"3afb71cf_46eaee10","updated":"2015-06-18 16:11:59.000000000","message":"removed","commit_id":"5330167879f85d257b76f96bf513aa0fe2e37799"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"eaf06c5fc77cc9d12762ef71b6b56969f3dd63f8","unresolved":false,"context_lines":[{"line_number":566,"context_line":"                    \u0027target_name\u0027: target_name})"},{"line_number":567,"context_line":"            except nexenta.NexentaException as exc:"},{"line_number":568,"context_line":"                if ensure and \u0027already configured\u0027 in exc.args[0]:"},{"line_number":569,"context_line":"                    LOG.info(_LI(\u0027Ignored target creation error \"%s\" while \u0027"},{"line_number":570,"context_line":"                                 \u0027ensuring export\u0027), exc)"},{"line_number":571,"context_line":"                else:"},{"line_number":572,"context_line":"                    raise"}],"source_content_type":"text/x-python","patch_set":4,"id":"3afb71cf_e6f67af8","line":569,"updated":"2015-06-07 22:50:12.000000000","message":"LOG.error?","commit_id":"5330167879f85d257b76f96bf513aa0fe2e37799"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"8445a72de48a87b58609a0cbbd261b80cb046b43","unresolved":false,"context_lines":[{"line_number":566,"context_line":"                    \u0027target_name\u0027: target_name})"},{"line_number":567,"context_line":"            except nexenta.NexentaException as exc:"},{"line_number":568,"context_line":"                if ensure and \u0027already configured\u0027 in exc.args[0]:"},{"line_number":569,"context_line":"                    LOG.info(_LI(\u0027Ignored target creation error \"%s\" while \u0027"},{"line_number":570,"context_line":"                                 \u0027ensuring export\u0027), exc)"},{"line_number":571,"context_line":"                else:"},{"line_number":572,"context_line":"                    raise"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_8229418c","line":569,"in_reply_to":"3afb71cf_e6f67af8","updated":"2015-06-18 16:11:59.000000000","message":"warning is ok","commit_id":"5330167879f85d257b76f96bf513aa0fe2e37799"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"17df8cc5a216250998b4d546b38d89cafd51e3d3","unresolved":false,"context_lines":[{"line_number":567,"context_line":"            except nexenta.NexentaException as exc:"},{"line_number":568,"context_line":"                if ensure and \u0027already configured\u0027 in exc.args[0]:"},{"line_number":569,"context_line":"                    LOG.info(_LI(\u0027Ignored target creation error \"%s\" while \u0027"},{"line_number":570,"context_line":"                                 \u0027ensuring export\u0027), exc)"},{"line_number":571,"context_line":"                else:"},{"line_number":572,"context_line":"                    raise"},{"line_number":573,"context_line":"        if not self._target_group_exists(target_group_name):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3afb71cf_0fcbf11f","line":570,"updated":"2015-06-07 13:44:35.000000000","message":"Same.","commit_id":"5330167879f85d257b76f96bf513aa0fe2e37799"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"8445a72de48a87b58609a0cbbd261b80cb046b43","unresolved":false,"context_lines":[{"line_number":567,"context_line":"            except nexenta.NexentaException as exc:"},{"line_number":568,"context_line":"                if ensure and \u0027already configured\u0027 in exc.args[0]:"},{"line_number":569,"context_line":"                    LOG.info(_LI(\u0027Ignored target creation error \"%s\" while \u0027"},{"line_number":570,"context_line":"                                 \u0027ensuring export\u0027), exc)"},{"line_number":571,"context_line":"                else:"},{"line_number":572,"context_line":"                    raise"},{"line_number":573,"context_line":"        if not self._target_group_exists(target_group_name):"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_a23245a5","line":570,"in_reply_to":"3afb71cf_0fcbf11f","updated":"2015-06-18 16:11:59.000000000","message":"Done","commit_id":"5330167879f85d257b76f96bf513aa0fe2e37799"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"eaf06c5fc77cc9d12762ef71b6b56969f3dd63f8","unresolved":false,"context_lines":[{"line_number":576,"context_line":"            except nexenta.NexentaException as exc:"},{"line_number":577,"context_line":"                if ((ensure and \u0027already exists\u0027 in exc.args[0]) or"},{"line_number":578,"context_line":"                        \u0027target must be offline\u0027 in exc.args[0]):"},{"line_number":579,"context_line":"                    LOG.info(_LI(\u0027Ignored target group creation error \"%s\" \u0027"},{"line_number":580,"context_line":"                                 \u0027while ensuring export\u0027), exc)"},{"line_number":581,"context_line":"                else:"},{"line_number":582,"context_line":"                    raise"}],"source_content_type":"text/x-python","patch_set":4,"id":"3afb71cf_06f4f6ef","line":579,"updated":"2015-06-07 22:50:12.000000000","message":"LOG.error?","commit_id":"5330167879f85d257b76f96bf513aa0fe2e37799"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"8445a72de48a87b58609a0cbbd261b80cb046b43","unresolved":false,"context_lines":[{"line_number":576,"context_line":"            except nexenta.NexentaException as exc:"},{"line_number":577,"context_line":"                if ((ensure and \u0027already exists\u0027 in exc.args[0]) or"},{"line_number":578,"context_line":"                        \u0027target must be offline\u0027 in exc.args[0]):"},{"line_number":579,"context_line":"                    LOG.info(_LI(\u0027Ignored target group creation error \"%s\" \u0027"},{"line_number":580,"context_line":"                                 \u0027while ensuring export\u0027), exc)"},{"line_number":581,"context_line":"                else:"},{"line_number":582,"context_line":"                    raise"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_223955d7","line":579,"in_reply_to":"3afb71cf_06f4f6ef","updated":"2015-06-18 16:11:59.000000000","message":"warning is ok","commit_id":"5330167879f85d257b76f96bf513aa0fe2e37799"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"17df8cc5a216250998b4d546b38d89cafd51e3d3","unresolved":false,"context_lines":[{"line_number":577,"context_line":"                if ((ensure and \u0027already exists\u0027 in exc.args[0]) or"},{"line_number":578,"context_line":"                        \u0027target must be offline\u0027 in exc.args[0]):"},{"line_number":579,"context_line":"                    LOG.info(_LI(\u0027Ignored target group creation error \"%s\" \u0027"},{"line_number":580,"context_line":"                                 \u0027while ensuring export\u0027), exc)"},{"line_number":581,"context_line":"                else:"},{"line_number":582,"context_line":"                    raise"},{"line_number":583,"context_line":"        if not self._target_member_in_target_group(target_group_name,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3afb71cf_afdcdde4","line":580,"updated":"2015-06-07 13:44:35.000000000","message":"Same.","commit_id":"5330167879f85d257b76f96bf513aa0fe2e37799"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"8445a72de48a87b58609a0cbbd261b80cb046b43","unresolved":false,"context_lines":[{"line_number":577,"context_line":"                if ((ensure and \u0027already exists\u0027 in exc.args[0]) or"},{"line_number":578,"context_line":"                        \u0027target must be offline\u0027 in exc.args[0]):"},{"line_number":579,"context_line":"                    LOG.info(_LI(\u0027Ignored target group creation error \"%s\" \u0027"},{"line_number":580,"context_line":"                                 \u0027while ensuring export\u0027), exc)"},{"line_number":581,"context_line":"                else:"},{"line_number":582,"context_line":"                    raise"},{"line_number":583,"context_line":"        if not self._target_member_in_target_group(target_group_name,"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_42257959","line":580,"in_reply_to":"3afb71cf_afdcdde4","updated":"2015-06-18 16:11:59.000000000","message":"Done","commit_id":"5330167879f85d257b76f96bf513aa0fe2e37799"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"eaf06c5fc77cc9d12762ef71b6b56969f3dd63f8","unresolved":false,"context_lines":[{"line_number":588,"context_line":"            except nexenta.NexentaException as exc:"},{"line_number":589,"context_line":"                if ((ensure and \u0027already exists\u0027 in exc.args[0]) or"},{"line_number":590,"context_line":"                        \u0027target must be offline\u0027 in exc.args[0]):"},{"line_number":591,"context_line":"                    LOG.info(_LI(\u0027Ignored target group member addition error \u0027"},{"line_number":592,"context_line":"                                 \u0027\"%s\" while ensuring export\u0027), exc)"},{"line_number":593,"context_line":"                else:"},{"line_number":594,"context_line":"                    raise"}],"source_content_type":"text/x-python","patch_set":4,"id":"3afb71cf_a6d9a285","line":591,"updated":"2015-06-07 22:50:12.000000000","message":"LOG.error?","commit_id":"5330167879f85d257b76f96bf513aa0fe2e37799"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"8445a72de48a87b58609a0cbbd261b80cb046b43","unresolved":false,"context_lines":[{"line_number":588,"context_line":"            except nexenta.NexentaException as exc:"},{"line_number":589,"context_line":"                if ((ensure and \u0027already exists\u0027 in exc.args[0]) or"},{"line_number":590,"context_line":"                        \u0027target must be offline\u0027 in exc.args[0]):"},{"line_number":591,"context_line":"                    LOG.info(_LI(\u0027Ignored target group member addition error \u0027"},{"line_number":592,"context_line":"                                 \u0027\"%s\" while ensuring export\u0027), exc)"},{"line_number":593,"context_line":"                else:"},{"line_number":594,"context_line":"                    raise"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_8250610c","line":591,"in_reply_to":"3afb71cf_a6d9a285","updated":"2015-06-18 16:11:59.000000000","message":"warning is ok","commit_id":"5330167879f85d257b76f96bf513aa0fe2e37799"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"eaf06c5fc77cc9d12762ef71b6b56969f3dd63f8","unresolved":false,"context_lines":[{"line_number":598,"context_line":"            except nexenta.NexentaException as exc:"},{"line_number":599,"context_line":"                if not ensure or \u0027in use\u0027 not in exc.args[0]:"},{"line_number":600,"context_line":"                    raise"},{"line_number":601,"context_line":"                LOG.info(_LI(\u0027Ignored LU creation error \"%s\" while ensuring \u0027"},{"line_number":602,"context_line":"                             \u0027export\u0027), exc)"},{"line_number":603,"context_line":"        if not self._is_lu_shared(zvol_name):"},{"line_number":604,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3afb71cf_86e8e611","line":601,"updated":"2015-06-07 22:50:12.000000000","message":"This log statement should go before raise.\n\nAlso it\u0027s an error log","commit_id":"5330167879f85d257b76f96bf513aa0fe2e37799"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"8445a72de48a87b58609a0cbbd261b80cb046b43","unresolved":false,"context_lines":[{"line_number":598,"context_line":"            except nexenta.NexentaException as exc:"},{"line_number":599,"context_line":"                if not ensure or \u0027in use\u0027 not in exc.args[0]:"},{"line_number":600,"context_line":"                    raise"},{"line_number":601,"context_line":"                LOG.info(_LI(\u0027Ignored LU creation error \"%s\" while ensuring \u0027"},{"line_number":602,"context_line":"                             \u0027export\u0027), exc)"},{"line_number":603,"context_line":"        if not self._is_lu_shared(zvol_name):"},{"line_number":604,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_22407533","line":601,"in_reply_to":"3afb71cf_86e8e611","updated":"2015-06-18 16:11:59.000000000","message":"Done","commit_id":"5330167879f85d257b76f96bf513aa0fe2e37799"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8d0ee55158edd97266dea71418fad17d92fb9148","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2011 Nexenta Systems, 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":9,"id":"fa32b979_013f2826","line":1,"updated":"2015-06-19 21:06:23.000000000","message":"Update copyright?","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8d0ee55158edd97266dea71418fad17d92fb9148","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        self.rrmgr_compression \u003d self.configuration.nexenta_rrmgr_compression"},{"line_number":82,"context_line":"        self.rrmgr_tcp_buf_size \u003d self.configuration.nexenta_rrmgr_tcp_buf_size"},{"line_number":83,"context_line":"        self.rrmgr_connections \u003d self.configuration.nexenta_rrmgr_connections"},{"line_number":84,"context_line":"        self.iscsi_target_portal_port \u003d \\"},{"line_number":85,"context_line":"            self.configuration.nexenta_iscsi_target_portal_port"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_a1167ca5","line":84,"updated":"2015-06-19 21:06:23.000000000","message":"Use of \\ for line continuation is discouraged. It would be better to do:\n\nself.iscsi_target_portal_port \u003d (\n    self.configuration.etc)","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"c40b0d5e73c6985bf5af2a9bf7fcf9707b294d1a","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        self.rrmgr_compression \u003d self.configuration.nexenta_rrmgr_compression"},{"line_number":82,"context_line":"        self.rrmgr_tcp_buf_size \u003d self.configuration.nexenta_rrmgr_tcp_buf_size"},{"line_number":83,"context_line":"        self.rrmgr_connections \u003d self.configuration.nexenta_rrmgr_connections"},{"line_number":84,"context_line":"        self.iscsi_target_portal_port \u003d \\"},{"line_number":85,"context_line":"            self.configuration.nexenta_iscsi_target_portal_port"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_c7e63044","line":84,"in_reply_to":"fa32b979_a1167ca5","updated":"2015-06-19 21:42:27.000000000","message":"Done","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8d0ee55158edd97266dea71418fad17d92fb9148","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        \"\"\""},{"line_number":181,"context_line":"        self.nms.zvol.create("},{"line_number":182,"context_line":"            self._get_zvol_name(volume[\u0027name\u0027]),"},{"line_number":183,"context_line":"            \u0027%sG\u0027 % (volume[\u0027size\u0027],),"},{"line_number":184,"context_line":"            self.configuration.nexenta_blocksize,"},{"line_number":185,"context_line":"            self.configuration.nexenta_sparse)"},{"line_number":186,"context_line":"        return self.create_export(None, volume)"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_815fb874","line":183,"updated":"2015-06-19 21:06:23.000000000","message":"(,) is unnecessary.","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"c40b0d5e73c6985bf5af2a9bf7fcf9707b294d1a","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        \"\"\""},{"line_number":181,"context_line":"        self.nms.zvol.create("},{"line_number":182,"context_line":"            self._get_zvol_name(volume[\u0027name\u0027]),"},{"line_number":183,"context_line":"            \u0027%sG\u0027 % (volume[\u0027size\u0027],),"},{"line_number":184,"context_line":"            self.configuration.nexenta_blocksize,"},{"line_number":185,"context_line":"            self.configuration.nexenta_sparse)"},{"line_number":186,"context_line":"        return self.create_export(None, volume)"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_27c11c81","line":183,"in_reply_to":"fa32b979_815fb874","updated":"2015-06-19 21:42:27.000000000","message":"Done","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8d0ee55158edd97266dea71418fad17d92fb9148","unresolved":false,"context_lines":[{"line_number":260,"context_line":"    @staticmethod"},{"line_number":261,"context_line":"    def get_nms_for_url(url):"},{"line_number":262,"context_line":"        \"\"\"Returns initialized nms object for url.\"\"\""},{"line_number":263,"context_line":"        auto, scheme, user, password, host, port, path \u003d\\"},{"line_number":264,"context_line":"            utils.parse_nms_url(url)"},{"line_number":265,"context_line":"        return jsonrpc.NexentaJSONProxy(scheme, host, port, path, user,"},{"line_number":266,"context_line":"                                        password, auto\u003dauto)"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_41d0d0c9","line":263,"updated":"2015-06-19 21:06:23.000000000","message":"Use () to avoid \\","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"c40b0d5e73c6985bf5af2a9bf7fcf9707b294d1a","unresolved":false,"context_lines":[{"line_number":260,"context_line":"    @staticmethod"},{"line_number":261,"context_line":"    def get_nms_for_url(url):"},{"line_number":262,"context_line":"        \"\"\"Returns initialized nms object for url.\"\"\""},{"line_number":263,"context_line":"        auto, scheme, user, password, host, port, path \u003d\\"},{"line_number":264,"context_line":"            utils.parse_nms_url(url)"},{"line_number":265,"context_line":"        return jsonrpc.NexentaJSONProxy(scheme, host, port, path, user,"},{"line_number":266,"context_line":"                                        password, auto\u003dauto)"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_8736e8b2","line":263,"in_reply_to":"fa32b979_41d0d0c9","updated":"2015-06-19 21:42:27.000000000","message":"Done","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8d0ee55158edd97266dea71418fad17d92fb9148","unresolved":false,"context_lines":[{"line_number":272,"context_line":"        :param volume: a dictionary describing the volume to migrate"},{"line_number":273,"context_line":"        :param host: a dictionary describing the host to migrate to"},{"line_number":274,"context_line":"        \"\"\""},{"line_number":275,"context_line":"        LOG.debug(\u0027Enter: migrate_volume: id\u003d%(id)s, host\u003d%(host)s\u0027 %"},{"line_number":276,"context_line":"                  {\u0027id\u0027: volume[\u0027id\u0027], \u0027host\u0027: host})"},{"line_number":277,"context_line":"        false_ret \u003d (False, None)"},{"line_number":278,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_61d5d4b7","line":275,"updated":"2015-06-19 21:06:23.000000000","message":"Change % to ,","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"c40b0d5e73c6985bf5af2a9bf7fcf9707b294d1a","unresolved":false,"context_lines":[{"line_number":272,"context_line":"        :param volume: a dictionary describing the volume to migrate"},{"line_number":273,"context_line":"        :param host: a dictionary describing the host to migrate to"},{"line_number":274,"context_line":"        \"\"\""},{"line_number":275,"context_line":"        LOG.debug(\u0027Enter: migrate_volume: id\u003d%(id)s, host\u003d%(host)s\u0027 %"},{"line_number":276,"context_line":"                  {\u0027id\u0027: volume[\u0027id\u0027], \u0027host\u0027: host})"},{"line_number":277,"context_line":"        false_ret \u003d (False, None)"},{"line_number":278,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_a73bec9b","line":275,"in_reply_to":"fa32b979_61d5d4b7","updated":"2015-06-19 21:42:27.000000000","message":"Done","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8d0ee55158edd97266dea71418fad17d92fb9148","unresolved":false,"context_lines":[{"line_number":284,"context_line":""},{"line_number":285,"context_line":"        capabilities \u003d host[\u0027capabilities\u0027]"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"        if \u0027location_info\u0027 not in capabilities or \\"},{"line_number":288,"context_line":"                \u0027iscsi_target_portal_port\u0027 not in capabilities or \\"},{"line_number":289,"context_line":"                \u0027nms_url\u0027 not in capabilities:"},{"line_number":290,"context_line":"            return false_ret"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_c1e4e0ad","line":287,"updated":"2015-06-19 21:06:23.000000000","message":"Wrap conditions in () to get rid of the \\\u0027s.","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"c40b0d5e73c6985bf5af2a9bf7fcf9707b294d1a","unresolved":false,"context_lines":[{"line_number":284,"context_line":""},{"line_number":285,"context_line":"        capabilities \u003d host[\u0027capabilities\u0027]"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"        if \u0027location_info\u0027 not in capabilities or \\"},{"line_number":288,"context_line":"                \u0027iscsi_target_portal_port\u0027 not in capabilities or \\"},{"line_number":289,"context_line":"                \u0027nms_url\u0027 not in capabilities:"},{"line_number":290,"context_line":"            return false_ret"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_6745e415","line":287,"in_reply_to":"fa32b979_c1e4e0ad","updated":"2015-06-19 21:42:27.000000000","message":"Done","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8d0ee55158edd97266dea71418fad17d92fb9148","unresolved":false,"context_lines":[{"line_number":292,"context_line":"        nms_url \u003d capabilities[\u0027nms_url\u0027]"},{"line_number":293,"context_line":"        dst_parts \u003d capabilities[\u0027location_info\u0027].split(\u0027:\u0027)"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"        if capabilities.get(\u0027vendor_name\u0027) !\u003d \u0027Nexenta\u0027 or \\"},{"line_number":296,"context_line":"                dst_parts[0] !\u003d self.__class__.__name__ or \\"},{"line_number":297,"context_line":"                capabilities[\u0027free_capacity_gb\u0027] \u003c volume[\u0027size\u0027]:"},{"line_number":298,"context_line":"            return false_ret"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_61ecf48f","line":295,"updated":"2015-06-19 21:06:23.000000000","message":"Same.","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"c40b0d5e73c6985bf5af2a9bf7fcf9707b294d1a","unresolved":false,"context_lines":[{"line_number":292,"context_line":"        nms_url \u003d capabilities[\u0027nms_url\u0027]"},{"line_number":293,"context_line":"        dst_parts \u003d capabilities[\u0027location_info\u0027].split(\u0027:\u0027)"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"        if capabilities.get(\u0027vendor_name\u0027) !\u003d \u0027Nexenta\u0027 or \\"},{"line_number":296,"context_line":"                dst_parts[0] !\u003d self.__class__.__name__ or \\"},{"line_number":297,"context_line":"                capabilities[\u0027free_capacity_gb\u0027] \u003c volume[\u0027size\u0027]:"},{"line_number":298,"context_line":"            return false_ret"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_875d88ee","line":295,"in_reply_to":"fa32b979_61ecf48f","updated":"2015-06-19 21:42:27.000000000","message":"Done","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8d0ee55158edd97266dea71418fad17d92fb9148","unresolved":false,"context_lines":[{"line_number":358,"context_line":""},{"line_number":359,"context_line":"    def retype(self, context, volume, new_type, diff, host):"},{"line_number":360,"context_line":"        \"\"\"Convert the volume to be of the new type."},{"line_number":361,"context_line":"        :param ctxt: Context"},{"line_number":362,"context_line":"        :param volume: A dictionary describing the volume to migrate"},{"line_number":363,"context_line":"        :param new_type: A dictionary describing the volume type to convert to"},{"line_number":364,"context_line":"        :param diff: A dictionary with the difference between the two types"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_61bab470","line":361,"updated":"2015-06-19 21:06:23.000000000","message":"Need blank line after first summary line per docstring guidelines.","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"c40b0d5e73c6985bf5af2a9bf7fcf9707b294d1a","unresolved":false,"context_lines":[{"line_number":358,"context_line":""},{"line_number":359,"context_line":"    def retype(self, context, volume, new_type, diff, host):"},{"line_number":360,"context_line":"        \"\"\"Convert the volume to be of the new type."},{"line_number":361,"context_line":"        :param ctxt: Context"},{"line_number":362,"context_line":"        :param volume: A dictionary describing the volume to migrate"},{"line_number":363,"context_line":"        :param new_type: A dictionary describing the volume type to convert to"},{"line_number":364,"context_line":"        :param diff: A dictionary with the difference between the two types"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_675c04ee","line":361,"in_reply_to":"fa32b979_61bab470","updated":"2015-06-19 21:42:27.000000000","message":"Done","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"a249ce466a485b30bd9b1ae2daa6465e5bf1e45c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2011 Nexenta Systems, 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":19,"id":"fa80f949_ee03ad40","line":1,"updated":"2015-11-05 17:56:27.000000000","message":"2015","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"677e13d416b5a8327811aabd761b752c80b0288f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2011 Nexenta Systems, 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":19,"id":"da85f559_a7dcec12","line":1,"in_reply_to":"fa80f949_ee03ad40","updated":"2015-11-10 15:37:56.000000000","message":"Done","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"a249ce466a485b30bd9b1ae2daa6465e5bf1e45c","unresolved":false,"context_lines":[{"line_number":20,"context_line":".. moduleauthor:: Victor Rodionov \u003cvictor.rodionov@nexenta.com\u003e"},{"line_number":21,"context_line":".. moduleauthor:: Mikhail Khodos \u003cmikhail.khodos@nexenta.com\u003e"},{"line_number":22,"context_line":".. moduleauthor:: Yuriy Taraday \u003cyorik.sar@gmail.com\u003e"},{"line_number":23,"context_line":"\"\"\""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from oslo_log import log as logging"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"fa80f949_4eec398f","line":23,"updated":"2015-11-05 17:56:27.000000000","message":"Don’t use author tags. http://docs.openstack.org/developer/hacking/#general","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"677e13d416b5a8327811aabd761b752c80b0288f","unresolved":false,"context_lines":[{"line_number":20,"context_line":".. moduleauthor:: Victor Rodionov \u003cvictor.rodionov@nexenta.com\u003e"},{"line_number":21,"context_line":".. moduleauthor:: Mikhail Khodos \u003cmikhail.khodos@nexenta.com\u003e"},{"line_number":22,"context_line":".. moduleauthor:: Yuriy Taraday \u003cyorik.sar@gmail.com\u003e"},{"line_number":23,"context_line":"\"\"\""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from oslo_log import log as logging"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"da85f559_07ce185a","line":23,"in_reply_to":"fa80f949_4eec398f","updated":"2015-11-10 15:37:56.000000000","message":"Done","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"25f3502fb373eb9583f4c253a40b93919ec270e2","unresolved":false,"context_lines":[{"line_number":37,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class NexentaISCSIDriver(driver.ISCSIDriver):  # pylint: disable\u003dR0921"},{"line_number":41,"context_line":"    \"\"\"Executes volume driver commands on Nexenta Appliance."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    Version history:"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa80f949_44cbea1e","line":40,"updated":"2015-11-04 18:17:28.000000000","message":"What is the pylint error you are trying to ignore?","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ea1359e11a81dca6aac131ec3b680b0846a0eaa9","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        self.rrmgr_compression \u003d self.configuration.nexenta_rrmgr_compression"},{"line_number":85,"context_line":"        self.rrmgr_tcp_buf_size \u003d self.configuration.nexenta_rrmgr_tcp_buf_size"},{"line_number":86,"context_line":"        self.rrmgr_connections \u003d self.configuration.nexenta_rrmgr_connections"},{"line_number":87,"context_line":"        self.iscsi_target_portal_port \u003d \\"},{"line_number":88,"context_line":"            self.configuration.nexenta_iscsi_target_portal_port"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa80f949_c32ff09f","line":87,"updated":"2015-11-04 03:17:23.000000000","message":"Wrap assignment in () to avoid the need to \\ for line continuation.","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"677e13d416b5a8327811aabd761b752c80b0288f","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        self.rrmgr_compression \u003d self.configuration.nexenta_rrmgr_compression"},{"line_number":85,"context_line":"        self.rrmgr_tcp_buf_size \u003d self.configuration.nexenta_rrmgr_tcp_buf_size"},{"line_number":86,"context_line":"        self.rrmgr_connections \u003d self.configuration.nexenta_rrmgr_connections"},{"line_number":87,"context_line":"        self.iscsi_target_portal_port \u003d \\"},{"line_number":88,"context_line":"            self.configuration.nexenta_iscsi_target_portal_port"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":19,"id":"da85f559_47ebc0b0","line":87,"in_reply_to":"fa80f949_c32ff09f","updated":"2015-11-10 15:37:56.000000000","message":"Done","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"25f3502fb373eb9583f4c253a40b93919ec270e2","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        self.rrmgr_tcp_buf_size \u003d self.configuration.nexenta_rrmgr_tcp_buf_size"},{"line_number":86,"context_line":"        self.rrmgr_connections \u003d self.configuration.nexenta_rrmgr_connections"},{"line_number":87,"context_line":"        self.iscsi_target_portal_port \u003d \\"},{"line_number":88,"context_line":"            self.configuration.nexenta_iscsi_target_portal_port"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    @property"},{"line_number":91,"context_line":"    def backend_name(self):"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa80f949_84e1d29c","line":88,"updated":"2015-11-04 18:17:28.000000000","message":"If iscsi_target_portal_port and nexenta_iscsi_target_portal_port mean the same thing, you should just use the common option instead of introducing another one.","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ea1359e11a81dca6aac131ec3b680b0846a0eaa9","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        :raise: :py:exc:`LookupError`"},{"line_number":112,"context_line":"        \"\"\""},{"line_number":113,"context_line":"        if not self.nms.volume.object_exists(self.volume):"},{"line_number":114,"context_line":"            raise LookupError(_(\"Volume %s does not exist in Nexenta SA\"),"},{"line_number":115,"context_line":"                              self.volume)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def _get_zvol_name(self, volume_name):"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa80f949_63172452","line":114,"updated":"2015-11-04 03:17:23.000000000","message":"Need to change , to % here to perform the string format.","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"677e13d416b5a8327811aabd761b752c80b0288f","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        :raise: :py:exc:`LookupError`"},{"line_number":112,"context_line":"        \"\"\""},{"line_number":113,"context_line":"        if not self.nms.volume.object_exists(self.volume):"},{"line_number":114,"context_line":"            raise LookupError(_(\"Volume %s does not exist in Nexenta SA\"),"},{"line_number":115,"context_line":"                              self.volume)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def _get_zvol_name(self, volume_name):"}],"source_content_type":"text/x-python","patch_set":19,"id":"da85f559_27e8fcb3","line":114,"in_reply_to":"fa80f949_63172452","updated":"2015-11-10 15:37:56.000000000","message":"Done","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ea1359e11a81dca6aac131ec3b680b0846a0eaa9","unresolved":false,"context_lines":[{"line_number":295,"context_line":"    @staticmethod"},{"line_number":296,"context_line":"    def get_nms_for_url(url):"},{"line_number":297,"context_line":"        \"\"\"Returns initialized nms object for url.\"\"\""},{"line_number":298,"context_line":"        auto, scheme, user, password, host, port, path \u003d\\"},{"line_number":299,"context_line":"            utils.parse_nms_url(url)"},{"line_number":300,"context_line":"        return jsonrpc.NexentaJSONProxy(scheme, host, port, path, user,"},{"line_number":301,"context_line":"                                        password, auto\u003dauto)"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa80f949_1520cf9a","line":298,"updated":"2015-11-04 03:17:23.000000000","message":"Avoid the use of \\ for line continuation.","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"677e13d416b5a8327811aabd761b752c80b0288f","unresolved":false,"context_lines":[{"line_number":295,"context_line":"    @staticmethod"},{"line_number":296,"context_line":"    def get_nms_for_url(url):"},{"line_number":297,"context_line":"        \"\"\"Returns initialized nms object for url.\"\"\""},{"line_number":298,"context_line":"        auto, scheme, user, password, host, port, path \u003d\\"},{"line_number":299,"context_line":"            utils.parse_nms_url(url)"},{"line_number":300,"context_line":"        return jsonrpc.NexentaJSONProxy(scheme, host, port, path, user,"},{"line_number":301,"context_line":"                                        password, auto\u003dauto)"}],"source_content_type":"text/x-python","patch_set":19,"id":"da85f559_c7c0102d","line":298,"in_reply_to":"fa80f949_1520cf9a","updated":"2015-11-10 15:37:56.000000000","message":"Done","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ea1359e11a81dca6aac131ec3b680b0846a0eaa9","unresolved":false,"context_lines":[{"line_number":307,"context_line":"        :param volume: a dictionary describing the volume to migrate"},{"line_number":308,"context_line":"        :param host: a dictionary describing the host to migrate to"},{"line_number":309,"context_line":"        \"\"\""},{"line_number":310,"context_line":"        LOG.debug(\u0027Enter: migrate_volume: id\u003d%(id)s, host\u003d%(host)s\u0027 %"},{"line_number":311,"context_line":"                  {\u0027id\u0027: volume[\u0027id\u0027], \u0027host\u0027: host})"},{"line_number":312,"context_line":"        false_ret \u003d (False, None)"},{"line_number":313,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"fa80f949_b531c3ee","line":310,"updated":"2015-11-04 03:17:23.000000000","message":"Change % to , to pass formatting variables as args into the logger.","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"677e13d416b5a8327811aabd761b752c80b0288f","unresolved":false,"context_lines":[{"line_number":307,"context_line":"        :param volume: a dictionary describing the volume to migrate"},{"line_number":308,"context_line":"        :param host: a dictionary describing the host to migrate to"},{"line_number":309,"context_line":"        \"\"\""},{"line_number":310,"context_line":"        LOG.debug(\u0027Enter: migrate_volume: id\u003d%(id)s, host\u003d%(host)s\u0027 %"},{"line_number":311,"context_line":"                  {\u0027id\u0027: volume[\u0027id\u0027], \u0027host\u0027: host})"},{"line_number":312,"context_line":"        false_ret \u003d (False, None)"},{"line_number":313,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"da85f559_a7c5cc3c","line":310,"in_reply_to":"fa80f949_b531c3ee","updated":"2015-11-10 15:37:56.000000000","message":"Done","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ea1359e11a81dca6aac131ec3b680b0846a0eaa9","unresolved":false,"context_lines":[{"line_number":319,"context_line":""},{"line_number":320,"context_line":"        capabilities \u003d host[\u0027capabilities\u0027]"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"        if \u0027location_info\u0027 not in capabilities or \\"},{"line_number":323,"context_line":"                \u0027iscsi_target_portal_port\u0027 not in capabilities or \\"},{"line_number":324,"context_line":"                \u0027nms_url\u0027 not in capabilities:"},{"line_number":325,"context_line":"            return false_ret"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa80f949_355cf324","line":322,"updated":"2015-11-04 03:17:23.000000000","message":"Wrap conditional in () to avoid use of \\ for line continuation.","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"677e13d416b5a8327811aabd761b752c80b0288f","unresolved":false,"context_lines":[{"line_number":319,"context_line":""},{"line_number":320,"context_line":"        capabilities \u003d host[\u0027capabilities\u0027]"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"        if \u0027location_info\u0027 not in capabilities or \\"},{"line_number":323,"context_line":"                \u0027iscsi_target_portal_port\u0027 not in capabilities or \\"},{"line_number":324,"context_line":"                \u0027nms_url\u0027 not in capabilities:"},{"line_number":325,"context_line":"            return false_ret"}],"source_content_type":"text/x-python","patch_set":19,"id":"da85f559_27b1dce1","line":322,"in_reply_to":"fa80f949_355cf324","updated":"2015-11-10 15:37:56.000000000","message":"Done","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ea1359e11a81dca6aac131ec3b680b0846a0eaa9","unresolved":false,"context_lines":[{"line_number":327,"context_line":"        nms_url \u003d capabilities[\u0027nms_url\u0027]"},{"line_number":328,"context_line":"        dst_parts \u003d capabilities[\u0027location_info\u0027].split(\u0027:\u0027)"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"        if capabilities.get(\u0027vendor_name\u0027) !\u003d \u0027Nexenta\u0027 or \\"},{"line_number":331,"context_line":"                dst_parts[0] !\u003d self.__class__.__name__ or \\"},{"line_number":332,"context_line":"                capabilities[\u0027free_capacity_gb\u0027] \u003c volume[\u0027size\u0027]:"},{"line_number":333,"context_line":"            return false_ret"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa80f949_954b5f59","line":330,"updated":"2015-11-04 03:17:23.000000000","message":"Same.","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"677e13d416b5a8327811aabd761b752c80b0288f","unresolved":false,"context_lines":[{"line_number":327,"context_line":"        nms_url \u003d capabilities[\u0027nms_url\u0027]"},{"line_number":328,"context_line":"        dst_parts \u003d capabilities[\u0027location_info\u0027].split(\u0027:\u0027)"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"        if capabilities.get(\u0027vendor_name\u0027) !\u003d \u0027Nexenta\u0027 or \\"},{"line_number":331,"context_line":"                dst_parts[0] !\u003d self.__class__.__name__ or \\"},{"line_number":332,"context_line":"                capabilities[\u0027free_capacity_gb\u0027] \u003c volume[\u0027size\u0027]:"},{"line_number":333,"context_line":"            return false_ret"}],"source_content_type":"text/x-python","patch_set":19,"id":"da85f559_87ba08bf","line":330,"in_reply_to":"fa80f949_954b5f59","updated":"2015-11-10 15:37:56.000000000","message":"Done","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"63bea3d1cf06713f5f9bc590e262a29d86bf75a4","unresolved":false,"context_lines":[{"line_number":196,"context_line":"    @staticmethod"},{"line_number":197,"context_line":"    def _get_clone_snapshot_name(volume):"},{"line_number":198,"context_line":"        \"\"\"Return name for snapshot that will be used to clone the volume.\"\"\""},{"line_number":199,"context_line":"        return \u0027cinder-clone-snapshot-%(id)s\u0027 % volume"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    @staticmethod"},{"line_number":202,"context_line":"    def _is_clone_snapshot_name(snapshot):"}],"source_content_type":"text/x-python","patch_set":36,"id":"3a7e1126_ef647d4a","line":199,"range":{"start_line":199,"start_character":40,"end_line":199,"end_character":42},"updated":"2015-12-16 22:42:46.000000000","message":"I\u0027m assuming the volume variable will always be a dict with an \"id\" key? Not clear from here. If not, this will cause a string formatting error.","commit_id":"9f87e8f2316b78efeeeb25aa9ba883a421bbee10"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"4cec480f9e8840830554693758b5319f1579b44c","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        try:"},{"line_number":274,"context_line":"            self.create_volume_from_snapshot(volume, snapshot)"},{"line_number":275,"context_line":"        except exception.NexentaException:"},{"line_number":276,"context_line":"            LOG.error(_LE(\u0027Volume creation failed, deleting created snapshot \u0027"},{"line_number":277,"context_line":"                          \u0027%(volume_name)s@%(name)s\u0027), snapshot)"},{"line_number":278,"context_line":"            try:"},{"line_number":279,"context_line":"                self.delete_snapshot(snapshot)"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a7e1126_d8f34509","line":276,"range":{"start_line":276,"start_character":12,"end_line":276,"end_character":15},"updated":"2015-12-17 14:35:32.000000000","message":"Please, use save_and_reraise_exception here","commit_id":"1d0173f23c36d968113e4d4f69ab265c3fee3e4f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4a37c3ad98f408d82beb0f7d758502a031379d78","unresolved":false,"context_lines":[{"line_number":665,"context_line":"            \u0027host\u0027: self.nms_host,"},{"line_number":666,"context_line":"            \u0027volume\u0027: self.volume"},{"line_number":667,"context_line":"        }"},{"line_number":668,"context_line":"        reserve \u003d 100 - self.configuration.nexenta_capacitycheck"},{"line_number":669,"context_line":"        self._stats \u003d {"},{"line_number":670,"context_line":"            \u0027vendor_name\u0027: \u0027Nexenta\u0027,"},{"line_number":671,"context_line":"            \u0027dedup\u0027: self.volume_deduplication,"}],"source_content_type":"text/x-python","patch_set":49,"id":"fa69d971_d2feb137","line":668,"updated":"2016-01-02 07:04:51.000000000","message":"Same comment as in https://review.openstack.org/#/c/188877/49/cinder/volume/drivers/nexenta/nfs.py.  Can you use the existing config option?","commit_id":"81d669db10e498f948ca9e443857b97726a352da"}],"cinder/volume/drivers/nexenta/jsonrpc.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8d0ee55158edd97266dea71418fad17d92fb9148","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from oslo_serialization import jsonutils"},{"line_number":25,"context_line":"from cinder.i18n import _, _LE, _LI"},{"line_number":26,"context_line":"from cinder.volume.drivers import nexenta"},{"line_number":27,"context_line":"import urllib2"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_413a10e9","line":27,"updated":"2015-06-19 21:06:23.000000000","message":"Update import order per guidelines:\n\nhttp://docs.openstack.org/developer/hacking/#import-order-template","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"c40b0d5e73c6985bf5af2a9bf7fcf9707b294d1a","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from oslo_serialization import jsonutils"},{"line_number":25,"context_line":"from cinder.i18n import _, _LE, _LI"},{"line_number":26,"context_line":"from cinder.volume.drivers import nexenta"},{"line_number":27,"context_line":"import urllib2"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_047736d5","line":27,"in_reply_to":"fa32b979_413a10e9","updated":"2015-06-19 21:42:27.000000000","message":"Done","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8d0ee55158edd97266dea71418fad17d92fb9148","unresolved":false,"context_lines":[{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class NexentaJSONException(nexenta.NexentaException):"},{"line_number":33,"context_line":"    pass"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_c12e20a5","line":32,"updated":"2015-06-19 21:06:23.000000000","message":"This doesn\u0027t appear to add any value.","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"c40b0d5e73c6985bf5af2a9bf7fcf9707b294d1a","unresolved":false,"context_lines":[{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class NexentaJSONException(nexenta.NexentaException):"},{"line_number":33,"context_line":"    pass"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_2474bacd","line":32,"in_reply_to":"fa32b979_c12e20a5","updated":"2015-06-19 21:42:27.000000000","message":"Done","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"a249ce466a485b30bd9b1ae2daa6465e5bf1e45c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2011-2015 Nexenta Systems, 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":19,"id":"fa80f949_2ee9b580","line":1,"updated":"2015-11-05 17:56:27.000000000","message":"2015","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"677e13d416b5a8327811aabd761b752c80b0288f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2011-2015 Nexenta Systems, 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":19,"id":"da85f559_07237806","line":1,"in_reply_to":"fa80f949_2ee9b580","updated":"2015-11-10 15:37:56.000000000","message":"Done","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"a249ce466a485b30bd9b1ae2daa6465e5bf1e45c","unresolved":false,"context_lines":[{"line_number":19,"context_line":".. automodule:: nexenta.jsonrpc"},{"line_number":20,"context_line":".. moduleauthor:: Nexenta OpenStack Developers \u003copenstack.team@nexenta.com\u003e"},{"line_number":21,"context_line":"\"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"import socket"},{"line_number":24,"context_line":"import time"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"fa80f949_aee605b2","line":22,"updated":"2015-11-05 17:56:27.000000000","message":"Don’t use author tags. http://docs.openstack.org/developer/hacking/#general","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"677e13d416b5a8327811aabd761b752c80b0288f","unresolved":false,"context_lines":[{"line_number":19,"context_line":".. automodule:: nexenta.jsonrpc"},{"line_number":20,"context_line":".. moduleauthor:: Nexenta OpenStack Developers \u003copenstack.team@nexenta.com\u003e"},{"line_number":21,"context_line":"\"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"import socket"},{"line_number":24,"context_line":"import time"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"da85f559_e7275410","line":22,"in_reply_to":"fa80f949_aee605b2","updated":"2015-11-10 15:37:56.000000000","message":"Done","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ea1359e11a81dca6aac131ec3b680b0846a0eaa9","unresolved":false,"context_lines":[{"line_number":35,"context_line":"socket.setdefaulttimeout(100)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"def retry(exc_tuple, tries\u003d5, delay\u003d1, backoff\u003d2):"},{"line_number":39,"context_line":"    def retry_dec(f):"},{"line_number":40,"context_line":"        @wraps(f)"},{"line_number":41,"context_line":"        def func_retry(*args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa80f949_3581534b","line":38,"updated":"2015-11-04 03:17:23.000000000","message":"Please use retry decorator from cinder.utils.","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"677e13d416b5a8327811aabd761b752c80b0288f","unresolved":false,"context_lines":[{"line_number":35,"context_line":"socket.setdefaulttimeout(100)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"def retry(exc_tuple, tries\u003d5, delay\u003d1, backoff\u003d2):"},{"line_number":39,"context_line":"    def retry_dec(f):"},{"line_number":40,"context_line":"        @wraps(f)"},{"line_number":41,"context_line":"        def func_retry(*args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":19,"id":"da85f559_82be76d2","line":38,"in_reply_to":"fa80f949_3581534b","updated":"2015-11-10 15:37:56.000000000","message":"Done","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"}],"cinder/volume/drivers/nexenta/nfs.py":[{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"eaf06c5fc77cc9d12762ef71b6b56969f3dd63f8","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    driver_prefix \u003d \u0027nexenta\u0027"},{"line_number":62,"context_line":"    volume_backend_name \u003d \u0027NexentaNfsDriver\u0027"},{"line_number":63,"context_line":"    VERSION \u003d VERSION"},{"line_number":64,"context_line":"    VOLUME_FILE_NAME \u003d \u0027volume\u0027"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def __init__(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3afb71cf_1b1c4f76","line":63,"updated":"2015-06-07 22:50:12.000000000","message":"Why is this needed?","commit_id":"5330167879f85d257b76f96bf513aa0fe2e37799"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"eaf06c5fc77cc9d12762ef71b6b56969f3dd63f8","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        snapshot \u003d {"},{"line_number":171,"context_line":"            \u0027volume_name\u0027: volume[\u0027name\u0027],"},{"line_number":172,"context_line":"            \u0027volume_id\u0027: volume[\u0027id\u0027],"},{"line_number":173,"context_line":"            \u0027name\u0027: utils.get_migrate_snapshot_name(volume)"},{"line_number":174,"context_line":"        }"},{"line_number":175,"context_line":"        self.create_snapshot(snapshot)"},{"line_number":176,"context_line":"        src \u003d \u0027%(share)s/%(volume)s@%(snapshot)s\u0027 % {"}],"source_content_type":"text/x-python","patch_set":4,"id":"3afb71cf_060ab621","line":173,"updated":"2015-06-07 22:50:12.000000000","message":"Please use trailing commas. throughout ..\n\nhttp://docs.openstack.org/developer/hacking/#dictionaries-lists","commit_id":"5330167879f85d257b76f96bf513aa0fe2e37799"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"8445a72de48a87b58609a0cbbd261b80cb046b43","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        snapshot \u003d {"},{"line_number":171,"context_line":"            \u0027volume_name\u0027: volume[\u0027name\u0027],"},{"line_number":172,"context_line":"            \u0027volume_id\u0027: volume[\u0027id\u0027],"},{"line_number":173,"context_line":"            \u0027name\u0027: utils.get_migrate_snapshot_name(volume)"},{"line_number":174,"context_line":"        }"},{"line_number":175,"context_line":"        self.create_snapshot(snapshot)"},{"line_number":176,"context_line":"        src \u003d \u0027%(share)s/%(volume)s@%(snapshot)s\u0027 % {"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_58224ca4","line":173,"in_reply_to":"3afb71cf_060ab621","updated":"2015-06-18 16:11:59.000000000","message":"Done","commit_id":"5330167879f85d257b76f96bf513aa0fe2e37799"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"eaf06c5fc77cc9d12762ef71b6b56969f3dd63f8","unresolved":false,"context_lines":[{"line_number":262,"context_line":"        migrated \u003d False"},{"line_number":263,"context_line":"        model_update \u003d None"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        src_backend \u003d self.__class__.__name__"},{"line_number":266,"context_line":"        dst_backend \u003d host[\u0027capabilities\u0027][\u0027location_info\u0027].split(\u0027:\u0027)[0]"},{"line_number":267,"context_line":"        if src_backend !\u003d dst_backend:"},{"line_number":268,"context_line":"            LOG.warning(_LW(\u0027Cannot retype from %(src_backend)s to \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"3afb71cf_c63b7ed0","line":265,"updated":"2015-06-07 22:50:12.000000000","message":"Should you use self.backend_name? Since it\u0027s going to be config property.","commit_id":"5330167879f85d257b76f96bf513aa0fe2e37799"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"8445a72de48a87b58609a0cbbd261b80cb046b43","unresolved":false,"context_lines":[{"line_number":262,"context_line":"        migrated \u003d False"},{"line_number":263,"context_line":"        model_update \u003d None"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        src_backend \u003d self.__class__.__name__"},{"line_number":266,"context_line":"        dst_backend \u003d host[\u0027capabilities\u0027][\u0027location_info\u0027].split(\u0027:\u0027)[0]"},{"line_number":267,"context_line":"        if src_backend !\u003d dst_backend:"},{"line_number":268,"context_line":"            LOG.warning(_LW(\u0027Cannot retype from %(src_backend)s to \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_d8173c43","line":265,"in_reply_to":"3afb71cf_c63b7ed0","updated":"2015-06-18 16:11:59.000000000","message":"not for retype","commit_id":"5330167879f85d257b76f96bf513aa0fe2e37799"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8d0ee55158edd97266dea71418fad17d92fb9148","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 Nexenta Systems, 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":9,"id":"fa32b979_e102440b","line":1,"updated":"2015-06-19 21:06:23.000000000","message":"Update copyright year?","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"c40b0d5e73c6985bf5af2a9bf7fcf9707b294d1a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 Nexenta Systems, 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":9,"id":"fa32b979_446c5e08","line":1,"in_reply_to":"fa32b979_e102440b","updated":"2015-06-19 21:42:27.000000000","message":"Done","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8d0ee55158edd97266dea71418fad17d92fb9148","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        1.3.0 - Extend volume method."},{"line_number":59,"context_line":"    \"\"\""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    driver_prefix \u003d \u0027nexenta\u0027"},{"line_number":62,"context_line":"    VOLUME_FILE_NAME \u003d \u0027volume\u0027"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def __init__(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_c41cee6c","line":61,"updated":"2015-06-19 21:06:23.000000000","message":"Constant should be DRIVER_PREFIX.","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"c40b0d5e73c6985bf5af2a9bf7fcf9707b294d1a","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        1.3.0 - Extend volume method."},{"line_number":59,"context_line":"    \"\"\""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    driver_prefix \u003d \u0027nexenta\u0027"},{"line_number":62,"context_line":"    VOLUME_FILE_NAME \u003d \u0027volume\u0027"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def __init__(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_84626615","line":61,"in_reply_to":"fa32b979_c41cee6c","updated":"2015-06-19 21:42:27.000000000","message":"Done","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8d0ee55158edd97266dea71418fad17d92fb9148","unresolved":false,"context_lines":[{"line_number":114,"context_line":"                volume_name, dataset \u003d self._get_share_datasets(nfs_share)"},{"line_number":115,"context_line":"                if not nms.volume.object_exists(volume_name):"},{"line_number":116,"context_line":"                    raise LookupError(_(\"Volume %s does not exist in Nexenta \""},{"line_number":117,"context_line":"                                        \"Store appliance\"), volume_name)"},{"line_number":118,"context_line":"                folder \u003d \u0027%s/%s\u0027 % (volume_name, dataset)"},{"line_number":119,"context_line":"                if not nms.folder.object_exists(folder):"},{"line_number":120,"context_line":"                    raise LookupError(_(\"Folder %s does not exist in Nexenta \""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_44253e5a","line":117,"updated":"2015-06-19 21:06:23.000000000","message":"Need to use % here instead of , so that the string passed in to the exception constructor is formatted.","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"c40b0d5e73c6985bf5af2a9bf7fcf9707b294d1a","unresolved":false,"context_lines":[{"line_number":114,"context_line":"                volume_name, dataset \u003d self._get_share_datasets(nfs_share)"},{"line_number":115,"context_line":"                if not nms.volume.object_exists(volume_name):"},{"line_number":116,"context_line":"                    raise LookupError(_(\"Volume %s does not exist in Nexenta \""},{"line_number":117,"context_line":"                                        \"Store appliance\"), volume_name)"},{"line_number":118,"context_line":"                folder \u003d \u0027%s/%s\u0027 % (volume_name, dataset)"},{"line_number":119,"context_line":"                if not nms.folder.object_exists(folder):"},{"line_number":120,"context_line":"                    raise LookupError(_(\"Folder %s does not exist in Nexenta \""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_e4549222","line":117,"in_reply_to":"fa32b979_44253e5a","updated":"2015-06-19 21:42:27.000000000","message":"Done","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8d0ee55158edd97266dea71418fad17d92fb9148","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                folder \u003d \u0027%s/%s\u0027 % (volume_name, dataset)"},{"line_number":119,"context_line":"                if not nms.folder.object_exists(folder):"},{"line_number":120,"context_line":"                    raise LookupError(_(\"Folder %s does not exist in Nexenta \""},{"line_number":121,"context_line":"                                        \"Store appliance\"), folder)"},{"line_number":122,"context_line":"                self._share_folder(nms, volume_name, dataset)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def migrate_volume(self, ctxt, volume, host):"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_642ac22e","line":121,"updated":"2015-06-19 21:06:23.000000000","message":"Need to use % here instead of , so that the string passed in to the exception constructor is formatted.","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"c40b0d5e73c6985bf5af2a9bf7fcf9707b294d1a","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                folder \u003d \u0027%s/%s\u0027 % (volume_name, dataset)"},{"line_number":119,"context_line":"                if not nms.folder.object_exists(folder):"},{"line_number":120,"context_line":"                    raise LookupError(_(\"Folder %s does not exist in Nexenta \""},{"line_number":121,"context_line":"                                        \"Store appliance\"), folder)"},{"line_number":122,"context_line":"                self._share_folder(nms, volume_name, dataset)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def migrate_volume(self, ctxt, volume, host):"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_84302609","line":121,"in_reply_to":"fa32b979_642ac22e","updated":"2015-06-19 21:42:27.000000000","message":"Done","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8d0ee55158edd97266dea71418fad17d92fb9148","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        :param volume: a dictionary describing the volume to migrate"},{"line_number":129,"context_line":"        :param host: a dictionary describing the host to migrate to"},{"line_number":130,"context_line":"        \"\"\""},{"line_number":131,"context_line":"        LOG.debug(\u0027Enter: migrate_volume: id\u003d%(id)s, host\u003d%(host)s\u0027 %"},{"line_number":132,"context_line":"                  {\u0027id\u0027: volume[\u0027id\u0027], \u0027host\u0027: host})"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        false_ret \u003d (False, None)"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_a42a0a7d","line":131,"updated":"2015-06-19 21:06:23.000000000","message":"Change % to ,","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"c40b0d5e73c6985bf5af2a9bf7fcf9707b294d1a","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        :param volume: a dictionary describing the volume to migrate"},{"line_number":129,"context_line":"        :param host: a dictionary describing the host to migrate to"},{"line_number":130,"context_line":"        \"\"\""},{"line_number":131,"context_line":"        LOG.debug(\u0027Enter: migrate_volume: id\u003d%(id)s, host\u003d%(host)s\u0027 %"},{"line_number":132,"context_line":"                  {\u0027id\u0027: volume[\u0027id\u0027], \u0027host\u0027: host})"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        false_ret \u003d (False, None)"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_c42e2ea5","line":131,"in_reply_to":"fa32b979_a42a0a7d","updated":"2015-06-19 21:42:27.000000000","message":"Done","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8d0ee55158edd97266dea71418fad17d92fb9148","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        false_ret \u003d (False, None)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        if volume[\u0027status\u0027] not in (\u0027available\u0027, \u0027retyping\u0027):"},{"line_number":137,"context_line":"            LOG.warning(_LW(\"Volume status must be \u0027available\u0027 or \u0027retyping\u0027.\""},{"line_number":138,"context_line":"                            \"Current volume status: %s\"), volume[\u0027status\u0027])"},{"line_number":139,"context_line":"            return false_ret"},{"line_number":140,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_642402af","line":137,"updated":"2015-06-19 21:06:23.000000000","message":"Needing trailing space so resulting string doesn\u0027t run together.","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"c40b0d5e73c6985bf5af2a9bf7fcf9707b294d1a","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        false_ret \u003d (False, None)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        if volume[\u0027status\u0027] not in (\u0027available\u0027, \u0027retyping\u0027):"},{"line_number":137,"context_line":"            LOG.warning(_LW(\"Volume status must be \u0027available\u0027 or \u0027retyping\u0027.\""},{"line_number":138,"context_line":"                            \"Current volume status: %s\"), volume[\u0027status\u0027])"},{"line_number":139,"context_line":"            return false_ret"},{"line_number":140,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_24091a32","line":137,"in_reply_to":"fa32b979_642402af","updated":"2015-06-19 21:42:27.000000000","message":"Done","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8d0ee55158edd97266dea71418fad17d92fb9148","unresolved":false,"context_lines":[{"line_number":357,"context_line":"                LOG.warning(_LW(\"Cannot destroy created folder: \""},{"line_number":358,"context_line":"                                \"%(vol)s/%(folder)s.\"),"},{"line_number":359,"context_line":"                            {\u0027vol\u0027: vol, \u0027folder\u0027: folder})"},{"line_number":360,"context_line":"            raise exc"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":363,"context_line":"        \"\"\"Create new volume from other\u0027s snapshot on appliance."}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_849a66c4","line":360,"updated":"2015-06-19 21:06:23.000000000","message":"Should just be \"raise\", not \"raise exc\".","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"c40b0d5e73c6985bf5af2a9bf7fcf9707b294d1a","unresolved":false,"context_lines":[{"line_number":357,"context_line":"                LOG.warning(_LW(\"Cannot destroy created folder: \""},{"line_number":358,"context_line":"                                \"%(vol)s/%(folder)s.\"),"},{"line_number":359,"context_line":"                            {\u0027vol\u0027: vol, \u0027folder\u0027: folder})"},{"line_number":360,"context_line":"            raise exc"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":363,"context_line":"        \"\"\"Create new volume from other\u0027s snapshot on appliance."}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_27103c4e","line":360,"in_reply_to":"fa32b979_849a66c4","updated":"2015-06-19 21:42:27.000000000","message":"Done","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8d0ee55158edd97266dea71418fad17d92fb9148","unresolved":false,"context_lines":[{"line_number":512,"context_line":"        except nexenta.NexentaException as exc:"},{"line_number":513,"context_line":"            if \u0027does not exist\u0027 in exc.args[0]:"},{"line_number":514,"context_line":"                LOG.info(_LI(\u0027Snapshot %s does not exist, it was \u0027"},{"line_number":515,"context_line":"                             \u0027already deleted.\u0027), \u0027%s@%s\u0027 % (folder, snapshot))"},{"line_number":516,"context_line":"                return"},{"line_number":517,"context_line":"            elif \u0027has dependent clones\u0027 in exc.args[0]:"},{"line_number":518,"context_line":"                LOG.info(_LI(\u0027Snapshot %s has dependent clones, it will \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_04af36e4","line":515,"updated":"2015-06-19 21:06:23.000000000","message":"% \u003d\u003e ,","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"c40b0d5e73c6985bf5af2a9bf7fcf9707b294d1a","unresolved":false,"context_lines":[{"line_number":512,"context_line":"        except nexenta.NexentaException as exc:"},{"line_number":513,"context_line":"            if \u0027does not exist\u0027 in exc.args[0]:"},{"line_number":514,"context_line":"                LOG.info(_LI(\u0027Snapshot %s does not exist, it was \u0027"},{"line_number":515,"context_line":"                             \u0027already deleted.\u0027), \u0027%s@%s\u0027 % (folder, snapshot))"},{"line_number":516,"context_line":"                return"},{"line_number":517,"context_line":"            elif \u0027has dependent clones\u0027 in exc.args[0]:"},{"line_number":518,"context_line":"                LOG.info(_LI(\u0027Snapshot %s has dependent clones, it will \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_675ba42f","line":515,"in_reply_to":"fa32b979_04af36e4","updated":"2015-06-19 21:42:27.000000000","message":"Done","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8d0ee55158edd97266dea71418fad17d92fb9148","unresolved":false,"context_lines":[{"line_number":516,"context_line":"                return"},{"line_number":517,"context_line":"            elif \u0027has dependent clones\u0027 in exc.args[0]:"},{"line_number":518,"context_line":"                LOG.info(_LI(\u0027Snapshot %s has dependent clones, it will \u0027"},{"line_number":519,"context_line":"                             \u0027be deleted later.\u0027), \u0027%s@%s\u0027 % (folder,"},{"line_number":520,"context_line":"                                                              snapshot))"},{"line_number":521,"context_line":"                return"},{"line_number":522,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_24acbaec","line":519,"updated":"2015-06-19 21:06:23.000000000","message":"% \u003d\u003e ,","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"c40b0d5e73c6985bf5af2a9bf7fcf9707b294d1a","unresolved":false,"context_lines":[{"line_number":516,"context_line":"                return"},{"line_number":517,"context_line":"            elif \u0027has dependent clones\u0027 in exc.args[0]:"},{"line_number":518,"context_line":"                LOG.info(_LI(\u0027Snapshot %s has dependent clones, it will \u0027"},{"line_number":519,"context_line":"                             \u0027be deleted later.\u0027), \u0027%s@%s\u0027 % (folder,"},{"line_number":520,"context_line":"                                                              snapshot))"},{"line_number":521,"context_line":"                return"},{"line_number":522,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_a751ac10","line":519,"in_reply_to":"fa32b979_24acbaec","updated":"2015-06-19 21:42:27.000000000","message":"Done","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8d0ee55158edd97266dea71418fad17d92fb9148","unresolved":false,"context_lines":[{"line_number":546,"context_line":"        block_count \u003d size * units.Gi / (block_size_mb * units.Mi)"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"        LOG.info(_LI(\u0027Creating regular file: %s.\u0027"},{"line_number":549,"context_line":"                     \u0027This may take some time.\u0027) % path)"},{"line_number":550,"context_line":""},{"line_number":551,"context_line":"        nms.appliance.execute("},{"line_number":552,"context_line":"            \u0027dd if\u003d/dev/zero of\u003d%(path)s bs\u003d%(bs)dM count\u003d%(count)d\u0027 % {"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_e4b57231","line":549,"updated":"2015-06-19 21:06:23.000000000","message":"% \u003d\u003e ,","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8d0ee55158edd97266dea71418fad17d92fb9148","unresolved":false,"context_lines":[{"line_number":556,"context_line":"            }"},{"line_number":557,"context_line":"        )"},{"line_number":558,"context_line":""},{"line_number":559,"context_line":"        LOG.info(_LI(\u0027Regular file: %s created.\u0027) % path)"},{"line_number":560,"context_line":""},{"line_number":561,"context_line":"    def _set_rw_permissions_for_all(self, nms, path):"},{"line_number":562,"context_line":"        \"\"\"Sets 666 permissions for the path."}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_a4868a63","line":559,"updated":"2015-06-19 21:06:23.000000000","message":"% \u003d\u003e ,","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"c40b0d5e73c6985bf5af2a9bf7fcf9707b294d1a","unresolved":false,"context_lines":[{"line_number":556,"context_line":"            }"},{"line_number":557,"context_line":"        )"},{"line_number":558,"context_line":""},{"line_number":559,"context_line":"        LOG.info(_LI(\u0027Regular file: %s created.\u0027) % path)"},{"line_number":560,"context_line":""},{"line_number":561,"context_line":"    def _set_rw_permissions_for_all(self, nms, path):"},{"line_number":562,"context_line":"        \"\"\"Sets 666 permissions for the path."}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_a778cc90","line":559,"in_reply_to":"fa32b979_a4868a63","updated":"2015-06-19 21:42:27.000000000","message":"Done","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8d0ee55158edd97266dea71418fad17d92fb9148","unresolved":false,"context_lines":[{"line_number":642,"context_line":"            self.shares[share_address] \u003d share_opts"},{"line_number":643,"context_line":"            self.share2nms[share_address] \u003d self._get_nms_for_url(nms_url)"},{"line_number":644,"context_line":""},{"line_number":645,"context_line":"        LOG.debug(\u0027Shares loaded: %s\u0027 % self.shares)"},{"line_number":646,"context_line":""},{"line_number":647,"context_line":"    def _get_subshare_mount_point(self, nfs_share, volume):"},{"line_number":648,"context_line":"        mnt_path \u003d \u0027%s/%s\u0027 % ("}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_44f21e08","line":645,"updated":"2015-06-19 21:06:23.000000000","message":"% \u003d\u003e ,","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8d0ee55158edd97266dea71418fad17d92fb9148","unresolved":false,"context_lines":[{"line_number":696,"context_line":"        vol_entries \u003d self.db.volume_get_all_by_host(ctxt, self.host)"},{"line_number":697,"context_line":"        for vol in vol_entries:"},{"line_number":698,"context_line":"            nfs_share \u003d vol[\u0027provider_location\u0027]"},{"line_number":699,"context_line":"            if (nfs_share in self.shares) and \\"},{"line_number":700,"context_line":"               (self._get_nfs_server_version(nfs_share) \u003c 4):"},{"line_number":701,"context_line":"                    sub_share, mnt_path \u003d self._get_subshare_mount_point("},{"line_number":702,"context_line":"                        nfs_share, vol)"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_c4e62e44","line":699,"updated":"2015-06-19 21:06:23.000000000","message":"Wrap all in () to get rid of \\","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8d0ee55158edd97266dea71418fad17d92fb9148","unresolved":false,"context_lines":[{"line_number":724,"context_line":""},{"line_number":725,"context_line":"    def _get_nms_for_url(self, url):"},{"line_number":726,"context_line":"        \"\"\"Returns initialized nms object for url.\"\"\""},{"line_number":727,"context_line":"        auto, scheme, user, password, host, port, path \u003d\\"},{"line_number":728,"context_line":"            utils.parse_nms_url(url)"},{"line_number":729,"context_line":"        return jsonrpc.NexentaJSONProxy(scheme, host, port, path, user,"},{"line_number":730,"context_line":"                                        password, auto\u003dauto)"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_a4d44a47","line":727,"updated":"2015-06-19 21:06:23.000000000","message":"() instead of \\","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"c40b0d5e73c6985bf5af2a9bf7fcf9707b294d1a","unresolved":false,"context_lines":[{"line_number":724,"context_line":""},{"line_number":725,"context_line":"    def _get_nms_for_url(self, url):"},{"line_number":726,"context_line":"        \"\"\"Returns initialized nms object for url.\"\"\""},{"line_number":727,"context_line":"        auto, scheme, user, password, host, port, path \u003d\\"},{"line_number":728,"context_line":"            utils.parse_nms_url(url)"},{"line_number":729,"context_line":"        return jsonrpc.NexentaJSONProxy(scheme, host, port, path, user,"},{"line_number":730,"context_line":"                                        password, auto\u003dauto)"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_07965894","line":727,"in_reply_to":"fa32b979_a4d44a47","updated":"2015-06-19 21:42:27.000000000","message":"Done","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"25f3502fb373eb9583f4c253a40b93919ec270e2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 Nexenta Systems, 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":19,"id":"fa80f949_04a3a250","line":1,"updated":"2015-11-04 18:17:28.000000000","message":"2015","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"677e13d416b5a8327811aabd761b752c80b0288f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 Nexenta Systems, 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":19,"id":"da85f559_cd510fda","line":1,"in_reply_to":"fa80f949_04a3a250","updated":"2015-11-10 15:37:56.000000000","message":"Done","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"25f3502fb373eb9583f4c253a40b93919ec270e2","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":".. automodule:: nexenta.nfs"},{"line_number":20,"context_line":".. moduleauthor:: Mikhail Khodos \u003chodosmb@gmail.com\u003e"},{"line_number":21,"context_line":".. moduleauthor:: Victor Rodionov \u003cvictor.rodionov@nexenta.com\u003e"},{"line_number":22,"context_line":"\"\"\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"import hashlib"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa80f949_2496e6f0","line":21,"updated":"2015-11-04 18:17:28.000000000","message":"We don\u0027t add author names to the files any more.","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"677e13d416b5a8327811aabd761b752c80b0288f","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":".. automodule:: nexenta.nfs"},{"line_number":20,"context_line":".. moduleauthor:: Mikhail Khodos \u003chodosmb@gmail.com\u003e"},{"line_number":21,"context_line":".. moduleauthor:: Victor Rodionov \u003cvictor.rodionov@nexenta.com\u003e"},{"line_number":22,"context_line":"\"\"\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"import hashlib"}],"source_content_type":"text/x-python","patch_set":19,"id":"da85f559_2d421b11","line":21,"in_reply_to":"fa80f949_2496e6f0","updated":"2015-11-10 15:37:56.000000000","message":"Done","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ea1359e11a81dca6aac131ec3b680b0846a0eaa9","unresolved":false,"context_lines":[{"line_number":39,"context_line":"from cinder.volume.drivers.nexenta import utils"},{"line_number":40,"context_line":"from cinder.volume.drivers import nfs"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"VERSION \u003d \u00271.2.0\u0027"},{"line_number":43,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"fa80f949_f5daeb77","line":42,"updated":"2015-11-04 03:17:23.000000000","message":"Looks like this should be 1.3.0 based on the version history below.","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"677e13d416b5a8327811aabd761b752c80b0288f","unresolved":false,"context_lines":[{"line_number":39,"context_line":"from cinder.volume.drivers.nexenta import utils"},{"line_number":40,"context_line":"from cinder.volume.drivers import nfs"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"VERSION \u003d \u00271.2.0\u0027"},{"line_number":43,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"da85f559_6d3823a1","line":42,"in_reply_to":"fa80f949_f5daeb77","updated":"2015-11-10 15:37:56.000000000","message":"Done","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ea1359e11a81dca6aac131ec3b680b0846a0eaa9","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        :param volume: a dictionary describing the volume to migrate"},{"line_number":132,"context_line":"        :param host: a dictionary describing the host to migrate to"},{"line_number":133,"context_line":"        \"\"\""},{"line_number":134,"context_line":"        LOG.debug(\u0027Enter: migrate_volume: id\u003d%(id)s, host\u003d%(host)s\u0027 %"},{"line_number":135,"context_line":"                  {\u0027id\u0027: volume[\u0027id\u0027], \u0027host\u0027: host})"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        false_ret \u003d (False, None)"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa80f949_f5c18b81","line":134,"updated":"2015-11-04 03:17:23.000000000","message":"Change % to ,","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"677e13d416b5a8327811aabd761b752c80b0288f","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        :param volume: a dictionary describing the volume to migrate"},{"line_number":132,"context_line":"        :param host: a dictionary describing the host to migrate to"},{"line_number":133,"context_line":"        \"\"\""},{"line_number":134,"context_line":"        LOG.debug(\u0027Enter: migrate_volume: id\u003d%(id)s, host\u003d%(host)s\u0027 %"},{"line_number":135,"context_line":"                  {\u0027id\u0027: volume[\u0027id\u0027], \u0027host\u0027: host})"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        false_ret \u003d (False, None)"}],"source_content_type":"text/x-python","patch_set":19,"id":"da85f559_ed73b37e","line":134,"in_reply_to":"fa80f949_f5c18b81","updated":"2015-11-10 15:37:56.000000000","message":"Done","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ea1359e11a81dca6aac131ec3b680b0846a0eaa9","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        false_ret \u003d (False, None)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        if volume[\u0027status\u0027] not in (\u0027available\u0027, \u0027retyping\u0027):"},{"line_number":140,"context_line":"            LOG.warning(_LW(\"Volume status must be \u0027available\u0027 or \u0027retyping\u0027.\""},{"line_number":141,"context_line":"                            \"Current volume status: %s\"), volume[\u0027status\u0027])"},{"line_number":142,"context_line":"            return false_ret"},{"line_number":143,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"fa80f949_b5bb030e","line":140,"updated":"2015-11-04 03:17:23.000000000","message":"Need space at the end so it doesn\u0027t run together with the following line.","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"677e13d416b5a8327811aabd761b752c80b0288f","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        false_ret \u003d (False, None)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        if volume[\u0027status\u0027] not in (\u0027available\u0027, \u0027retyping\u0027):"},{"line_number":140,"context_line":"            LOG.warning(_LW(\"Volume status must be \u0027available\u0027 or \u0027retyping\u0027.\""},{"line_number":141,"context_line":"                            \"Current volume status: %s\"), volume[\u0027status\u0027])"},{"line_number":142,"context_line":"            return false_ret"},{"line_number":143,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"da85f559_cd16eff0","line":140,"in_reply_to":"fa80f949_b5bb030e","updated":"2015-11-10 15:37:56.000000000","message":"Done","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ea1359e11a81dca6aac131ec3b680b0846a0eaa9","unresolved":false,"context_lines":[{"line_number":361,"context_line":"                LOG.warning(_LW(\"Cannot destroy created folder: \""},{"line_number":362,"context_line":"                                \"%(vol)s/%(folder)s\"),"},{"line_number":363,"context_line":"                            {\u0027vol\u0027: vol, \u0027folder\u0027: folder})"},{"line_number":364,"context_line":"            raise exc"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":367,"context_line":"        \"\"\"Create new volume from other\u0027s snapshot on appliance."}],"source_content_type":"text/x-python","patch_set":19,"id":"fa80f949_1558cff9","line":364,"updated":"2015-11-04 03:17:23.000000000","message":"Should just be raise, not raise exc.","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"677e13d416b5a8327811aabd761b752c80b0288f","unresolved":false,"context_lines":[{"line_number":361,"context_line":"                LOG.warning(_LW(\"Cannot destroy created folder: \""},{"line_number":362,"context_line":"                                \"%(vol)s/%(folder)s\"),"},{"line_number":363,"context_line":"                            {\u0027vol\u0027: vol, \u0027folder\u0027: folder})"},{"line_number":364,"context_line":"            raise exc"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":367,"context_line":"        \"\"\"Create new volume from other\u0027s snapshot on appliance."}],"source_content_type":"text/x-python","patch_set":19,"id":"da85f559_adf28bd0","line":364,"in_reply_to":"fa80f949_1558cff9","updated":"2015-11-10 15:37:56.000000000","message":"Done","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ea1359e11a81dca6aac131ec3b680b0846a0eaa9","unresolved":false,"context_lines":[{"line_number":516,"context_line":"        except nexenta.NexentaException as exc:"},{"line_number":517,"context_line":"            if \u0027does not exist\u0027 in exc.args[0]:"},{"line_number":518,"context_line":"                LOG.info(_LI(\u0027Snapshot %s does not exist, it was \u0027"},{"line_number":519,"context_line":"                             \u0027already deleted.\u0027), \u0027%s@%s\u0027 % (folder, snapshot))"},{"line_number":520,"context_line":"                return"},{"line_number":521,"context_line":"            elif \u0027has dependent clones\u0027 in exc.args[0]:"},{"line_number":522,"context_line":"                LOG.info(_LI(\u0027Snapshot %(folder)s@%(snapshot)s has dependent \u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa80f949_150f6fe2","line":519,"updated":"2015-11-04 03:17:23.000000000","message":"Don\u0027t format a string to pass in to a string format. Just add all arguments to the template string and pass the variables in to the logger.","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"677e13d416b5a8327811aabd761b752c80b0288f","unresolved":false,"context_lines":[{"line_number":516,"context_line":"        except nexenta.NexentaException as exc:"},{"line_number":517,"context_line":"            if \u0027does not exist\u0027 in exc.args[0]:"},{"line_number":518,"context_line":"                LOG.info(_LI(\u0027Snapshot %s does not exist, it was \u0027"},{"line_number":519,"context_line":"                             \u0027already deleted.\u0027), \u0027%s@%s\u0027 % (folder, snapshot))"},{"line_number":520,"context_line":"                return"},{"line_number":521,"context_line":"            elif \u0027has dependent clones\u0027 in exc.args[0]:"},{"line_number":522,"context_line":"                LOG.info(_LI(\u0027Snapshot %(folder)s@%(snapshot)s has dependent \u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"da85f559_edd2d3ff","line":519,"in_reply_to":"fa80f949_150f6fe2","updated":"2015-11-10 15:37:56.000000000","message":"Done","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ea1359e11a81dca6aac131ec3b680b0846a0eaa9","unresolved":false,"context_lines":[{"line_number":650,"context_line":"            self.shares[share_address] \u003d share_opts"},{"line_number":651,"context_line":"            self.share2nms[share_address] \u003d self._get_nms_for_url(nms_url)"},{"line_number":652,"context_line":""},{"line_number":653,"context_line":"        LOG.debug(\u0027Shares loaded: %s\u0027 % self.shares)"},{"line_number":654,"context_line":""},{"line_number":655,"context_line":"    def _get_subshare_mount_point(self, nfs_share, volume):"},{"line_number":656,"context_line":"        mnt_path \u003d \u0027%s/%s\u0027 % ("}],"source_content_type":"text/x-python","patch_set":19,"id":"fa80f949_b500e3ab","line":653,"updated":"2015-11-04 03:17:23.000000000","message":"% \u003e ,","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ea1359e11a81dca6aac131ec3b680b0846a0eaa9","unresolved":false,"context_lines":[{"line_number":704,"context_line":"        vol_entries \u003d self.db.volume_get_all_by_host(ctxt, self.host)"},{"line_number":705,"context_line":"        for vol in vol_entries:"},{"line_number":706,"context_line":"            nfs_share \u003d vol[\u0027provider_location\u0027]"},{"line_number":707,"context_line":"            if (nfs_share in self.shares) and \\"},{"line_number":708,"context_line":"               (self._get_nfs_server_version(nfs_share) \u003c 4):"},{"line_number":709,"context_line":"                    sub_share, mnt_path \u003d self._get_subshare_mount_point("},{"line_number":710,"context_line":"                        nfs_share, vol)"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa80f949_75311ba2","line":707,"updated":"2015-11-04 03:17:23.000000000","message":"Wrap all in () to avoid using \\.","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":15239,"name":"Mikhail Khodos","email":"mikhail.khodos@nexenta.com","username":"hodos","tags":["SERVICE_USER"]},"change_message_id":"677e13d416b5a8327811aabd761b752c80b0288f","unresolved":false,"context_lines":[{"line_number":704,"context_line":"        vol_entries \u003d self.db.volume_get_all_by_host(ctxt, self.host)"},{"line_number":705,"context_line":"        for vol in vol_entries:"},{"line_number":706,"context_line":"            nfs_share \u003d vol[\u0027provider_location\u0027]"},{"line_number":707,"context_line":"            if (nfs_share in self.shares) and \\"},{"line_number":708,"context_line":"               (self._get_nfs_server_version(nfs_share) \u003c 4):"},{"line_number":709,"context_line":"                    sub_share, mnt_path \u003d self._get_subshare_mount_point("},{"line_number":710,"context_line":"                        nfs_share, vol)"}],"source_content_type":"text/x-python","patch_set":19,"id":"da85f559_8d16a7a5","line":707,"in_reply_to":"fa80f949_75311ba2","updated":"2015-11-10 15:37:56.000000000","message":"Done","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ea1359e11a81dca6aac131ec3b680b0846a0eaa9","unresolved":false,"context_lines":[{"line_number":739,"context_line":""},{"line_number":740,"context_line":"    def _get_nms_for_url(self, url):"},{"line_number":741,"context_line":"        \"\"\"Returns initialized nms object for url.\"\"\""},{"line_number":742,"context_line":"        auto, scheme, user, password, host, port, path \u003d\\"},{"line_number":743,"context_line":"            utils.parse_nms_url(url)"},{"line_number":744,"context_line":"        return jsonrpc.NexentaJSONProxy(scheme, host, port, path, user,"},{"line_number":745,"context_line":"                                        password, auto\u003dauto)"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa80f949_352b9332","line":742,"updated":"2015-11-04 03:17:23.000000000","message":"Avoid \\","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"63bea3d1cf06713f5f9bc590e262a29d86bf75a4","unresolved":false,"context_lines":[{"line_number":567,"context_line":"            }"},{"line_number":568,"context_line":"        )"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":"        LOG.info(_LI(\u0027Regular file: %s created.\u0027) % path)"},{"line_number":571,"context_line":""},{"line_number":572,"context_line":"    def _set_rw_permissions_for_all(self, nms, path):"},{"line_number":573,"context_line":"        \"\"\"Sets 666 permissions for the path."}],"source_content_type":"text/x-python","patch_set":36,"id":"3a7e1126_c00dce38","line":570,"range":{"start_line":570,"start_character":49,"end_line":570,"end_character":50},"updated":"2015-12-16 22:42:46.000000000","message":"Change % to , to pass path as an argument into the logger.","commit_id":"9f87e8f2316b78efeeeb25aa9ba883a421bbee10"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"63bea3d1cf06713f5f9bc590e262a29d86bf75a4","unresolved":false,"context_lines":[{"line_number":697,"context_line":"                              \u0027count\u0027: num_attempts})"},{"line_number":698,"context_line":"                    raise exception.NfsException(e)"},{"line_number":699,"context_line":"                LOG.warning("},{"line_number":700,"context_line":"                    _LW(\u0027Mount attempt %(attempt)d failed: %(error)s.\u0027"},{"line_number":701,"context_line":"                        \u0027Retrying mount ...\u0027), {"},{"line_number":702,"context_line":"                        \u0027attempt\u0027: attempt,"},{"line_number":703,"context_line":"                        \u0027error\u0027: e})"}],"source_content_type":"text/x-python","patch_set":36,"id":"3a7e1126_60af3ae4","line":700,"range":{"start_line":700,"start_character":68,"end_line":700,"end_character":70},"updated":"2015-12-16 22:42:46.000000000","message":"Space needed at the end of this line so it doesn\u0027t run together with the next line.","commit_id":"9f87e8f2316b78efeeeb25aa9ba883a421bbee10"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4a37c3ad98f408d82beb0f7d758502a031379d78","unresolved":false,"context_lines":[{"line_number":695,"context_line":"                                  \u0027%(count)d attempts.\u0027), {"},{"line_number":696,"context_line":"                              \u0027share\u0027: nfs_share,"},{"line_number":697,"context_line":"                              \u0027count\u0027: num_attempts})"},{"line_number":698,"context_line":"                    raise exception.NfsException(e)"},{"line_number":699,"context_line":"                LOG.warning("},{"line_number":700,"context_line":"                    _LW(\u0027Mount attempt %(attempt)d failed: %(error)s. \u0027"},{"line_number":701,"context_line":"                        \u0027Retrying mount ...\u0027), {"}],"source_content_type":"text/x-python","patch_set":49,"id":"fa69d971_d2d791bd","line":698,"updated":"2016-01-02 07:04:51.000000000","message":"e needs to be wrapped by six.text_type: exception.NfsException(six.text_type(e))","commit_id":"81d669db10e498f948ca9e443857b97726a352da"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4a37c3ad98f408d82beb0f7d758502a031379d78","unresolved":false,"context_lines":[{"line_number":797,"context_line":"            \u0027share\u0027: share"},{"line_number":798,"context_line":"        }"},{"line_number":799,"context_line":"        nms_url \u003d self.share2nms[share].url"},{"line_number":800,"context_line":"        reserve \u003d 100 - self.configuration.nexenta_capacitycheck"},{"line_number":801,"context_line":"        self._stats \u003d {"},{"line_number":802,"context_line":"            \u0027vendor_name\u0027: \u0027Nexenta\u0027,"},{"line_number":803,"context_line":"            \u0027dedup\u0027: self.volume_deduplication,"}],"source_content_type":"text/x-python","patch_set":49,"id":"fa69d971_72e6e5b5","line":800,"updated":"2016-01-02 07:04:51.000000000","message":"Can you use self.configuration.reserved_percentage instead of defining another parameter?\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/lvm.py#L236","commit_id":"81d669db10e498f948ca9e443857b97726a352da"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0618d2cb8afa424f162051b8d370a61e98503a3e","unresolved":false,"context_lines":[{"line_number":558,"context_line":"        block_count \u003d size * units.Gi / (block_size_mb * units.Mi)"},{"line_number":559,"context_line":""},{"line_number":560,"context_line":"        LOG.info(_LI(\u0027Creating regular file: %s.\u0027"},{"line_number":561,"context_line":"                     \u0027This may take some time.\u0027) % path)"},{"line_number":562,"context_line":""},{"line_number":563,"context_line":"        nms.appliance.execute("},{"line_number":564,"context_line":"            \u0027dd if\u003d/dev/zero of\u003d%(path)s bs\u003d%(bs)dM count\u003d%(count)d\u0027 % {"}],"source_content_type":"text/x-python","patch_set":52,"id":"fa69d971_ee0d3ee9","line":561,"updated":"2016-01-07 20:40:07.000000000","message":"Please change % to ,","commit_id":"e43fdc09424caed2a72730052e563b377eb842c4"}],"cinder/volume/drivers/nexenta/options.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8d0ee55158edd97266dea71418fad17d92fb9148","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 Nexenta Systems, 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":9,"id":"fa32b979_a43bea9b","line":1,"updated":"2015-06-19 21:06:23.000000000","message":"2015?","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"a249ce466a485b30bd9b1ae2daa6465e5bf1e45c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 Nexenta Systems, 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":19,"id":"fa80f949_ee408da7","line":1,"updated":"2015-11-05 17:56:27.000000000","message":"2015","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"a249ce466a485b30bd9b1ae2daa6465e5bf1e45c","unresolved":false,"context_lines":[{"line_number":19,"context_line":".. automodule:: nexenta.options"},{"line_number":20,"context_line":".. moduleauthor:: Victor Rodionov \u003cvictor.rodionov@nexenta.com\u003e"},{"line_number":21,"context_line":".. moduleauthor:: Yuriy Taraday \u003cyorik.sar@gmail.com\u003e"},{"line_number":22,"context_line":"\"\"\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from oslo_config import cfg"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"fa80f949_8e2f81f5","line":22,"updated":"2015-11-05 17:56:27.000000000","message":"Don’t use author tags. http://docs.openstack.org/developer/hacking/#general","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":16721,"name":"Zohar Mamedov","email":"zohar.cloud@gmail.com","username":"zohar"},"change_message_id":"1ac87fa1d363c845f879e7c314637ec20c02cb91","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    cfg.StrOpt(\u0027nexenta_host\u0027,"},{"line_number":55,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":56,"context_line":"               help\u003d\u0027IP address of Nexenta SA\u0027),"},{"line_number":57,"context_line":"    cfg.IntOpt(\u0027nexenta_rest_port\u0027,"},{"line_number":58,"context_line":"               default\u003d2000,"},{"line_number":59,"context_line":"               help\u003d\u0027HTTP port to connect to Nexenta REST API server\u0027),"},{"line_number":60,"context_line":"    cfg.StrOpt(\u0027nexenta_rest_protocol\u0027,"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a8ffd7b_89799684","line":57,"updated":"2015-12-02 18:24:32.000000000","message":"Please change to 8080","commit_id":"5f329db5912d769aa8b430640676242a2b8744c9"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"63bea3d1cf06713f5f9bc590e262a29d86bf75a4","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 Nexenta Systems, 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":36,"id":"3a7e1126_80c10683","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"updated":"2015-12-16 22:42:46.000000000","message":"You may want to update the copyright on this one.","commit_id":"9f87e8f2316b78efeeeb25aa9ba883a421bbee10"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"63bea3d1cf06713f5f9bc590e262a29d86bf75a4","unresolved":false,"context_lines":[{"line_number":17,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":".. automodule:: nexenta.options"},{"line_number":20,"context_line":".. moduleauthor:: Victor Rodionov \u003cvictor.rodionov@nexenta.com\u003e"},{"line_number":21,"context_line":".. moduleauthor:: Yuriy Taraday \u003cyorik.sar@gmail.com\u003e"},{"line_number":22,"context_line":"\"\"\""},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"3a7e1126_20be1200","line":20,"range":{"start_line":20,"start_character":25,"end_line":20,"end_character":33},"updated":"2015-12-16 22:42:46.000000000","message":"Remove moduleauthor tags.","commit_id":"9f87e8f2316b78efeeeb25aa9ba883a421bbee10"}],"cinder/volume/drivers/nexenta/utils.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8d0ee55158edd97266dea71418fad17d92fb9148","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 Nexenta Systems, 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":9,"id":"fa32b979_845d86ee","line":1,"updated":"2015-06-19 21:06:23.000000000","message":"2015?","commit_id":"d56177cc43fc5b026952a86bf31b7841c783c7f4"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"a249ce466a485b30bd9b1ae2daa6465e5bf1e45c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 Nexenta Systems, 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":19,"id":"fa80f949_2ee8d5b3","line":1,"updated":"2015-11-05 17:56:27.000000000","message":"it might be 2015","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"a249ce466a485b30bd9b1ae2daa6465e5bf1e45c","unresolved":false,"context_lines":[{"line_number":19,"context_line":".. automodule:: nexenta.utils"},{"line_number":20,"context_line":".. moduleauthor:: Nexenta OpenStack Developers \u003copenstack.team@nexenta.com\u003e"},{"line_number":21,"context_line":"\"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"import re"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from oslo_utils import units"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa80f949_4e2af92d","line":22,"updated":"2015-11-05 17:56:27.000000000","message":"Don’t use author tags.\nhttp://docs.openstack.org/developer/hacking/#general","commit_id":"31571beddc59b0737b5706b080801f790d6e1e50"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"63bea3d1cf06713f5f9bc590e262a29d86bf75a4","unresolved":false,"context_lines":[{"line_number":17,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":".. automodule:: nexenta.utils"},{"line_number":20,"context_line":".. moduleauthor:: Nexenta OpenStack Developers \u003copenstack.team@nexenta.com\u003e"},{"line_number":21,"context_line":"\"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"import re"}],"source_content_type":"text/x-python","patch_set":36,"id":"3a7e1126_6072da7e","line":20,"range":{"start_line":20,"start_character":3,"end_line":20,"end_character":15},"updated":"2015-12-16 22:42:46.000000000","message":"remove","commit_id":"9f87e8f2316b78efeeeb25aa9ba883a421bbee10"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"63bea3d1cf06713f5f9bc590e262a29d86bf75a4","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    \"\"\"Returns rrmgr command for source and destination.\"\"\""},{"line_number":68,"context_line":"    cmd \u003d [\u0027rrmgr\u0027, \u0027-s\u0027, \u0027zfs\u0027]"},{"line_number":69,"context_line":"    if compression:"},{"line_number":70,"context_line":"        cmd.extend([\u0027-c\u0027, \u0027%s\u0027 % str(compression)])"},{"line_number":71,"context_line":"    cmd.append(\u0027-q\u0027)"},{"line_number":72,"context_line":"    cmd.append(\u0027-e\u0027)"},{"line_number":73,"context_line":"    if tcp_buf_size:"}],"source_content_type":"text/x-python","patch_set":36,"id":"3a7e1126_80f6e6d5","line":70,"range":{"start_line":70,"start_character":33,"end_line":70,"end_character":37},"updated":"2015-12-16 22:42:46.000000000","message":"str() not needed since you are formatting to %s","commit_id":"9f87e8f2316b78efeeeb25aa9ba883a421bbee10"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4a37c3ad98f408d82beb0f7d758502a031379d78","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    cmd.append(\u0027-q\u0027)"},{"line_number":71,"context_line":"    cmd.append(\u0027-e\u0027)"},{"line_number":72,"context_line":"    if tcp_buf_size:"},{"line_number":73,"context_line":"        cmd.extend([\u0027-w\u0027, str(tcp_buf_size)])"},{"line_number":74,"context_line":"    if connections:"},{"line_number":75,"context_line":"        cmd.extend([\u0027-n\u0027, str(connections)])"},{"line_number":76,"context_line":"    cmd.extend([src, dst])"}],"source_content_type":"text/x-python","patch_set":49,"id":"fa69d971_125e8976","line":73,"updated":"2016-01-02 07:04:51.000000000","message":"Please use six.text_type instead of str().","commit_id":"81d669db10e498f948ca9e443857b97726a352da"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4a37c3ad98f408d82beb0f7d758502a031379d78","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    if tcp_buf_size:"},{"line_number":73,"context_line":"        cmd.extend([\u0027-w\u0027, str(tcp_buf_size)])"},{"line_number":74,"context_line":"    if connections:"},{"line_number":75,"context_line":"        cmd.extend([\u0027-n\u0027, str(connections)])"},{"line_number":76,"context_line":"    cmd.extend([src, dst])"},{"line_number":77,"context_line":"    return \u0027 \u0027.join(cmd)"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":49,"id":"fa69d971_b2553d51","line":75,"updated":"2016-01-02 07:04:51.000000000","message":"same","commit_id":"81d669db10e498f948ca9e443857b97726a352da"}],"releasenotes/notes/re-add-nexenta-driver-d3af97e33551a485.yaml":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"63bea3d1cf06713f5f9bc590e262a29d86bf75a4","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"  - Nexenta driver was removed in Kilo release due to lack of stable CI."},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - Added Migrate and Extend for NFS."},{"line_number":6,"context_line":"  - Added Retype functionality to both iSCSI and NFS drivers."}],"source_content_type":"text/x-yaml","patch_set":36,"id":"3a7e1126_2076123f","line":3,"range":{"start_line":3,"start_character":12,"end_line":3,"end_character":18},"updated":"2015-12-16 22:42:46.000000000","message":"These end up getting merged together with other release notes, so remove the prelude section and just add Nexenta to the items below.\n\nSince it\u0027s been two releases since the driver was here, I don\u0027t think these are added features and upgrade notes. I would just say one feature of \"Added Nexenta NFS and iSCSI drivers. Or one line for each driver.","commit_id":"9f87e8f2316b78efeeeb25aa9ba883a421bbee10"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"63bea3d1cf06713f5f9bc590e262a29d86bf75a4","unresolved":false,"context_lines":[{"line_number":6,"context_line":"  - Added Retype functionality to both iSCSI and NFS drivers."},{"line_number":7,"context_line":"upgrades:"},{"line_number":8,"context_line":"  - Refactored iSCSI driver to use single target and targetgroup with multiple zvols."},{"line_number":9,"context_line":"  "}],"source_content_type":"text/x-yaml","patch_set":36,"id":"3a7e1126_60e73a13","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":2},"updated":"2015-12-16 22:42:46.000000000","message":"Remove extra space.","commit_id":"9f87e8f2316b78efeeeb25aa9ba883a421bbee10"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"73a7a3285c2f62ba4cc618ed5eb93034b29020df","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - Added Retype functionality to Nexenta iSCSI and NFS drivers."},{"line_number":4,"context_line":"upgrades:"},{"line_number":5,"context_line":"  - Refactored Nexenta iSCSI driver to use single target and targetgroup with multiple zvols."},{"line_number":6,"context_line":"  - Migrated Nexenta unit tests to use mock."}],"source_content_type":"text/x-yaml","patch_set":49,"id":"fa69d971_98de256c","line":6,"updated":"2015-12-31 18:39:00.000000000","message":"The audience for these release notes are end users and deployers. Unit tests are really more of a developer thing, so I don\u0027t think this would mean much to them and may actually cause confusion.\n\nSo I appreciate having the detailed release notes, but I think this last line should probably be removed.","commit_id":"81d669db10e498f948ca9e443857b97726a352da"}]}
