)]}'
{"nova/objects/instance.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"3537200e16aa940a7047d91185e09cbb660e40d1","unresolved":false,"context_lines":[{"line_number":216,"context_line":"                                                nullable\u003dTrue),"},{"line_number":217,"context_line":"        \u0027keypairs\u0027: fields.ObjectField(\u0027KeyPairList\u0027),"},{"line_number":218,"context_line":"        \u0027trusted_certs\u0027: fields.ObjectField(\u0027TrustedCerts\u0027, nullable\u003dTrue),"},{"line_number":219,"context_line":"        \u0027vpmems\u0027: fields.ObjectField(\u0027VirtualPMEMList\u0027,"},{"line_number":220,"context_line":"                                     nullable\u003dTrue),"},{"line_number":221,"context_line":"        }"},{"line_number":222,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_0e6a73b2","line":219,"updated":"2019-07-08 20:38:15.000000000","message":"nit: join lines","commit_id":"1fcc2937a43a204c7b49b5651da2ec7ad23d3c7d"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"b9e0924b788709d40ad88b5cd6cacf72282aa7a8","unresolved":false,"context_lines":[{"line_number":216,"context_line":"                                                nullable\u003dTrue),"},{"line_number":217,"context_line":"        \u0027keypairs\u0027: fields.ObjectField(\u0027KeyPairList\u0027),"},{"line_number":218,"context_line":"        \u0027trusted_certs\u0027: fields.ObjectField(\u0027TrustedCerts\u0027, nullable\u003dTrue),"},{"line_number":219,"context_line":"        \u0027vpmems\u0027: fields.ObjectField(\u0027VirtualPMEMList\u0027,"},{"line_number":220,"context_line":"                                     nullable\u003dTrue),"},{"line_number":221,"context_line":"        }"},{"line_number":222,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_885f3371","line":219,"in_reply_to":"7faddb67_0e6a73b2","updated":"2019-07-09 08:22:55.000000000","message":"Done","commit_id":"1fcc2937a43a204c7b49b5651da2ec7ad23d3c7d"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"c28b0edf240a9171df7f5d986f4b1ab6b0f8c6a8","unresolved":false,"context_lines":[{"line_number":610,"context_line":"        vpmems \u003d updates.pop(\u0027vpmems\u0027, None)"},{"line_number":611,"context_line":"        expected_attrs.append(\u0027vpmems\u0027)"},{"line_number":612,"context_line":"        if vpmems:"},{"line_number":613,"context_line":"            updates[\u0027extra\u0027][\u0027vpmems\u0027] \u003d vpmems._to_json()"},{"line_number":614,"context_line":"        else:"},{"line_number":615,"context_line":"            updates[\u0027extra\u0027][\u0027vpmems\u0027] \u003d None"},{"line_number":616,"context_line":"        db_inst \u003d db.instance_create(self._context, updates)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_79d39a39","line":613,"range":{"start_line":613,"start_character":41,"end_line":613,"end_character":58},"updated":"2019-07-10 05:30:10.000000000","message":"nit, we shouldn\u0027t call a private method of other object. We can just copy the code from above. Or change the _to_json to to_json","commit_id":"afd272037b9b3f1392a44e5c51fcb9c1d12f5f13"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"53cee5d079d620ca03e21af840de4b4bfe0a54de","unresolved":false,"context_lines":[{"line_number":610,"context_line":"        vpmems \u003d updates.pop(\u0027vpmems\u0027, None)"},{"line_number":611,"context_line":"        expected_attrs.append(\u0027vpmems\u0027)"},{"line_number":612,"context_line":"        if vpmems:"},{"line_number":613,"context_line":"            updates[\u0027extra\u0027][\u0027vpmems\u0027] \u003d vpmems._to_json()"},{"line_number":614,"context_line":"        else:"},{"line_number":615,"context_line":"            updates[\u0027extra\u0027][\u0027vpmems\u0027] \u003d None"},{"line_number":616,"context_line":"        db_inst \u003d db.instance_create(self._context, updates)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_b5c6ee99","line":613,"range":{"start_line":613,"start_character":41,"end_line":613,"end_character":58},"in_reply_to":"7faddb67_79d39a39","updated":"2019-07-10 13:24:00.000000000","message":"I like being consistent, even if that isn\u0027t the \"DRY\"est thing.","commit_id":"afd272037b9b3f1392a44e5c51fcb9c1d12f5f13"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0c05cdf3ea01dda8540bfbce15e45eb3544c096b","unresolved":false,"context_lines":[{"line_number":610,"context_line":"        vpmems \u003d updates.pop(\u0027vpmems\u0027, None)"},{"line_number":611,"context_line":"        expected_attrs.append(\u0027vpmems\u0027)"},{"line_number":612,"context_line":"        if vpmems:"},{"line_number":613,"context_line":"            updates[\u0027extra\u0027][\u0027vpmems\u0027] \u003d vpmems._to_json()"},{"line_number":614,"context_line":"        else:"},{"line_number":615,"context_line":"            updates[\u0027extra\u0027][\u0027vpmems\u0027] \u003d None"},{"line_number":616,"context_line":"        db_inst \u003d db.instance_create(self._context, updates)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_ac55431f","line":613,"range":{"start_line":613,"start_character":41,"end_line":613,"end_character":58},"in_reply_to":"7faddb67_b5c6ee99","updated":"2019-07-10 17:05:29.000000000","message":"This also looks like it\u0027s just dumping something in an unversioned format. It\u0027s important to know that this is the primitive version of the object, which is made clear by keeping to the convention and calling obj_to_primitive() from here.","commit_id":"afd272037b9b3f1392a44e5c51fcb9c1d12f5f13"}],"nova/objects/virtual_pmem.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"3537200e16aa940a7047d91185e09cbb660e40d1","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    fields \u003d {"},{"line_number":28,"context_line":"        \u0027label\u0027: fields.StringField(),"},{"line_number":29,"context_line":"        # pmem namespace info is necessary which will be used when migrationg"},{"line_number":30,"context_line":"        \u0027ns_name\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":31,"context_line":"        \u0027ns_size\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":32,"context_line":"        \u0027ns_dev\u0027: fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_2ed88f7d","line":29,"range":{"start_line":29,"start_character":67,"end_line":29,"end_character":77},"updated":"2019-07-08 20:38:15.000000000","message":"migrating","commit_id":"1fcc2937a43a204c7b49b5651da2ec7ad23d3c7d"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"b9e0924b788709d40ad88b5cd6cacf72282aa7a8","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    fields \u003d {"},{"line_number":28,"context_line":"        \u0027label\u0027: fields.StringField(),"},{"line_number":29,"context_line":"        # pmem namespace info is necessary which will be used when migrationg"},{"line_number":30,"context_line":"        \u0027ns_name\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":31,"context_line":"        \u0027ns_size\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":32,"context_line":"        \u0027ns_dev\u0027: fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_48513b62","line":29,"range":{"start_line":29,"start_character":67,"end_line":29,"end_character":77},"in_reply_to":"7faddb67_2ed88f7d","updated":"2019-07-09 08:22:55.000000000","message":"Done","commit_id":"1fcc2937a43a204c7b49b5651da2ec7ad23d3c7d"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"3537200e16aa940a7047d91185e09cbb660e40d1","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        \u0027ns_name\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":31,"context_line":"        \u0027ns_size\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":32,"context_line":"        \u0027ns_dev\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":33,"context_line":"        \u0027ns_align\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":34,"context_line":"    }"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_ae631fb1","line":33,"updated":"2019-07-08 20:38:15.000000000","message":"This list of fields is stale. It was updated in the spec based on comments at [1] to:\n\n rc_name\n ns_name\n\n[1] https://review.opendev.org/#/c/601596/14/specs/train/approved/virtual-persistent-memory.rst@382","commit_id":"1fcc2937a43a204c7b49b5651da2ec7ad23d3c7d"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"08e5d19c7fb42eba0e309826a4619d2915f88c7a","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        \u0027ns_name\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":31,"context_line":"        \u0027ns_size\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":32,"context_line":"        \u0027ns_dev\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":33,"context_line":"        \u0027ns_align\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":34,"context_line":"    }"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_7deabbac","line":33,"in_reply_to":"7faddb67_ae631fb1","updated":"2019-07-09 06:14:08.000000000","message":"We ignore the migration problem when writing spec. The fields are still here because we need these to support pmem data migration, otherwise we can\u0027t get pmem info from remote host. And we use \u0027label\u0027 instead of \u0027rc_name\u0027, because ‘rc_name’ is a little confusing, actually only the \u0027label\u0027 name will be saved but not the resource class name.\n\nSpec will be updated soon, we will submit a patch to correct this.","commit_id":"1fcc2937a43a204c7b49b5651da2ec7ad23d3c7d"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"3537200e16aa940a7047d91185e09cbb660e40d1","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    }"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    @classmethod"},{"line_number":47,"context_line":"    def obj_from_db(cls, context, db_vpmems):"},{"line_number":48,"context_line":"        primitive \u003d jsonutils.loads(db_vpmems)"},{"line_number":49,"context_line":"        vpmems \u003d cls.obj_from_primitive(primitive)"},{"line_number":50,"context_line":"        return vpmems"}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_6eae8799","line":47,"range":{"start_line":47,"start_character":8,"end_line":47,"end_character":19},"updated":"2019-07-08 20:38:15.000000000","message":"Is this used? In particular, it seems to be redundant with [1] and L59-69 below.\n\n[1] https://review.opendev.org/#/c/634548/12/nova/objects/instance.py@1007","commit_id":"1fcc2937a43a204c7b49b5651da2ec7ad23d3c7d"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"b9e0924b788709d40ad88b5cd6cacf72282aa7a8","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    }"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    @classmethod"},{"line_number":47,"context_line":"    def obj_from_db(cls, context, db_vpmems):"},{"line_number":48,"context_line":"        primitive \u003d jsonutils.loads(db_vpmems)"},{"line_number":49,"context_line":"        vpmems \u003d cls.obj_from_primitive(primitive)"},{"line_number":50,"context_line":"        return vpmems"}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_a8f0ef68","line":47,"range":{"start_line":47,"start_character":8,"end_line":47,"end_character":19},"in_reply_to":"7faddb67_6eae8799","updated":"2019-07-09 08:22:55.000000000","message":"I update nova/objects/instance.py@1007 to use this method.","commit_id":"1fcc2937a43a204c7b49b5651da2ec7ad23d3c7d"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"3537200e16aa940a7047d91185e09cbb660e40d1","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        vpmems \u003d cls.obj_from_primitive(primitive)"},{"line_number":61,"context_line":"        return vpmems"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def _to_json(self):"},{"line_number":64,"context_line":"        return jsonutils.dumps(self.obj_to_primitive())"}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_6eb9a7e7","line":63,"range":{"start_line":63,"start_character":8,"end_line":63,"end_character":16},"updated":"2019-07-08 20:38:15.000000000","message":"Is this used?\n\nIn particular, it seems to be redundant with [1] and [2].\n\n[1] https://review.opendev.org/#/c/634548/12/nova/objects/instance.py@615\n[2] https://review.opendev.org/#/c/634548/12/nova/tests/unit/objects/test_virtual_pmem.py@24","commit_id":"1fcc2937a43a204c7b49b5651da2ec7ad23d3c7d"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"b9e0924b788709d40ad88b5cd6cacf72282aa7a8","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        vpmems \u003d cls.obj_from_primitive(primitive)"},{"line_number":61,"context_line":"        return vpmems"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def _to_json(self):"},{"line_number":64,"context_line":"        return jsonutils.dumps(self.obj_to_primitive())"}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_2804ff49","line":63,"range":{"start_line":63,"start_character":8,"end_line":63,"end_character":16},"in_reply_to":"7faddb67_6eb9a7e7","updated":"2019-07-09 08:22:55.000000000","message":"I update the files you listed to use this method.","commit_id":"1fcc2937a43a204c7b49b5651da2ec7ad23d3c7d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0c05cdf3ea01dda8540bfbce15e45eb3544c096b","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        \u0027ns_name\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":31,"context_line":"        \u0027ns_size\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":32,"context_line":"        \u0027ns_dev\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":33,"context_line":"        \u0027ns_align\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":34,"context_line":"    }"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_6703e40e","line":33,"updated":"2019-07-10 17:05:29.000000000","message":"Pretty sure none of these should be nullable\u003dTrue. The object as you have it here says that everything but label can be None. Does that make any sense? I\u0027m guessing not...\n\nIf all of these are to be specified then none of them should be nullable\u003dTrue. I\u0027d like to hear use cases for each that are to be nullable.\n\nAlso, this seems really really specific. I missed the spec, but I hope this is sufficiently generic to be usable by other things than just the current intel implementation of this.\n\nFurther, I\u0027d recommend we remove the ns_prefix from all these elements, and spell out device. If it makes sense for these to be separated like they are with their current namespace, then maybe we need another object for the namespace attributes themselves.\n\nI think the \"align\" field also needs a comment explaining what value needs to be there. Is it bytes? kilobytes? pages?","commit_id":"afd272037b9b3f1392a44e5c51fcb9c1d12f5f13"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"c28b0edf240a9171df7f5d986f4b1ab6b0f8c6a8","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"@base.NovaObjectRegistry.register"},{"line_number":38,"context_line":"class VirtualPMEMList(base.NovaObject):"},{"line_number":39,"context_line":"    # Version 1.0: Initial version"},{"line_number":40,"context_line":"    VERSION \u003d \"1.0\""},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_19cb8672","line":38,"range":{"start_line":38,"start_character":27,"end_line":38,"end_character":37},"updated":"2019-07-10 05:30:10.000000000","message":"we should use versioned list object. So it should be the subclass of (base.ObjectListBase, base.NovaObject). Then you can operate this object as normal list.","commit_id":"afd272037b9b3f1392a44e5c51fcb9c1d12f5f13"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"53cee5d079d620ca03e21af840de4b4bfe0a54de","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"@base.NovaObjectRegistry.register"},{"line_number":38,"context_line":"class VirtualPMEMList(base.NovaObject):"},{"line_number":39,"context_line":"    # Version 1.0: Initial version"},{"line_number":40,"context_line":"    VERSION \u003d \"1.0\""},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_3538be9e","line":38,"range":{"start_line":38,"start_character":27,"end_line":38,"end_character":37},"in_reply_to":"7faddb67_19cb8672","updated":"2019-07-10 13:24:00.000000000","message":"+1","commit_id":"afd272037b9b3f1392a44e5c51fcb9c1d12f5f13"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0c05cdf3ea01dda8540bfbce15e45eb3544c096b","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"@base.NovaObjectRegistry.register"},{"line_number":38,"context_line":"class VirtualPMEMList(base.NovaObject):"},{"line_number":39,"context_line":"    # Version 1.0: Initial version"},{"line_number":40,"context_line":"    VERSION \u003d \"1.0\""},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_0758f02f","line":38,"range":{"start_line":38,"start_character":27,"end_line":38,"end_character":37},"in_reply_to":"7faddb67_3538be9e","updated":"2019-07-10 17:05:29.000000000","message":"yes.","commit_id":"afd272037b9b3f1392a44e5c51fcb9c1d12f5f13"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"c28b0edf240a9171df7f5d986f4b1ab6b0f8c6a8","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    VERSION \u003d \"1.0\""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    fields \u003d {"},{"line_number":43,"context_line":"        \u0027vpmems\u0027: fields.ListOfObjectsField(\u0027VirtualPMEM\u0027),"},{"line_number":44,"context_line":"    }"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_d9c40e62","line":43,"range":{"start_line":43,"start_character":9,"end_line":43,"end_character":15},"updated":"2019-07-10 05:30:10.000000000","message":"objects.","commit_id":"afd272037b9b3f1392a44e5c51fcb9c1d12f5f13"}],"nova/tests/unit/objects/test_instance.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"3537200e16aa940a7047d91185e09cbb660e40d1","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        self.assertEqual(123, inst.services[0].id)"},{"line_number":212,"context_line":"        self.assertEqual(\u0027foo\u0027, inst.keypairs[0].name)"},{"line_number":213,"context_line":"        self.assertEqual([\u0027123foo\u0027], inst.trusted_certs.ids)"},{"line_number":214,"context_line":"        self.assertEqual(fake_vpmem.label, inst.vpmems.vpmems[0].label)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        mock_get.assert_called_once_with(self.context, \u0027uuid\u0027,"},{"line_number":217,"context_line":"            columns_to_join\u003dexp_cols)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_8e8f4322","line":214,"range":{"start_line":214,"start_character":43,"end_line":214,"end_character":64},"updated":"2019-07-08 20:38:15.000000000","message":"This plays a little weird. Not sure if there\u0027s a way to organize the objects such that it\u0027s just inst.vpmems[0].","commit_id":"1fcc2937a43a204c7b49b5651da2ec7ad23d3c7d"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"b9e0924b788709d40ad88b5cd6cacf72282aa7a8","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        self.assertEqual(123, inst.services[0].id)"},{"line_number":212,"context_line":"        self.assertEqual(\u0027foo\u0027, inst.keypairs[0].name)"},{"line_number":213,"context_line":"        self.assertEqual([\u0027123foo\u0027], inst.trusted_certs.ids)"},{"line_number":214,"context_line":"        self.assertEqual(fake_vpmem.label, inst.vpmems.vpmems[0].label)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        mock_get.assert_called_once_with(self.context, \u0027uuid\u0027,"},{"line_number":217,"context_line":"            columns_to_join\u003dexp_cols)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_c898cb1c","line":214,"range":{"start_line":214,"start_character":43,"end_line":214,"end_character":64},"in_reply_to":"7faddb67_8e8f4322","updated":"2019-07-09 08:22:55.000000000","message":"Yes, it\u0027s a little weird, but I don\u0027t find a better way.","commit_id":"1fcc2937a43a204c7b49b5651da2ec7ad23d3c7d"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"c28b0edf240a9171df7f5d986f4b1ab6b0f8c6a8","unresolved":false,"context_lines":[{"line_number":1500,"context_line":"        self.assertEqual(fake_secgroups, secgroups)"},{"line_number":1501,"context_line":""},{"line_number":1502,"context_line":"    @mock.patch(\u0027nova.objects.PciDeviceList.get_by_instance_uuid\u0027)"},{"line_number":1503,"context_line":"    def test_load_pci_devices(self, mock_get):"},{"line_number":1504,"context_line":"        fake_pci_devices \u003d pci_device.PciDeviceList()"},{"line_number":1505,"context_line":"        mock_get.return_value \u003d fake_pci_devices"},{"line_number":1506,"context_line":"        inst \u003d objects.Instance(context\u003dself.context, uuid\u003duuids.pci_devices)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_d9a72ea7","line":1503,"updated":"2019-07-10 05:30:10.000000000","message":"It will be create we have a lazy load test for vpmems","commit_id":"afd272037b9b3f1392a44e5c51fcb9c1d12f5f13"}],"nova/tests/unit/objects/test_virtual_pmem.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"3537200e16aa940a7047d91185e09cbb660e40d1","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        mock_get.return_value \u003d fake_instance_extras"},{"line_number":32,"context_line":"        vpmems \u003d virtual_pmem.VirtualPMEMList.get_by_instance_uuid("},{"line_number":33,"context_line":"            self.context, \u0027fake_uuid\u0027)"},{"line_number":34,"context_line":"        for i in range(len(vpmems.vpmems)):"},{"line_number":35,"context_line":"            self.assertEqual(vpmems.vpmems[i].label,"},{"line_number":36,"context_line":"                             fake_vpmems.vpmems[i].label)"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_0edb53ed","line":34,"updated":"2019-07-08 20:38:15.000000000","message":"Should also assert the lengths are equal (e.g. this still passes if get_by_instance_uuid returns an empty list in vpmems.vpmems).","commit_id":"1fcc2937a43a204c7b49b5651da2ec7ad23d3c7d"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"b9e0924b788709d40ad88b5cd6cacf72282aa7a8","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        mock_get.return_value \u003d fake_instance_extras"},{"line_number":32,"context_line":"        vpmems \u003d virtual_pmem.VirtualPMEMList.get_by_instance_uuid("},{"line_number":33,"context_line":"            self.context, \u0027fake_uuid\u0027)"},{"line_number":34,"context_line":"        for i in range(len(vpmems.vpmems)):"},{"line_number":35,"context_line":"            self.assertEqual(vpmems.vpmems[i].label,"},{"line_number":36,"context_line":"                             fake_vpmems.vpmems[i].label)"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_88a2d34a","line":34,"in_reply_to":"7faddb67_0edb53ed","updated":"2019-07-09 08:22:55.000000000","message":"Done","commit_id":"1fcc2937a43a204c7b49b5651da2ec7ad23d3c7d"}]}
