)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6ff30f35dca1b49c810eb16d0d1b0c44c3cd527b","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Aarti Kriplani \u003caarti.kriplani@RACKSPACE.COM\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-07-01 16:07:25 +0530"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add disk config value to xenstore."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"To be able to access the value of disk_config from inside the VM,"},{"line_number":10,"context_line":"added the value to xenstore."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAAPn%2F%2FXb8%3D","line":7,"updated":"2013-07-03 08:10:18.000000000","message":"might be worth xenapi: at the beginning, but is not \"required\"","commit_id":"fc99d1be8b25bfac897a2c97e16097f32dd69fc6"}],"nova/tests/virt/xenapi/test_vmops.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6ff30f35dca1b49c810eb16d0d1b0c44c3cd527b","unresolved":false,"context_lines":[{"line_number":180,"context_line":"                                                  \u0027test_pass\u0027,"},{"line_number":181,"context_line":"                                                  fake.FakeVirtAPI())"},{"line_number":182,"context_line":"        self.vmops \u003d vmops.VMOps(self._session, fake.FakeVirtAPI())"},{"line_number":183,"context_line":"        self.vms \u003d []"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    def test_inject_auto_disk_config_when_present(self):"},{"line_number":186,"context_line":"        vm_ref \u003d xenapi_fake.create_vm(\u0027dummy\u0027, \u0027running\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2FZ68%3D","line":183,"updated":"2013-07-03 08:10:18.000000000","message":"don\u0027t need this, I think its unused?\n\nmaybe it would be neater to clean up the fake VMs you created by sharing a base class with GetConsoleOutputTestCase that you can see below. But that might be overkill.","commit_id":"fc99d1be8b25bfac897a2c97e16097f32dd69fc6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b83eb568ca093d29cded9fb7df131baa0ce6009a","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        for vm in self.vms:"},{"line_number":187,"context_line":"            xenapi_fake.destroy_vm(vm)"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    def _create_vm(self, name, state):"},{"line_number":190,"context_line":"        vm \u003d xenapi_fake.create_vm(name, state)"},{"line_number":191,"context_line":"        self.vms.append(vm)"},{"line_number":192,"context_line":"        return vm"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2F56E%3D","side":"PARENT","line":189,"updated":"2013-07-09 13:43:20.000000000","message":"I would keep this method myself, but maybe add a default value to the state.","commit_id":"7ede904ca688a64bb7302834203e21cafa89de36"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b83eb568ca093d29cded9fb7df131baa0ce6009a","unresolved":false,"context_lines":[{"line_number":189,"context_line":"    def _create_vm(self, name, state):"},{"line_number":190,"context_line":"        vm \u003d xenapi_fake.create_vm(name, state)"},{"line_number":191,"context_line":"        self.vms.append(vm)"},{"line_number":192,"context_line":"        return vm"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def test_get_console_output_works(self):"},{"line_number":195,"context_line":"        self.mox.StubOutWithMock(self.vmops, \u0027_get_dom_id\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2F550%3D","side":"PARENT","line":192,"updated":"2013-07-09 13:43:20.000000000","message":"you could return the vm_rec here, that should simplify things.","commit_id":"7ede904ca688a64bb7302834203e21cafa89de36"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b83eb568ca093d29cded9fb7df131baa0ce6009a","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    def tearDown(self):"},{"line_number":48,"context_line":"        super(VMOpsTestBase, self).tearDown()"},{"line_number":49,"context_line":"        if hasattr(self, \u0027vm_ref\u0027):"},{"line_number":50,"context_line":"            xenapi_fake.destroy_vm(self.vm_ref)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"class VMOpsTestCase(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2F56Y%3D","line":50,"updated":"2013-07-09 13:43:20.000000000","message":"This looks wrong, you can only call create_vm once. Why not keep the old code?","commit_id":"2de55a3fc69a417965bb3f41be994d20a0375acd"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b83eb568ca093d29cded9fb7df131baa0ce6009a","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        self._setup_mock_vmops()"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def _setup_mock_vmops(self, product_brand\u003dNone, product_version\u003dNone):"},{"line_number":59,"context_line":"        self._session \u003d self._get_mock_session(product_brand, product_version)"},{"line_number":60,"context_line":"        self._vmops \u003d vmops.VMOps(self._session, fake.FakeVirtAPI())"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def _get_mock_session(self, product_brand, product_version):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2F59M%3D","line":59,"updated":"2013-07-09 13:43:20.000000000","message":"This could also be used by the other tests really.","commit_id":"2de55a3fc69a417965bb3f41be994d20a0375acd"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b83eb568ca093d29cded9fb7df131baa0ce6009a","unresolved":false,"context_lines":[{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    def test_get_dom_id_works(self):"},{"line_number":241,"context_line":"        instance \u003d {\"name\": \"dummy\"}"},{"line_number":242,"context_line":"        self.create_vm()"},{"line_number":243,"context_line":"        self.assertEqual(self.vm[\"domid\"], self.vmops._get_dom_id(instance))"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    def test_get_dom_id_works_with_rescue_vm(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2F58M%3D","line":242,"updated":"2013-07-09 13:43:20.000000000","message":"I would return the VM from create_vm","commit_id":"2de55a3fc69a417965bb3f41be994d20a0375acd"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b83eb568ca093d29cded9fb7df131baa0ce6009a","unresolved":false,"context_lines":[{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    def test_get_dom_id_works_with_rescue_vm(self):"},{"line_number":246,"context_line":"        instance \u003d {\"name\": \"dummy\"}"},{"line_number":247,"context_line":"        self.create_vm()"},{"line_number":248,"context_line":"        self.assertEqual(self.vm[\"domid\"],"},{"line_number":249,"context_line":"                self.vmops._get_dom_id(instance, check_rescue\u003dTrue))"},{"line_number":250,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2F58g%3D","line":247,"updated":"2013-07-09 13:43:20.000000000","message":"I think you broke this test, the name should have -dummy attached.","commit_id":"2de55a3fc69a417965bb3f41be994d20a0375acd"}],"nova/tests/virt/xenapi/test_xenapi.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"9fbcca17046757e5aabd2d5dc012406de05f2adf","unresolved":false,"context_lines":[{"line_number":947,"context_line":"        self.mox.StubOutWithMock(self.conn._vmops, \u0027_add_to_param_xenstore\u0027)"},{"line_number":948,"context_line":"        self.conn._vmops._add_to_param_xenstore(vm_ref,"},{"line_number":949,"context_line":"                                                \u0027vm-data/auto-disk-config\u0027,"},{"line_number":950,"context_line":"                                                True)"},{"line_number":951,"context_line":"        self.mox.ReplayAll()"},{"line_number":952,"context_line":"        self.conn._vmops.inject_auto_disk_config(instance, vm_ref)"},{"line_number":953,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPn%2F%2Fk7I%3D","line":950,"updated":"2013-06-27 13:52:55.000000000","message":"I\u0027m not 100% sure, but I think you need to store sanitized strings in xenstore, not booleans.","commit_id":"4bf9a132638b149b913f3bbe10011d732eff2edc"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"913e3afcd7882e4a37a94bc762c81f4ab4f0d40e","unresolved":false,"context_lines":[{"line_number":947,"context_line":"        self.mox.StubOutWithMock(self.conn._vmops, \u0027_add_to_param_xenstore\u0027)"},{"line_number":948,"context_line":"        self.conn._vmops._add_to_param_xenstore(vm_ref,"},{"line_number":949,"context_line":"                                                \u0027vm-data/auto-disk-config\u0027,"},{"line_number":950,"context_line":"                                                True)"},{"line_number":951,"context_line":"        self.mox.ReplayAll()"},{"line_number":952,"context_line":"        self.conn._vmops.inject_auto_disk_config(instance, vm_ref)"},{"line_number":953,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPn%2F%2Fk3U%3D","line":950,"in_reply_to":"AAAAPn%2F%2Fk7I%3D","updated":"2013-06-27 14:15:47.000000000","message":"That\u0027s right - everything in xenstore is a string.","commit_id":"4bf9a132638b149b913f3bbe10011d732eff2edc"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7a09f80fb7331ec1d8bda89947419a3daec2a6d6","unresolved":false,"context_lines":[{"line_number":603,"context_line":"        self.assertEquals(self.vm[\u0027power_state\u0027], \u0027Running\u0027)"},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"        if check_injection:"},{"line_number":606,"context_line":"            xenstore_data \u003d self.vm[\u0027xenstore_data\u0027]"},{"line_number":607,"context_line":"            self.assertEquals(xenstore_data[\u0027vm-data/hostname\u0027], \u0027test\u0027)"},{"line_number":608,"context_line":"            key \u003d \u0027vm-data/networking/DEADBEEF0001\u0027"},{"line_number":609,"context_line":"            xenstore_value \u003d xenstore_data[key]"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FiN4%3D","line":606,"updated":"2013-06-28 10:51:23.000000000","message":"This is how we check the other \u0027simple\u0027 xenstore data, maybe you could just add yours in here?","commit_id":"5861647acf13cd4017c7d6628acbd3f9932d02a8"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7a09f80fb7331ec1d8bda89947419a3daec2a6d6","unresolved":false,"context_lines":[{"line_number":949,"context_line":"                                                \u0027vm-data/auto-disk-config\u0027,"},{"line_number":950,"context_line":"                                                \u0027True\u0027)"},{"line_number":951,"context_line":"        self.mox.ReplayAll()"},{"line_number":952,"context_line":"        self.conn._vmops.inject_auto_disk_config(instance, vm_ref)"},{"line_number":953,"context_line":""},{"line_number":954,"context_line":"    def test_inject_auto_disk_config_none_as_false(self):"},{"line_number":955,"context_line":"        instance \u003d self._create_instance(spawn\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FiOc%3D","line":952,"updated":"2013-06-28 10:51:23.000000000","message":"Can we add these two tests into test_vmops.py?\nThis file is getting too big.","commit_id":"5861647acf13cd4017c7d6628acbd3f9932d02a8"}],"nova/virt/xenapi/vmops.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"9fbcca17046757e5aabd2d5dc012406de05f2adf","unresolved":false,"context_lines":[{"line_number":1111,"context_line":"        store_meta(\u0027vm-data/user-metadata\u0027, instance[\u0027metadata\u0027])"},{"line_number":1112,"context_line":""},{"line_number":1113,"context_line":"    def inject_auto_disk_config(self, instance, vm_ref):"},{"line_number":1114,"context_line":"        if instance[\u0027auto_disk_config\u0027]:"},{"line_number":1115,"context_line":"            self._add_to_param_xenstore(vm_ref, \u0027vm-data/auto-disk-config\u0027,"},{"line_number":1116,"context_line":"                                        instance[\u0027auto_disk_config\u0027])"},{"line_number":1117,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPn%2F%2Fk7k%3D","line":1114,"updated":"2013-06-27 13:52:55.000000000","message":"You need to synchronize access with \"db/sqlalchemy/models.py\" like the method above.  And you probably want to inject it even if not instance[\u0027auto_disk_config\u0027], just as False.  And you should sanitize the keys.  Actually you probably just want to map None/False to \u0027False\u0027 and True to \u0027True\u0027, and then you don\u0027t need to sanitize.","commit_id":"4bf9a132638b149b913f3bbe10011d732eff2edc"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7a09f80fb7331ec1d8bda89947419a3daec2a6d6","unresolved":false,"context_lines":[{"line_number":441,"context_line":""},{"line_number":442,"context_line":"        @step"},{"line_number":443,"context_line":"        def inject_metadata_step(undo_mgr, vm_ref):"},{"line_number":444,"context_line":"            self.inject_instance_metadata(instance, vm_ref)"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"        @step"},{"line_number":447,"context_line":"        def prepare_security_group_filters_step(undo_mgr):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FiO0%3D","line":444,"updated":"2013-06-28 10:51:23.000000000","message":"I would just add it to this step. It will change the progress reporting (in a bad way) if you add an extra step.","commit_id":"5861647acf13cd4017c7d6628acbd3f9932d02a8"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"34adf774c939b644c816d067bd44027c88a61c7e","unresolved":false,"context_lines":[{"line_number":441,"context_line":""},{"line_number":442,"context_line":"        @step"},{"line_number":443,"context_line":"        def inject_metadata_step(undo_mgr, vm_ref):"},{"line_number":444,"context_line":"            self.inject_instance_metadata(instance, vm_ref)"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"        @step"},{"line_number":447,"context_line":"        def prepare_security_group_filters_step(undo_mgr):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fh%2Fw%3D","line":444,"in_reply_to":"AAAAPn%2F%2FiO0%3D","updated":"2013-06-28 12:57:57.000000000","message":"Yeah, I wasn\u0027t sure what the implications of changing progress reporting would be. But I think it\u0027s better to not change it, and this change would fit nicely under inject_metadata_step.","commit_id":"5861647acf13cd4017c7d6628acbd3f9932d02a8"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6ff30f35dca1b49c810eb16d0d1b0c44c3cd527b","unresolved":false,"context_lines":[{"line_number":438,"context_line":"        @step"},{"line_number":439,"context_line":"        def inject_instance_data_step(undo_mgr, vm_ref):"},{"line_number":440,"context_line":"            self.inject_instance_metadata(instance, vm_ref)"},{"line_number":441,"context_line":"            self.inject_auto_disk_config(instance, vm_ref)"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"        @step"},{"line_number":444,"context_line":"        def prepare_security_group_filters_step(undo_mgr):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2FXcY%3D","line":441,"updated":"2013-07-03 08:10:18.000000000","message":"Looks good to me.","commit_id":"fc99d1be8b25bfac897a2c97e16097f32dd69fc6"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"dd9324a7f30d2127ab7006bddc04bdec2da4c208","unresolved":false,"context_lines":[{"line_number":1110,"context_line":"        \"\"\"Inject instance\u0027s auto_disk_config attribute into xenstore.\"\"\""},{"line_number":1111,"context_line":"        @utils.synchronized(\u0027xenstore-\u0027 + instance[\u0027uuid\u0027])"},{"line_number":1112,"context_line":"        def store_auto_disk_config(key, value):"},{"line_number":1113,"context_line":"            value \u003d value or False"},{"line_number":1114,"context_line":"            self._add_to_param_xenstore(vm_ref, key, str(value))"},{"line_number":1115,"context_line":""},{"line_number":1116,"context_line":"        store_auto_disk_config(\u0027vm-data/auto-disk-config\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2Fx20%3D","line":1113,"updated":"2013-07-11 15:50:08.000000000","message":"I\u0027m going to be paranoid and ask that you change this to \u0027value and True or False\u0027.  That way you\u0027re guaranteed a boolean rather than \u0027value\u0027.","commit_id":"ac84461566d9ef946516795c50099065ad5fae27"}]}
