)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"f61382f079ff4f4a658140b9d4dd237e85dd6ac1","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Kaitlin Farr \u003ckaitlin.farr@jhuapl.edu\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-01-30 17:08:37 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adds ephemeral storage encryption for Raw back-end images"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds ephemeral storage encryption for Raw back-end instances."},{"line_number":10,"context_line":"Encryption is implemented by passing all data written to and read from"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAUH%2F91cA%3D","line":7,"updated":"2014-02-03 14:25:21.000000000","message":"The rest of this commit message appears to be a copy-paste of https://review.openstack.org/#/c/40467/\n\nNo objections to duplication as long as all the information remains correct. (For example, migration *should* be supported for the raw backend whereas it is not implemented for LVM.)","commit_id":"34fc2bc095905e09d388266e8abc6608d6719d85"}],"etc/nova/nova.conf.sample":[{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"f61382f079ff4f4a658140b9d4dd237e85dd6ac1","unresolved":false,"context_lines":[{"line_number":2512,"context_line":"#registry_default_port\u003d5042"},{"line_number":2513,"context_line":""},{"line_number":2514,"context_line":""},{"line_number":2515,"context_line":"[ephemeral_storage_encryption]"},{"line_number":2516,"context_line":""},{"line_number":2517,"context_line":"#"},{"line_number":2518,"context_line":"# Options defined in nova.compute.api"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"AAAAUH%2F91bs%3D","line":2515,"updated":"2014-02-03 14:25:21.000000000","message":"If this patch is dependent on https://review.openstack.org/#/c/40467/ then I don\u0027t think that these options should be repeated here.","commit_id":"34fc2bc095905e09d388266e8abc6608d6719d85"}],"nova/tests/virt/libvirt/test_imagebackend.py":[{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"f61382f079ff4f4a658140b9d4dd237e85dd6ac1","unresolved":false,"context_lines":[{"line_number":248,"context_line":""},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"class EncryptedRawTestCase(_ImageTestCase, test.NoDBTestCase):"},{"line_number":251,"context_line":"#TODO(kaitlin.farr): finish implementing tests for encryption"},{"line_number":252,"context_line":"    SIZE \u003d 1024"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F91bE%3D","line":251,"updated":"2014-02-03 14:25:21.000000000","message":"Please provide a more descriptive comment regarding the missing unit tests.","commit_id":"34fc2bc095905e09d388266e8abc6608d6719d85"},{"author":{"_account_id":8623,"name":"Kaitlin Farr","email":"kaitlin.farr@jhuapl.edu","username":"kaitlin.farr"},"change_message_id":"3aa94ab892939bf9938b10b1529f25e21c4a10e8","unresolved":false,"context_lines":[{"line_number":248,"context_line":""},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"class EncryptedRawTestCase(_ImageTestCase, test.NoDBTestCase):"},{"line_number":251,"context_line":"#TODO(kaitlin.farr): finish implementing tests for encryption"},{"line_number":252,"context_line":"    SIZE \u003d 1024"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F9zuM%3D","line":251,"in_reply_to":"AAAAUH%2F91bE%3D","updated":"2014-02-03 18:48:44.000000000","message":"Done","commit_id":"34fc2bc095905e09d388266e8abc6608d6719d85"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"f61382f079ff4f4a658140b9d4dd237e85dd6ac1","unresolved":false,"context_lines":[{"line_number":249,"context_line":""},{"line_number":250,"context_line":"class EncryptedRawTestCase(_ImageTestCase, test.NoDBTestCase):"},{"line_number":251,"context_line":"#TODO(kaitlin.farr): finish implementing tests for encryption"},{"line_number":252,"context_line":"    SIZE \u003d 1024"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    def setUp(self):"},{"line_number":255,"context_line":"        self.image_class \u003d imagebackend.Raw"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F91a8%3D","line":252,"updated":"2014-02-03 14:25:21.000000000","message":"Please use a more descriptive variable name (e.g., MAX_FILE_SIZE or IMAGE_SIZE).","commit_id":"34fc2bc095905e09d388266e8abc6608d6719d85"},{"author":{"_account_id":7746,"name":"Dan Genin","email":"daniel.genin@jhuapl.edu","username":"DiG"},"change_message_id":"c2b197d0a31fe3887e29a4d098e7b3671fc3ecb5","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        fn \u003d self.prepare_mocks()"},{"line_number":271,"context_line":"        fn(target\u003dself.TEMPLATE_PATH, max_size\u003dNone, image_id\u003dNone)"},{"line_number":272,"context_line":"        imagebackend.libvirt_utils.copy_image(self.TEMPLATE_PATH, self.PATH)"},{"line_number":273,"context_line":"        self.mox.ReplayAll()"},{"line_number":274,"context_line":"        "},{"line_number":275,"context_line":"        image \u003d self.image_class(self.INSTANCE, self.NAME)"},{"line_number":276,"context_line":"        image.create_image(fn, self.TEMPLATE_PATH, None, image_id\u003dNone)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F9%2BKE%3D","line":273,"updated":"2014-01-31 20:15:56.000000000","message":"I believe, Nova is moving away from using mox for unit testing. You should probably rewrite these tests in using mock instead.","commit_id":"34fc2bc095905e09d388266e8abc6608d6719d85"},{"author":{"_account_id":7746,"name":"Dan Genin","email":"daniel.genin@jhuapl.edu","username":"DiG"},"change_message_id":"c2b197d0a31fe3887e29a4d098e7b3671fc3ecb5","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        fn(target\u003dself.TEMPLATE_PATH, max_size\u003dNone, image_id\u003dNone)"},{"line_number":272,"context_line":"        imagebackend.libvirt_utils.copy_image(self.TEMPLATE_PATH, self.PATH)"},{"line_number":273,"context_line":"        self.mox.ReplayAll()"},{"line_number":274,"context_line":"        "},{"line_number":275,"context_line":"        image \u003d self.image_class(self.INSTANCE, self.NAME)"},{"line_number":276,"context_line":"        image.create_image(fn, self.TEMPLATE_PATH, None, image_id\u003dNone)"},{"line_number":277,"context_line":"        "}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F9%2BKo%3D","line":274,"updated":"2014-01-31 20:15:56.000000000","message":"White space nit pick.","commit_id":"34fc2bc095905e09d388266e8abc6608d6719d85"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":7746,"name":"Dan Genin","email":"daniel.genin@jhuapl.edu","username":"DiG"},"change_message_id":"c2b197d0a31fe3887e29a4d098e7b3671fc3ecb5","unresolved":false,"context_lines":[{"line_number":1067,"context_line":"            return disk.startswith(pattern)"},{"line_number":1068,"context_line":""},{"line_number":1069,"context_line":"        #TODO(dgenin): Consider using disk_info to identify"},{"line_number":1070,"context_line":"        #attached disks."},{"line_number":1071,"context_line":"        encrypted_logical_volumes \u003d dmcrypt.list_volumes()"},{"line_number":1072,"context_line":"        disks \u003d filter(belongs_to_instance, encrypted_logical_volumes)"},{"line_number":1073,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F9%2BBs%3D","line":1070,"updated":"2014-01-31 20:15:56.000000000","message":"I fully endorse this TODO but it looks strange since you are the author:)","commit_id":"34fc2bc095905e09d388266e8abc6608d6719d85"},{"author":{"_account_id":8623,"name":"Kaitlin Farr","email":"kaitlin.farr@jhuapl.edu","username":"kaitlin.farr"},"change_message_id":"3aa94ab892939bf9938b10b1529f25e21c4a10e8","unresolved":false,"context_lines":[{"line_number":1067,"context_line":"            return disk.startswith(pattern)"},{"line_number":1068,"context_line":""},{"line_number":1069,"context_line":"        #TODO(dgenin): Consider using disk_info to identify"},{"line_number":1070,"context_line":"        #attached disks."},{"line_number":1071,"context_line":"        encrypted_logical_volumes \u003d dmcrypt.list_volumes()"},{"line_number":1072,"context_line":"        disks \u003d filter(belongs_to_instance, encrypted_logical_volumes)"},{"line_number":1073,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F974U%3D","line":1070,"in_reply_to":"AAAAUH%2F9%2BBs%3D","updated":"2014-02-03 18:48:44.000000000","message":"Done","commit_id":"34fc2bc095905e09d388266e8abc6608d6719d85"},{"author":{"_account_id":7746,"name":"Dan Genin","email":"daniel.genin@jhuapl.edu","username":"DiG"},"change_message_id":"c2b197d0a31fe3887e29a4d098e7b3671fc3ecb5","unresolved":false,"context_lines":[{"line_number":2444,"context_line":"    @staticmethod"},{"line_number":2445,"context_line":"    def _create_swap(target, swap_mb, max_size\u003dNone):"},{"line_number":2446,"context_line":"        \"\"\"Create a swap file of specified size.\"\"\""},{"line_number":2447,"context_line":"        #TODO(kaitlin.farr) pass run_as_root as an argument based on is_block_dev"},{"line_number":2448,"context_line":"        libvirt_utils.create_image(\u0027raw\u0027, target, \u0027%dM\u0027 % swap_mb,"},{"line_number":2449,"context_line":"                                    run_as_root\u003dTrue)"},{"line_number":2450,"context_line":"        utils.mkfs(\u0027swap\u0027, target, run_as_root\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F9%2BBI%3D","line":2447,"updated":"2014-01-31 20:15:56.000000000","message":"You could make create_image() conditional on os.path.exists(target), which would obviate the need for the run_as_root parameter.","commit_id":"34fc2bc095905e09d388266e8abc6608d6719d85"},{"author":{"_account_id":8623,"name":"Kaitlin Farr","email":"kaitlin.farr@jhuapl.edu","username":"kaitlin.farr"},"change_message_id":"3aa94ab892939bf9938b10b1529f25e21c4a10e8","unresolved":false,"context_lines":[{"line_number":2444,"context_line":"    @staticmethod"},{"line_number":2445,"context_line":"    def _create_swap(target, swap_mb, max_size\u003dNone):"},{"line_number":2446,"context_line":"        \"\"\"Create a swap file of specified size.\"\"\""},{"line_number":2447,"context_line":"        #TODO(kaitlin.farr) pass run_as_root as an argument based on is_block_dev"},{"line_number":2448,"context_line":"        libvirt_utils.create_image(\u0027raw\u0027, target, \u0027%dM\u0027 % swap_mb,"},{"line_number":2449,"context_line":"                                    run_as_root\u003dTrue)"},{"line_number":2450,"context_line":"        utils.mkfs(\u0027swap\u0027, target, run_as_root\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F970c%3D","line":2447,"in_reply_to":"AAAAUH%2F9%2BBI%3D","updated":"2014-02-03 18:48:44.000000000","message":"Done","commit_id":"34fc2bc095905e09d388266e8abc6608d6719d85"}],"nova/virt/libvirt/imagebackend.py":[{"author":{"_account_id":7746,"name":"Dan Genin","email":"daniel.genin@jhuapl.edu","username":"DiG"},"change_message_id":"c2b197d0a31fe3887e29a4d098e7b3671fc3ecb5","unresolved":false,"context_lines":[{"line_number":258,"context_line":"            self.ephemeral_key_uuid \u003d None"},{"line_number":259,"context_line":"        # Don\u0027t encrypt the kernel, ramdisk images, or disk.config"},{"line_number":260,"context_line":"        if disk_name is not None and (\u0027kernel\u0027 in disk_name or"},{"line_number":261,"context_line":"                \u0027ramdisk\u0027 in disk_name or \u0027disk.config\u0027 in disk_name):"},{"line_number":262,"context_line":"            self.ephemeral_key_uuid \u003d None"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"        if self.ephemeral_key_uuid:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F99%2BE%3D","line":261,"updated":"2014-01-31 20:15:56.000000000","message":"The code after the first \"and\" can be shortened with\nany(map(lambda x: x in disk_name, [\u0027kernel\u0027, \u0027ramdisk\u0027, \u0027disk.config\u0027])\nthough I am not sure if this reduces readability.","commit_id":"34fc2bc095905e09d388266e8abc6608d6719d85"},{"author":{"_account_id":7746,"name":"Dan Genin","email":"daniel.genin@jhuapl.edu","username":"DiG"},"change_message_id":"c2b197d0a31fe3887e29a4d098e7b3671fc3ecb5","unresolved":false,"context_lines":[{"line_number":276,"context_line":"            self.correct_format()"},{"line_number":277,"context_line":"            self.ephemeral_key_uuid \u003d None"},{"line_number":278,"context_line":"        elif self.ephemeral_key_uuid is not None:"},{"line_number":279,"context_line":"            super(Raw, self).__init__(\"file\", \"raw\", is_block_dev\u003dTrue)"},{"line_number":280,"context_line":"            name \u003d \u0027%s_%s\u0027 % (self.escape(instance[\u0027name\u0027]),"},{"line_number":281,"context_line":"                      self.escape(disk_name))"},{"line_number":282,"context_line":"            self.path \u003d \u0027/dev/mapper/\u0027 + dmcrypt.volume_name(name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F999g%3D","line":279,"updated":"2014-01-31 20:15:56.000000000","message":"I was under the impression that setting is_block_dev\u003dTrue caused create_swap() to fail.","commit_id":"34fc2bc095905e09d388266e8abc6608d6719d85"}]}
