)]}'
{"nova/tests/unit/compute/test_tracker.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6a1743360f57323345fb9d5af2e4cc454073a8e3","unresolved":false,"context_lines":[{"line_number":1640,"context_line":"                                    new_flavor.ephemeral_gb))"},{"line_number":1641,"context_line":"        expected.free_disk_gb \u003d (expected.free_disk_gb -"},{"line_number":1642,"context_line":"                                (new_flavor.root_gb +"},{"line_number":1643,"context_line":"                                    new_flavor.ephemeral_gb))"},{"line_number":1644,"context_line":""},{"line_number":1645,"context_line":"        with test.nested("},{"line_number":1646,"context_line":"            mock.patch(\u0027nova.compute.resource_tracker.ResourceTracker\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_2686bd13","line":1643,"updated":"2016-08-02 21:05:08.000000000","message":"Yeah, probably, but I don\u0027t want to change the existing fixture at the top of this test module because that would require a whole bunch more changes :)","commit_id":"d9329d83fd507b8d56c128dc6b0ecad8b0924585"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"844e58c46d35a697e189cb311926d5aeffa34b1d","unresolved":false,"context_lines":[{"line_number":1640,"context_line":"                                    new_flavor.ephemeral_gb))"},{"line_number":1641,"context_line":"        expected.free_disk_gb \u003d (expected.free_disk_gb -"},{"line_number":1642,"context_line":"                                (new_flavor.root_gb +"},{"line_number":1643,"context_line":"                                    new_flavor.ephemeral_gb))"},{"line_number":1644,"context_line":""},{"line_number":1645,"context_line":"        with test.nested("},{"line_number":1646,"context_line":"            mock.patch(\u0027nova.compute.resource_tracker.ResourceTracker\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_dfd226d0","line":1643,"updated":"2016-08-02 11:44:57.000000000","message":"new_flavor.ephemeral_gb is 0 in fixtures, maybe it should have some value?","commit_id":"d9329d83fd507b8d56c128dc6b0ecad8b0924585"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"844e58c46d35a697e189cb311926d5aeffa34b1d","unresolved":false,"context_lines":[{"line_number":1658,"context_line":"        )"},{"line_number":1659,"context_line":"        self.assertIsInstance(claim, claims.MoveClaim)"},{"line_number":1660,"context_line":"        self.assertTrue(obj_base.obj_equal_prims(expected,"},{"line_number":1661,"context_line":"                                                 self.rt.compute_node))"},{"line_number":1662,"context_line":""},{"line_number":1663,"context_line":""},{"line_number":1664,"context_line":"@mock.patch(\u0027nova.objects.Instance.save\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_dfffc663","line":1661,"updated":"2016-08-02 11:44:57.000000000","message":"Is there way to understand what value is not equal for complex object like rt.compute_node?","commit_id":"d9329d83fd507b8d56c128dc6b0ecad8b0924585"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6a1743360f57323345fb9d5af2e4cc454073a8e3","unresolved":false,"context_lines":[{"line_number":1658,"context_line":"        )"},{"line_number":1659,"context_line":"        self.assertIsInstance(claim, claims.MoveClaim)"},{"line_number":1660,"context_line":"        self.assertTrue(obj_base.obj_equal_prims(expected,"},{"line_number":1661,"context_line":"                                                 self.rt.compute_node))"},{"line_number":1662,"context_line":""},{"line_number":1663,"context_line":""},{"line_number":1664,"context_line":"@mock.patch(\u0027nova.objects.Instance.save\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_867b2929","line":1661,"updated":"2016-08-02 21:05:08.000000000","message":"Unfortunately no. The way I do it just this:\n\n self.assertTrue(obj_base.obj_equal_prims(expected,\n                                          self.rt.compute_node),\n                 \"Expected: %s, Got: %s\" % (expected, self.rt.compute_node))\n\nthat will output the representation of the compute node objects and you can see in there which things are different (though it\u0027s an annoying process of going attribute by attribute to see the difference...)","commit_id":"d9329d83fd507b8d56c128dc6b0ecad8b0924585"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"fe661616caaae8055a6aacc7d9cffa20e3a99a17","unresolved":false,"context_lines":[{"line_number":1626,"context_line":""},{"line_number":1627,"context_line":"        # not using mock.sentinel.ctx because resize_claim calls #elevated"},{"line_number":1628,"context_line":"        ctx \u003d mock.MagicMock()"},{"line_number":1629,"context_line":"        elevated \u003d mock.MagicMock()"},{"line_number":1630,"context_line":"        ctx.elevated.return_value \u003d elevated"},{"line_number":1631,"context_line":""},{"line_number":1632,"context_line":"        expected \u003d self.rt.compute_node.obj_clone()"},{"line_number":1633,"context_line":"        expected.vcpus_used \u003d (expected.vcpus_used +"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_76785290","line":1630,"range":{"start_line":1629,"start_character":0,"end_line":1630,"end_character":44},"updated":"2016-08-03 07:30:12.000000000","message":"I think this is unnecessary as ctx is a MagicMock and that already ensures that the call on ctx will return a MagicMock.","commit_id":"63a5fe98d655d25bb875314cec651a04e8b71e0f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"54f00bca0412e775f8b6092d8a1ee56007275c38","unresolved":false,"context_lines":[{"line_number":1626,"context_line":""},{"line_number":1627,"context_line":"        # not using mock.sentinel.ctx because resize_claim calls #elevated"},{"line_number":1628,"context_line":"        ctx \u003d mock.MagicMock()"},{"line_number":1629,"context_line":"        elevated \u003d mock.MagicMock()"},{"line_number":1630,"context_line":"        ctx.elevated.return_value \u003d elevated"},{"line_number":1631,"context_line":""},{"line_number":1632,"context_line":"        expected \u003d self.rt.compute_node.obj_clone()"},{"line_number":1633,"context_line":"        expected.vcpus_used \u003d (expected.vcpus_used +"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_edbc5add","line":1630,"range":{"start_line":1629,"start_character":0,"end_line":1630,"end_character":44},"in_reply_to":"bacf61ea_76785290","updated":"2016-08-03 15:00:08.000000000","message":"Yep. If he was validating that something was called with context.elevated() this would be fine (although still more than required), but it appears to be completely unnecessary from my read.","commit_id":"63a5fe98d655d25bb875314cec651a04e8b71e0f"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"255871a239adb10fc9cbb523562fa0520d56aa97","unresolved":false,"context_lines":[{"line_number":1652,"context_line":""},{"line_number":1653,"context_line":"        create_mig_mock.assert_called_once_with("},{"line_number":1654,"context_line":"                ctx, instance, new_flavor,"},{"line_number":1655,"context_line":"                None  # move_type is None for resize..."},{"line_number":1656,"context_line":"        )"},{"line_number":1657,"context_line":"        self.assertIsInstance(claim, claims.MoveClaim)"},{"line_number":1658,"context_line":"        self.assertTrue(obj_base.obj_equal_prims(expected,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_2574e99a","line":1655,"range":{"start_line":1655,"start_character":16,"end_line":1655,"end_character":55},"updated":"2016-08-08 23:13:38.000000000","message":"Nit: this doesn\u0027t read very well. I would prefer that you move the None and close paren after \u0027new_flavor,\u0027 above, and move the comment to its own line above the full statement.","commit_id":"fcf530b96bc86cab6683d233279523e4bdc8b195"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6bca0f597c0ffec5c9de5a791bf240e9f3775d29","unresolved":false,"context_lines":[{"line_number":1652,"context_line":""},{"line_number":1653,"context_line":"        create_mig_mock.assert_called_once_with("},{"line_number":1654,"context_line":"                ctx, instance, new_flavor,"},{"line_number":1655,"context_line":"                None  # move_type is None for resize..."},{"line_number":1656,"context_line":"        )"},{"line_number":1657,"context_line":"        self.assertIsInstance(claim, claims.MoveClaim)"},{"line_number":1658,"context_line":"        self.assertTrue(obj_base.obj_equal_prims(expected,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_5ba0d59f","line":1655,"range":{"start_line":1655,"start_character":16,"end_line":1655,"end_character":55},"in_reply_to":"9ad45d7e_2574e99a","updated":"2016-08-09 03:29:17.000000000","message":"Done","commit_id":"fcf530b96bc86cab6683d233279523e4bdc8b195"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"255871a239adb10fc9cbb523562fa0520d56aa97","unresolved":false,"context_lines":[{"line_number":1682,"context_line":"        # upon the resource tracker being initialized..."},{"line_number":1683,"context_line":"        self.rt.pci_tracker \u003d pci_manager.PciDevTracker(mock.sentinel.ctx)"},{"line_number":1684,"context_line":""},{"line_number":1685,"context_line":"        pci_dev \u003d pci_device.PciDevice.create("},{"line_number":1686,"context_line":"            None, fake_pci_device.dev_dict)"},{"line_number":1687,"context_line":"        pci_devs \u003d [pci_dev]"},{"line_number":1688,"context_line":"        self.rt.pci_tracker.pci_devs \u003d objects.PciDeviceList(objects\u003dpci_devs)"},{"line_number":1689,"context_line":"        pci_claim_mock.return_value \u003d [pci_dev]"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_85daf576","line":1686,"range":{"start_line":1685,"start_character":8,"end_line":1686,"end_character":43},"updated":"2016-08-08 23:13:38.000000000","message":"Nit: no need to wrap; this will all fit on one line.","commit_id":"fcf530b96bc86cab6683d233279523e4bdc8b195"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6bca0f597c0ffec5c9de5a791bf240e9f3775d29","unresolved":false,"context_lines":[{"line_number":1682,"context_line":"        # upon the resource tracker being initialized..."},{"line_number":1683,"context_line":"        self.rt.pci_tracker \u003d pci_manager.PciDevTracker(mock.sentinel.ctx)"},{"line_number":1684,"context_line":""},{"line_number":1685,"context_line":"        pci_dev \u003d pci_device.PciDevice.create("},{"line_number":1686,"context_line":"            None, fake_pci_device.dev_dict)"},{"line_number":1687,"context_line":"        pci_devs \u003d [pci_dev]"},{"line_number":1688,"context_line":"        self.rt.pci_tracker.pci_devs \u003d objects.PciDeviceList(objects\u003dpci_devs)"},{"line_number":1689,"context_line":"        pci_claim_mock.return_value \u003d [pci_dev]"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_bb87510e","line":1686,"range":{"start_line":1685,"start_character":8,"end_line":1686,"end_character":43},"in_reply_to":"9ad45d7e_85daf576","updated":"2016-08-09 03:29:17.000000000","message":"Done","commit_id":"fcf530b96bc86cab6683d233279523e4bdc8b195"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"255871a239adb10fc9cbb523562fa0520d56aa97","unresolved":false,"context_lines":[{"line_number":1720,"context_line":"            old_numa_topology\u003dNone,"},{"line_number":1721,"context_line":"        )"},{"line_number":1722,"context_line":"        instance.migration_context \u003d mig_context_obj"},{"line_number":1723,"context_line":"        new_flavor \u003d _INSTANCE_TYPE_OBJ_FIXTURES[2]"},{"line_number":1724,"context_line":""},{"line_number":1725,"context_line":"        request \u003d objects.InstancePCIRequest(count\u003d1,"},{"line_number":1726,"context_line":"            spec\u003d[{\u0027vendor_id\u0027: \u0027v\u0027, \u0027product_id\u0027: \u0027p\u0027}])"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_e2aac718","line":1723,"range":{"start_line":1723,"start_character":8,"end_line":1723,"end_character":51},"updated":"2016-08-08 23:13:38.000000000","message":"Nit: this should probably go up with line 1700 for clarity.","commit_id":"fcf530b96bc86cab6683d233279523e4bdc8b195"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6bca0f597c0ffec5c9de5a791bf240e9f3775d29","unresolved":false,"context_lines":[{"line_number":1720,"context_line":"            old_numa_topology\u003dNone,"},{"line_number":1721,"context_line":"        )"},{"line_number":1722,"context_line":"        instance.migration_context \u003d mig_context_obj"},{"line_number":1723,"context_line":"        new_flavor \u003d _INSTANCE_TYPE_OBJ_FIXTURES[2]"},{"line_number":1724,"context_line":""},{"line_number":1725,"context_line":"        request \u003d objects.InstancePCIRequest(count\u003d1,"},{"line_number":1726,"context_line":"            spec\u003d[{\u0027vendor_id\u0027: \u0027v\u0027, \u0027product_id\u0027: \u0027p\u0027}])"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_1ba49da4","line":1723,"range":{"start_line":1723,"start_character":8,"end_line":1723,"end_character":51},"in_reply_to":"9ad45d7e_e2aac718","updated":"2016-08-09 03:29:17.000000000","message":"Done","commit_id":"fcf530b96bc86cab6683d233279523e4bdc8b195"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"f75479d952310dcc7f5b4d19e3ac6cda256d79f6","unresolved":false,"context_lines":[{"line_number":1624,"context_line":"        mig_context_obj \u003d _MIGRATION_CONTEXT_FIXTURES[instance.uuid]"},{"line_number":1625,"context_line":"        new_flavor \u003d _INSTANCE_TYPE_OBJ_FIXTURES[2]"},{"line_number":1626,"context_line":""},{"line_number":1627,"context_line":"        # not using mock.sentinel.ctx because resize_claim calls #elevated"},{"line_number":1628,"context_line":"        ctx \u003d mock.MagicMock()"},{"line_number":1629,"context_line":""},{"line_number":1630,"context_line":"        expected \u003d self.rt.compute_node.obj_clone()"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_caf16c6c","line":1627,"range":{"start_line":1627,"start_character":65,"end_line":1627,"end_character":66},"updated":"2016-08-09 16:16:11.000000000","message":"Stray hash from a rewrap I assume?","commit_id":"f0cc9676ae2c6f1207ceeb04878b19e8566ebfec"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b1ac7bdb7357a756f21efaeb433c03d3b1e0c3ff","unresolved":false,"context_lines":[{"line_number":1624,"context_line":"        mig_context_obj \u003d _MIGRATION_CONTEXT_FIXTURES[instance.uuid]"},{"line_number":1625,"context_line":"        new_flavor \u003d _INSTANCE_TYPE_OBJ_FIXTURES[2]"},{"line_number":1626,"context_line":""},{"line_number":1627,"context_line":"        # not using mock.sentinel.ctx because resize_claim calls #elevated"},{"line_number":1628,"context_line":"        ctx \u003d mock.MagicMock()"},{"line_number":1629,"context_line":""},{"line_number":1630,"context_line":"        expected \u003d self.rt.compute_node.obj_clone()"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_ad4c1271","line":1627,"range":{"start_line":1627,"start_character":65,"end_line":1627,"end_character":66},"in_reply_to":"9ad45d7e_ca1b2c7f","updated":"2016-08-09 16:19:11.000000000","message":"WTF ruby people?","commit_id":"f0cc9676ae2c6f1207ceeb04878b19e8566ebfec"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2dd7e11eef71543c95e1e8efba29c588d4cd8e30","unresolved":false,"context_lines":[{"line_number":1624,"context_line":"        mig_context_obj \u003d _MIGRATION_CONTEXT_FIXTURES[instance.uuid]"},{"line_number":1625,"context_line":"        new_flavor \u003d _INSTANCE_TYPE_OBJ_FIXTURES[2]"},{"line_number":1626,"context_line":""},{"line_number":1627,"context_line":"        # not using mock.sentinel.ctx because resize_claim calls #elevated"},{"line_number":1628,"context_line":"        ctx \u003d mock.MagicMock()"},{"line_number":1629,"context_line":""},{"line_number":1630,"context_line":"        expected \u003d self.rt.compute_node.obj_clone()"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_ca1b2c7f","line":1627,"range":{"start_line":1627,"start_character":65,"end_line":1627,"end_character":66},"in_reply_to":"9ad45d7e_caf16c6c","updated":"2016-08-09 16:17:50.000000000","message":"nah, this was in the original unit test from lxsli... the hash for #elevated indicates elevated() is a method on the context... It\u0027s Ruby-like comment syntax.","commit_id":"f0cc9676ae2c6f1207ceeb04878b19e8566ebfec"}]}
