)]}'
{"cinder/tests/test_block_device.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"f2fc9422ebbc27234911da38654829366c5f7056","unresolved":false,"context_lines":[{"line_number":1,"context_line":"import os.path"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"import mox"},{"line_number":4,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAO3%2F%2F%2F6M%3D","line":1,"updated":"2013-05-15 07:16:05.000000000","message":"add copyright header for 2013. You can find the header in pretty much any file.","commit_id":"b1c3ce9695f14e857cbe2bc972dc29614868d557"},{"author":{"_account_id":6043,"name":"Kurt Martin","email":"kurt.f.martin@hpe.com","username":"kurt-f-martin"},"change_message_id":"2efcf85c3feffda4ec5d1c0d13efffd932200147","unresolved":false,"context_lines":[{"line_number":28,"context_line":"FLAGS \u003d cinder.flags.FLAGS"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class TestBlockDeviceDriver(cinder.test.TestCase):"},{"line_number":32,"context_line":"    def setUp(self):"},{"line_number":33,"context_line":"        super(TestBlockDeviceDriver, self).setUp()"},{"line_number":34,"context_line":"        self.configuration \u003d mox.MockAnything()"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPH%2F%2FzlQ%3D","line":31,"updated":"2013-05-22 16:33:48.000000000","message":"Ann, you\u0027re missing test cases for the features that you added recently, like clone, copy volume to image, etc...","commit_id":"02dd5a4cc5f01fd2bd23189b5d4ac959b40fda20"}],"cinder/volume/drivers/block_device.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"f2fc9422ebbc27234911da38654829366c5f7056","unresolved":false,"context_lines":[{"line_number":1,"context_line":"import os"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"from oslo.config import cfg"},{"line_number":4,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAO3%2F%2F%2F6I%3D","line":1,"updated":"2013-05-15 07:16:05.000000000","message":"add copyright header for 2013.","commit_id":"b1c3ce9695f14e857cbe2bc972dc29614868d557"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"958242b6359b0e280f9d3953e83b98dc39e4203d","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            # ietadm show will exit with an error"},{"line_number":149,"context_line":"            # this export has already been removed"},{"line_number":150,"context_line":"            self.tgtadm.show_target(iscsi_target, iqn\u003diqn)"},{"line_number":151,"context_line":"        except Exception as e:"},{"line_number":152,"context_line":"            LOG.info(_(\"Skipping remove_export. No iscsi_target \""},{"line_number":153,"context_line":"                       \"is presently exported for volume: %s\"), volume[\u0027id\u0027])"},{"line_number":154,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAO3%2F%2F9qo%3D","line":151,"updated":"2013-05-15 23:59:32.000000000","message":"e is never used.","commit_id":"b1c3ce9695f14e857cbe2bc972dc29614868d557"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"f2fc9422ebbc27234911da38654829366c5f7056","unresolved":false,"context_lines":[{"line_number":315,"context_line":"        total_size \u003d 0"},{"line_number":316,"context_line":"        free_size \u003d 0"},{"line_number":317,"context_line":"        for device, size in dict_of_devices_sizes.iteritems():"},{"line_number":318,"context_line":"            if not device in used_devices:"},{"line_number":319,"context_line":"                free_size +\u003d size"},{"line_number":320,"context_line":"            total_size +\u003d size"},{"line_number":321,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAO3%2F%2F%2F58%3D","line":318,"updated":"2013-05-15 07:16:05.000000000","message":"if device not in used_devices","commit_id":"b1c3ce9695f14e857cbe2bc972dc29614868d557"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"9d193348fffe4cc2676140cd68d54e4a03e0636e","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"volume_opts \u003d ["},{"line_number":33,"context_line":"    cfg.ListOpt(\u0027available_devices\u0027,"},{"line_number":34,"context_line":"                default\u003d[],"},{"line_number":35,"context_line":"                help\u003d\u0027List of all available devices\u0027),"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPH%2F%2F5oo%3D","line":32,"updated":"2013-05-20 18:14:00.000000000","message":"Please update etc/cinder/cinder.conf.sample when adding options.  (tools/conf/generate_sample.sh)","commit_id":"02dd5a4cc5f01fd2bd23189b5d4ac959b40fda20"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"9982d306b077017aec7b9a2c5e59cbd11e7f04b0","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    def check_for_setup_error(self):"},{"line_number":61,"context_line":"        pass"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def create_volume(self, volume):"},{"line_number":64,"context_line":"        device \u003d self.find_appropriate_size_device(volume[\u0027size\u0027])"},{"line_number":65,"context_line":"        LOG.info(\"Create %s on %s\" % (volume[\u0027name\u0027], device))"},{"line_number":66,"context_line":"        return {"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPH%2F%2F1BY%3D","line":63,"updated":"2013-05-22 05:35:51.000000000","message":"One thing I\u0027d like to add here is a check to make sure the dev isn\u0027t in use or mounted.","commit_id":"02dd5a4cc5f01fd2bd23189b5d4ac959b40fda20"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"c6f73abd30ed33e210b37f106fb957af931a25a5","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    def check_for_setup_error(self):"},{"line_number":61,"context_line":"        pass"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def create_volume(self, volume):"},{"line_number":64,"context_line":"        device \u003d self.find_appropriate_size_device(volume[\u0027size\u0027])"},{"line_number":65,"context_line":"        LOG.info(\"Create %s on %s\" % (volume[\u0027name\u0027], device))"},{"line_number":66,"context_line":"        return {"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPH%2F%2F0G0%3D","line":63,"in_reply_to":"AAAAPH%2F%2F1BY%3D","updated":"2013-05-22 14:26:21.000000000","message":"We use only devices mentioned in configuration, so it is administrator\u0027s duty to provide the devices that could be used.","commit_id":"02dd5a4cc5f01fd2bd23189b5d4ac959b40fda20"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"9982d306b077017aec7b9a2c5e59cbd11e7f04b0","unresolved":false,"context_lines":[{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    def delete_volume(self, volume):"},{"line_number":250,"context_line":"        \"\"\"Deletes a logical volume.\"\"\""},{"line_number":251,"context_line":"        dev_path \u003d self.local_path(volume)"},{"line_number":252,"context_line":"        if not dev_path:"},{"line_number":253,"context_line":"            return"},{"line_number":254,"context_line":"        if os.path.exists(dev_path):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPH%2F%2F1BQ%3D","line":251,"updated":"2013-05-22 05:35:51.000000000","message":"I don\u0027t think this is quite sufficient, we need to be pretty careful we don\u0027t inadvertantly eat somebody\u0027s root disk or other disk that they may have on the system that we don\u0027t own.  Granted, this *should* be fairly reasonable as we\u0027re using a volume object assuming that we made some good safety checks on create.","commit_id":"02dd5a4cc5f01fd2bd23189b5d4ac959b40fda20"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"c6f73abd30ed33e210b37f106fb957af931a25a5","unresolved":false,"context_lines":[{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    def delete_volume(self, volume):"},{"line_number":250,"context_line":"        \"\"\"Deletes a logical volume.\"\"\""},{"line_number":251,"context_line":"        dev_path \u003d self.local_path(volume)"},{"line_number":252,"context_line":"        if not dev_path:"},{"line_number":253,"context_line":"            return"},{"line_number":254,"context_line":"        if os.path.exists(dev_path):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPH%2F%2Fz%2F8%3D","line":251,"in_reply_to":"AAAAPH%2F%2F1BQ%3D","updated":"2013-05-22 14:26:21.000000000","message":"I will add a check that dev_path mentioned in configuration, this will make deletion safe.","commit_id":"02dd5a4cc5f01fd2bd23189b5d4ac959b40fda20"},{"author":{"_account_id":6786,"name":"Sergey Lukjanov","email":"me@slukjanov.name","username":"slukjanov"},"change_message_id":"8e96667b2eefd230af2edd3c406f7f42ca217306","unresolved":false,"context_lines":[{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    def ensure_export(self, context, volume):"},{"line_number":166,"context_line":"        \"\"\"Synchronously recreates an export for a logical volume."},{"line_number":167,"context_line":"        :param context:"},{"line_number":168,"context_line":"        :param volume:"},{"line_number":169,"context_line":"        \"\"\""},{"line_number":170,"context_line":"        # NOTE(jdg): tgtadm doesn\u0027t use the iscsi_targets table"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2FrKI%3D","line":167,"updated":"2013-05-27 20:22:21.000000000","message":"You missed the description here.","commit_id":"1e4ac269a2013dc49f116a1f190343cf460c2c1a"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"5ba7b15615db4aa072f57deeac8af5d84d393913","unresolved":false,"context_lines":[{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    def ensure_export(self, context, volume):"},{"line_number":166,"context_line":"        \"\"\"Synchronously recreates an export for a logical volume."},{"line_number":167,"context_line":"        :param context:"},{"line_number":168,"context_line":"        :param volume:"},{"line_number":169,"context_line":"        \"\"\""},{"line_number":170,"context_line":"        # NOTE(jdg): tgtadm doesn\u0027t use the iscsi_targets table"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2FqyM%3D","line":167,"in_reply_to":"AAAAPH%2F%2FrKI%3D","updated":"2013-05-28 05:50:15.000000000","message":"This method was taken from LVMISCSIDriver there is no description there.","commit_id":"1e4ac269a2013dc49f116a1f190343cf460c2c1a"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"047f40a677454fbd8b512f4677a64fd0e6c6b911","unresolved":false,"context_lines":[{"line_number":43,"context_line":"]"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"class BlockDeviceDriver(driver.ISCSIDriver, driver.VolumeDriver):"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPn%2F%2F5hY%3D","line":46,"updated":"2013-06-18 18:38:11.000000000","message":"Why do you need to inherit from VolumeDriver (ISCSIDriver inherits from it)?","commit_id":"51c845f0ed48004c8df219f2bc6341e09bba661a"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"047f40a677454fbd8b512f4677a64fd0e6c6b911","unresolved":false,"context_lines":[{"line_number":398,"context_line":""},{"line_number":399,"context_line":"        for device in free_devices:"},{"line_number":400,"context_line":"            if dict_of_devices_sizes[device] \u003e\u003d size * 1024:"},{"line_number":401,"context_line":"                return device"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"        raise exception.CinderException(_(\"No big enough free disk\"))"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPn%2F%2F5gE%3D","line":401,"updated":"2013-06-18 18:38:11.000000000","message":"Is it of interest to find the smallest device that is larger than \u0027size\u0027?","commit_id":"51c845f0ed48004c8df219f2bc6341e09bba661a"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"646763ff406c875800105897acabbf486c3a842e","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    cfg.ListOpt(\u0027available_devices\u0027,"},{"line_number":34,"context_line":"                default\u003d[],"},{"line_number":35,"context_line":"                help\u003d\u0027List of all available devices\u0027),"},{"line_number":36,"context_line":"    cfg.IntOpt(\u0027volume_clear_size\u0027,"},{"line_number":37,"context_line":"               default\u003d0,"},{"line_number":38,"context_line":"               help\u003d\u0027Size in MiB to wipe at start of old volumes. 0 \u003d\u003e all\u0027),"},{"line_number":39,"context_line":"    cfg.StrOpt(\u0027volume_clear\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAP3%2F%2F%2Fgk%3D","line":36,"updated":"2013-07-07 04:57:13.000000000","message":"This option and \u0027volume_clear\u0027 are already defined by LVM, why not reuse?  I\u0027m hoping these functions will go to brick anyway - there was a bug fix already in the LVM code that didn\u0027t make it here.","commit_id":"79c649976e7d365116b9041bb8601d56196aa87d"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"4c12f68bf669b04919c9277ea1b61fa05bd04780","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    cfg.ListOpt(\u0027available_devices\u0027,"},{"line_number":34,"context_line":"                default\u003d[],"},{"line_number":35,"context_line":"                help\u003d\u0027List of all available devices\u0027),"},{"line_number":36,"context_line":"    cfg.IntOpt(\u0027volume_clear_size\u0027,"},{"line_number":37,"context_line":"               default\u003d0,"},{"line_number":38,"context_line":"               help\u003d\u0027Size in MiB to wipe at start of old volumes. 0 \u003d\u003e all\u0027),"},{"line_number":39,"context_line":"    cfg.StrOpt(\u0027volume_clear\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAP3%2F%2Fp6w%3D","line":36,"in_reply_to":"AAAAP3%2F%2F%2BuE%3D","updated":"2013-07-15 07:26:51.000000000","message":"Nevermind - this is OK for now - let\u0027s fix when it\u0027s moved to brick.","commit_id":"79c649976e7d365116b9041bb8601d56196aa87d"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"64021ca48a946e03f5b203b808178d1b09e1c46e","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    cfg.ListOpt(\u0027available_devices\u0027,"},{"line_number":34,"context_line":"                default\u003d[],"},{"line_number":35,"context_line":"                help\u003d\u0027List of all available devices\u0027),"},{"line_number":36,"context_line":"    cfg.IntOpt(\u0027volume_clear_size\u0027,"},{"line_number":37,"context_line":"               default\u003d0,"},{"line_number":38,"context_line":"               help\u003d\u0027Size in MiB to wipe at start of old volumes. 0 \u003d\u003e all\u0027),"},{"line_number":39,"context_line":"    cfg.StrOpt(\u0027volume_clear\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAP3%2F%2F%2BuE%3D","line":36,"in_reply_to":"AAAAP3%2F%2F%2Fgk%3D","updated":"2013-07-08 06:48:59.000000000","message":"Avishay\n\n\nHow exactly do you propose to reuse it? Can you tell more?","commit_id":"79c649976e7d365116b9041bb8601d56196aa87d"},{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"69bc2e669842ce783042bf0b4430b390b3f24423","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    cfg.ListOpt(\u0027available_devices\u0027,"},{"line_number":34,"context_line":"                default\u003d[],"},{"line_number":35,"context_line":"                help\u003d\u0027List of all available devices\u0027),"},{"line_number":36,"context_line":"    cfg.IntOpt(\u0027volume_clear_size\u0027,"},{"line_number":37,"context_line":"               default\u003d0,"},{"line_number":38,"context_line":"               help\u003d\u0027Size in MiB to wipe at start of old volumes. 0 \u003d\u003e all\u0027),"},{"line_number":39,"context_line":"    cfg.StrOpt(\u0027volume_clear\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAP3%2F%2F%2Fgc%3D","line":36,"in_reply_to":"AAAAP3%2F%2F%2Fgk%3D","updated":"2013-07-07 05:05:42.000000000","message":"Is there any good way to reuse config options between drivers?\n\nThese two options are used by this driver and to append only two options from some other driver will require some unpretty hackery.","commit_id":"79c649976e7d365116b9041bb8601d56196aa87d"}],"cinder/volume/drivers/hdd.py":[{"author":{"_account_id":6043,"name":"Kurt Martin","email":"kurt.f.martin@hpe.com","username":"kurt-f-martin"},"change_message_id":"047276138c0e8f23af891386949cdfa734aff8a3","unresolved":false,"context_lines":[{"line_number":6,"context_line":"from cinder import context"},{"line_number":7,"context_line":"from cinder.db.sqlalchemy import api"},{"line_number":8,"context_line":"from cinder import exception"},{"line_number":9,"context_line":"from cinder import flags"},{"line_number":10,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":11,"context_line":"from cinder.volume import driver"},{"line_number":12,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2FwSE%3D","line":9,"updated":"2013-04-24 18:42:52.000000000","message":"FYI...you should remove the use of flags all together, self.configuration instead","commit_id":"25564f54e59ff38c94dd3f9f472d9ed5a3609746"},{"author":{"_account_id":6043,"name":"Kurt Martin","email":"kurt.f.martin@hpe.com","username":"kurt-f-martin"},"change_message_id":"047276138c0e8f23af891386949cdfa734aff8a3","unresolved":false,"context_lines":[{"line_number":18,"context_line":"                help\u003d\u0027List of all available devices\u0027),"},{"line_number":19,"context_line":"]"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"FLAGS \u003d flags.FLAGS"},{"line_number":22,"context_line":"FLAGS.register_opts(volume_opts)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2FwRQ%3D","line":21,"updated":"2013-04-24 18:42:52.000000000","message":"ditto","commit_id":"25564f54e59ff38c94dd3f9f472d9ed5a3609746"}]}
