)]}'
{"cinder/interface/__init__.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e294a68d66f2eaac2787c84bcbd3873d2703c97b","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"#"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"# \u003e\u003e\u003e for root, dir, files in os.walk(\u0027cinder/volume/drivers/\u0027):"},{"line_number":18,"context_line":"# ...     for file in fnmatch.filter(files, \u0027*.py\u0027):"},{"line_number":19,"context_line":"# ...         path \u003d os.path.join(root, file)"},{"line_number":20,"context_line":"# ...         print(path.replace(\u0027/\u0027, \u0027.\u0027)[:-3])"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa0719c6_b12359bc","line":17,"updated":"2016-03-24 14:13:20.000000000","message":"This block removed, waiting to push up new rev until there\u0027s other feedback.","commit_id":"14efffe7e5789c160e48a50c769e6711c5554c90"}],"cinder/interface/backup_chunked_driver.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"2d6d9c751c62932531ff87ad403ab5170b15a8f2","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        \"\"\"Delete object from container."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"       :param container: The container to modify."},{"line_number":61,"context_line":"       :param object_name: The object name delete."},{"line_number":62,"context_line":"       \"\"\""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def update_container_name(self, backup, container):"}],"source_content_type":"text/x-python","patch_set":13,"id":"7aa08908_a5ed9b26","line":61,"range":{"start_line":61,"start_character":27,"end_line":61,"end_character":49},"updated":"2016-06-15 02:30:09.000000000","message":"The name of the object to delete?","commit_id":"e7b40242f8aa3a99aa2d6bb5f0a80a2d8bd19aea"}],"cinder/interface/backup_driver.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"2d6d9c751c62932531ff87ad403ab5170b15a8f2","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        :param backup: backup object to export"},{"line_number":108,"context_line":"        :param driver_info: dictionary with driver specific backup record"},{"line_number":109,"context_line":"                            information"},{"line_number":110,"context_line":"        :returns: nothing"},{"line_number":111,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"7aa08908_65e0d326","line":110,"range":{"start_line":110,"start_character":18,"end_line":110,"end_character":25},"updated":"2016-06-15 02:30:09.000000000","message":"None","commit_id":"e7b40242f8aa3a99aa2d6bb5f0a80a2d8bd19aea"}],"cinder/interface/base.py":[{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"835b218e5601ac77ee51228cc1923ecd2f9631ba","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    return result"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":46,"context_line":"class CinderInterface(object):"},{"line_number":47,"context_line":"    \"\"\"Interface base class for Cinder."},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da0c15f0_de02153e","line":45,"range":{"start_line":45,"start_character":1,"end_line":45,"end_character":4},"updated":"2016-03-25 11:36:25.000000000","message":"This is used in unit test, so should we add \"six\" to file test-requirements.txt?","commit_id":"4c5789c3ef8f7e357fc8df60126b2aa7db82abac"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"9eb68c84b18f42512791a3ce3f5be843f9e7a6dc","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    return result"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":46,"context_line":"class CinderInterface(object):"},{"line_number":47,"context_line":"    \"\"\"Interface base class for Cinder."},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da0c15f0_d007821a","line":45,"range":{"start_line":45,"start_character":1,"end_line":45,"end_character":4},"in_reply_to":"da0c15f0_de02153e","updated":"2016-03-26 09:42:51.000000000","message":"It\u0027s not needed in test-requirements.txt since it\u0027s already covered in requirements.txt.","commit_id":"4c5789c3ef8f7e357fc8df60126b2aa7db82abac"}],"cinder/interface/util.py":[{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"ad6deb642ddfcfafc1c47309ccc11d187a262d87","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    :param start_path: The starting path to load."},{"line_number":30,"context_line":"    \"\"\""},{"line_number":31,"context_line":"    for root, folder, files in os.walk(start_path):"},{"line_number":32,"context_line":"        for phile in fnmatch.filter(files, \u0027*.py\u0027):"},{"line_number":33,"context_line":"            path \u003d os.path.join(root, phile)"},{"line_number":34,"context_line":"            try:"},{"line_number":35,"context_line":"                __import__("}],"source_content_type":"text/x-python","patch_set":5,"id":"9a061dce_999e3c05","line":32,"updated":"2016-04-07 16:07:56.000000000","message":"haha. Someone\u0027s going to nit you for this :)","commit_id":"4e9361aad50781b03022dad2b097c966ee397c06"}],"cinder/interface/volume_snapshotmanagement_driver.py":[{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"835b218e5601ac77ee51228cc1923ecd2f9631ba","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from cinder.interface import base"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class VolumeManagementDriver(base.CinderInterface):"},{"line_number":25,"context_line":"    \"\"\"Interface for drivers that support managing existing snapshots.\"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def manage_existing_snapshot(self, snapshot, existing_ref):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da0c15f0_5e4d6571","line":24,"range":{"start_line":24,"start_character":29,"end_line":24,"end_character":49},"updated":"2016-03-25 11:36:25.000000000","message":"Should this be: \"volume_driver.VolumeDriverCore\" ?\nAlso this class is not used in this change, so there will be a further patch that will use classes like this one?","commit_id":"4c5789c3ef8f7e357fc8df60126b2aa7db82abac"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"9eb68c84b18f42512791a3ce3f5be843f9e7a6dc","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from cinder.interface import base"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class VolumeManagementDriver(base.CinderInterface):"},{"line_number":25,"context_line":"    \"\"\"Interface for drivers that support managing existing snapshots.\"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def manage_existing_snapshot(self, snapshot, existing_ref):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da0c15f0_5b21d39e","line":24,"range":{"start_line":24,"start_character":29,"end_line":24,"end_character":49},"in_reply_to":"da0c15f0_5e4d6571","updated":"2016-03-26 09:42:51.000000000","message":"No, just the base interface class that allows indirect inheritance checking.\n\nWith all of the different combinations, it becomes very difficult to have a clear heirarchy of classes without accidentally picking up something you don\u0027t want. I think that\u0027s been one of the challenges we\u0027ve had with the ABC work that was started previously.\n\nKeeping these separate will allow us to check support for each discrete groups of functionality. This patch doesn\u0027t have it, because I didn\u0027t want to include too much, but with these additional \"interface\" classes we will be able to programatically generate the driver support matrix that we are (poorly) maintaining on the wiki.","commit_id":"4c5789c3ef8f7e357fc8df60126b2aa7db82abac"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"b6c1b45461f0871a90dc925987ec71edcec4a153","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from cinder.interface import base"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class VolumeManagementDriver(base.CinderInterface):"},{"line_number":25,"context_line":"    \"\"\"Interface for drivers that support managing existing snapshots.\"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def manage_existing_snapshot(self, snapshot, existing_ref):"}],"source_content_type":"text/x-python","patch_set":8,"id":"dab17558_638aeac0","line":24,"range":{"start_line":24,"start_character":6,"end_line":24,"end_character":28},"updated":"2016-05-16 14:33:51.000000000","message":"Can we rename this to VolumeSnapshotManagementDriver because VolumeManagementDriver is already used?","commit_id":"857dc010d38a78f83530bf8d2d863aa1bedf3a08"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c82178f9b721ea48bfd7be2b6c5c09f37547eedc","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from cinder.interface import base"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class VolumeManagementDriver(base.CinderInterface):"},{"line_number":25,"context_line":"    \"\"\"Interface for drivers that support managing existing snapshots.\"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def manage_existing_snapshot(self, snapshot, existing_ref):"}],"source_content_type":"text/x-python","patch_set":8,"id":"dab17558_3fa7450c","line":24,"range":{"start_line":24,"start_character":6,"end_line":24,"end_character":28},"in_reply_to":"dab17558_638aeac0","updated":"2016-05-16 19:29:39.000000000","message":"Done","commit_id":"857dc010d38a78f83530bf8d2d863aa1bedf3a08"}],"cinder/tests/compliance/test_fczm_drivers.py":[{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"b6c1b45461f0871a90dc925987ec71edcec4a153","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"@ddt.ddt"},{"line_number":27,"context_line":"class TestBackupDrivers(test.TestCase):"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def test_backup_driver_decorator(self):"},{"line_number":30,"context_line":"        \"\"\"Sanity check on the decorator."}],"source_content_type":"text/x-python","patch_set":8,"id":"dab17558_66d2f801","line":27,"range":{"start_line":27,"start_character":6,"end_line":27,"end_character":23},"updated":"2016-05-16 14:33:51.000000000","message":"TestFibreChannelZoneManagerDrivers","commit_id":"857dc010d38a78f83530bf8d2d863aa1bedf3a08"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c82178f9b721ea48bfd7be2b6c5c09f37547eedc","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"@ddt.ddt"},{"line_number":27,"context_line":"class TestBackupDrivers(test.TestCase):"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def test_backup_driver_decorator(self):"},{"line_number":30,"context_line":"        \"\"\"Sanity check on the decorator."}],"source_content_type":"text/x-python","patch_set":8,"id":"dab17558_7f942d8a","line":27,"range":{"start_line":27,"start_character":6,"end_line":27,"end_character":23},"in_reply_to":"dab17558_66d2f801","updated":"2016-05-16 19:29:39.000000000","message":"Done","commit_id":"857dc010d38a78f83530bf8d2d863aa1bedf3a08"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"b6c1b45461f0871a90dc925987ec71edcec4a153","unresolved":false,"context_lines":[{"line_number":26,"context_line":"@ddt.ddt"},{"line_number":27,"context_line":"class TestBackupDrivers(test.TestCase):"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def test_backup_driver_decorator(self):"},{"line_number":30,"context_line":"        \"\"\"Sanity check on the decorator."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"        The interface code is somewhat implicitly tested. We don\u0027t need unit"}],"source_content_type":"text/x-python","patch_set":8,"id":"dab17558_66279812","line":29,"range":{"start_line":29,"start_character":8,"end_line":29,"end_character":36},"updated":"2016-05-16 14:33:51.000000000","message":"test_fczm_driver_decorator","commit_id":"857dc010d38a78f83530bf8d2d863aa1bedf3a08"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c82178f9b721ea48bfd7be2b6c5c09f37547eedc","unresolved":false,"context_lines":[{"line_number":26,"context_line":"@ddt.ddt"},{"line_number":27,"context_line":"class TestBackupDrivers(test.TestCase):"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def test_backup_driver_decorator(self):"},{"line_number":30,"context_line":"        \"\"\"Sanity check on the decorator."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"        The interface code is somewhat implicitly tested. We don\u0027t need unit"}],"source_content_type":"text/x-python","patch_set":8,"id":"dab17558_ffee5d20","line":29,"range":{"start_line":29,"start_character":8,"end_line":29,"end_character":36},"in_reply_to":"dab17558_66279812","updated":"2016-05-16 19:29:39.000000000","message":"Done","commit_id":"857dc010d38a78f83530bf8d2d863aa1bedf3a08"}],"cinder/volume/drivers/dell/dell_storagecenter_fc.py":[{"author":{"_account_id":12112,"name":"Tom Swanson","email":"tom_swanson@dell.com","username":"tomswanson"},"change_message_id":"c8111294997532dbbd5aa31bb41ec88ccb29403d","unresolved":false,"context_lines":[{"line_number":27,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"@interface.volumedriver"},{"line_number":31,"context_line":"class DellStorageCenterFCDriver(dell_storagecenter_common.DellCommonDriver,"},{"line_number":32,"context_line":"                                driver.FibreChannelDriver):"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_2cdb2b1d","line":30,"range":{"start_line":30,"start_character":0,"end_line":30,"end_character":23},"updated":"2016-06-09 20:20:13.000000000","message":"So, just volumedriver? What about consistencygroups and manage and snapshot manage and whatnot?","commit_id":"2bca31027ae17a5fda476bd9a9733391c5b31d08"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8811619fb347a34d515def0f34a4c62b6a14cbab","unresolved":false,"context_lines":[{"line_number":27,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"@interface.volumedriver"},{"line_number":31,"context_line":"class DellStorageCenterFCDriver(dell_storagecenter_common.DellCommonDriver,"},{"line_number":32,"context_line":"                                driver.FibreChannelDriver):"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_e7af7c29","line":30,"range":{"start_line":30,"start_character":0,"end_line":30,"end_character":23},"in_reply_to":"7aa08908_2cdb2b1d","updated":"2016-06-09 20:45:12.000000000","message":"This is correct. Drivers are just decorated with this tag as the minimum designation as a volumedriver.\n\nThe other interfaces can then be used to programmatically get the full scope of the driver implementation via something like:\n\nisinstance(driver, cinder.interface.volume_consistencygroup_driver)","commit_id":"2bca31027ae17a5fda476bd9a9733391c5b31d08"}],"cinder/volume/drivers/dell/dell_storagecenter_iscsi.py":[{"author":{"_account_id":12112,"name":"Tom Swanson","email":"tom_swanson@dell.com","username":"tomswanson"},"change_message_id":"c8111294997532dbbd5aa31bb41ec88ccb29403d","unresolved":false,"context_lines":[{"line_number":25,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"@interface.volumedriver"},{"line_number":29,"context_line":"class DellStorageCenterISCSIDriver(dell_storagecenter_common.DellCommonDriver,"},{"line_number":30,"context_line":"                                   driver.ISCSIDriver):"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_4ce157d0","line":28,"range":{"start_line":28,"start_character":0,"end_line":28,"end_character":23},"updated":"2016-06-09 20:20:13.000000000","message":"So, just volumedriver? What about consistencygroups and manage and snapshot manage and whatnot?","commit_id":"2bca31027ae17a5fda476bd9a9733391c5b31d08"}],"tools/generate_driver_list.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"6734ffb59beaedee9def70cb1594a367dab8630d","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    print(\u0027\u0027)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def main():"},{"line_number":40,"context_line":"    print(\u0027VOLUME DRIVERS\u0027)"},{"line_number":41,"context_line":"    print(\u0027\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u0027)"},{"line_number":42,"context_line":"    print_drivers(util.get_volume_drivers(), \u0027volume_driver\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa0719c6_6c14464c","line":39,"updated":"2016-03-24 14:30:41.000000000","message":"nit: it will be useful to make it parameterized to show  only volume drivers or only backup drivers. But we can always implement it in a following patch","commit_id":"14efffe7e5789c160e48a50c769e6711c5554c90"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"1a048738acdd8db651a89501691983aa681a495a","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    print(\u0027\u0027)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def main():"},{"line_number":40,"context_line":"    print(\u0027VOLUME DRIVERS\u0027)"},{"line_number":41,"context_line":"    print(\u0027\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u0027)"},{"line_number":42,"context_line":"    print_drivers(util.get_volume_drivers(), \u0027volume_driver\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa0719c6_ce4d87c5","line":39,"in_reply_to":"fa0719c6_6c14464c","updated":"2016-03-24 14:35:04.000000000","message":"I agree. I was thinking of expanding this to include output options (JSON, HTML, etc.) and whether to include the descriptions or not. As it is right now though it is only called from \"tox -e gendriverlist\", so I left it at that.\n\nDefinitely an area for improvement!","commit_id":"14efffe7e5789c160e48a50c769e6711c5554c90"}],"tox.ini":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"e1e93ab3870335823aab7fd6fdb2926806f766fb","unresolved":false,"context_lines":[{"line_number":36,"context_line":"setenv \u003d"},{"line_number":37,"context_line":"  OS_TEST_PATH \u003d ./cinder/tests/functional"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"[testenv:compliance]"},{"line_number":40,"context_line":"setenv \u003d"},{"line_number":41,"context_line":"  OS_TEST_PATH \u003d ./cinder/tests/compliance"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-properties","patch_set":6,"id":"9a061dce_74236556","line":39,"updated":"2016-04-07 18:17:02.000000000","message":"Should set\n\nenvdir \u003d {toxworkdir}/pep8\n\nso we don\u0027t keep multiplying disk usage for tox environments.  (This is done for genconfig and genopts below.)","commit_id":"fee033d7bc7749c44f8a285db7d747caae3f4663"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0f00f987ce2b889de25b5dda5e7a72498c5a5f46","unresolved":false,"context_lines":[{"line_number":36,"context_line":"setenv \u003d"},{"line_number":37,"context_line":"  OS_TEST_PATH \u003d ./cinder/tests/functional"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"[testenv:compliance]"},{"line_number":40,"context_line":"setenv \u003d"},{"line_number":41,"context_line":"  OS_TEST_PATH \u003d ./cinder/tests/compliance"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-properties","patch_set":6,"id":"9a061dce_74988578","line":39,"in_reply_to":"9a061dce_74236556","updated":"2016-04-07 18:19:02.000000000","message":"Good call. Done.","commit_id":"fee033d7bc7749c44f8a285db7d747caae3f4663"}]}
