)]}'
{"nova/objects/fields.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"efc0125516a30fafc040d09860daec1ff3352915","unresolved":false,"context_lines":[{"line_number":300,"context_line":"    CPU_IOWAIT_PERCENT \u003d \"cpu.iowait.percent\""},{"line_number":301,"context_line":"    CPU_PERCENT \u003d \"cpu.percent\""},{"line_number":302,"context_line":"    MEM_BW_MAX \u003d \"membw.max\""},{"line_number":303,"context_line":"    MEM_BW_CURRENT \u003d \"membw.current\""},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    ALL \u003d ("},{"line_number":306,"context_line":"        CPU_FREQUENCY,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_41a26e9a","line":303,"updated":"2015-07-15 15:21:10.000000000","message":"How about:\n\n numa.membw.max\n numa.membw.current","commit_id":"c0b9d003fbe01a951fbe33e0fb2ac865e8cb7e67"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"c37f563ce26a64a0998d747cf4cd0c08c08a7d9c","unresolved":false,"context_lines":[{"line_number":300,"context_line":"    CPU_IOWAIT_PERCENT \u003d \"cpu.iowait.percent\""},{"line_number":301,"context_line":"    CPU_PERCENT \u003d \"cpu.percent\""},{"line_number":302,"context_line":"    MEM_BW_MAX \u003d \"membw.max\""},{"line_number":303,"context_line":"    MEM_BW_CURRENT \u003d \"membw.current\""},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    ALL \u003d ("},{"line_number":306,"context_line":"        CPU_FREQUENCY,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_3cdc2d72","line":303,"in_reply_to":"9a41bdd9_41a26e9a","updated":"2015-07-15 15:49:24.000000000","message":"Done","commit_id":"c0b9d003fbe01a951fbe33e0fb2ac865e8cb7e67"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"efc0125516a30fafc040d09860daec1ff3352915","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        CPU_IDLE_PERCENT,"},{"line_number":314,"context_line":"        CPU_IOWAIT_PERCENT,"},{"line_number":315,"context_line":"        CPU_PERCENT,"},{"line_number":316,"context_line":"        MEM_BW_MAX,"},{"line_number":317,"context_line":"        MEM_BW_CURRENT,"},{"line_number":318,"context_line":"    )"},{"line_number":319,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_e1194223","line":316,"updated":"2015-07-15 15:21:10.000000000","message":"Please prefix these with NUMA_, since this is specific to NUMA node bandwidth...","commit_id":"c0b9d003fbe01a951fbe33e0fb2ac865e8cb7e67"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"c37f563ce26a64a0998d747cf4cd0c08c08a7d9c","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        CPU_IDLE_PERCENT,"},{"line_number":314,"context_line":"        CPU_IOWAIT_PERCENT,"},{"line_number":315,"context_line":"        CPU_PERCENT,"},{"line_number":316,"context_line":"        MEM_BW_MAX,"},{"line_number":317,"context_line":"        MEM_BW_CURRENT,"},{"line_number":318,"context_line":"    )"},{"line_number":319,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_dce66143","line":316,"in_reply_to":"9a41bdd9_e1194223","updated":"2015-07-15 15:49:24.000000000","message":"Done","commit_id":"c0b9d003fbe01a951fbe33e0fb2ac865e8cb7e67"}],"nova/objects/monitor_metric.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"fb6bfc6077531a84b7bde48e16dbe448920911d1","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    child_versions \u003d {"},{"line_number":36,"context_line":"        \u00271.1\u0027: \u00271.0\u0027,"},{"line_number":37,"context_line":"    }"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    obj_relationships \u003d {"},{"line_number":40,"context_line":"        \u0027value\u0027: [(\u00271.1\u0027, \u00271.0\u0027)],"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_2e54571f","line":37,"updated":"2015-07-07 14:28:41.000000000","message":"you don\u0027t need that","commit_id":"61df3e3fd8a75ff0a6f4f703cd15e9a0a90454c8"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"e3fe1d9cd9b9f69f867302f1abc7cc5b963e6099","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    child_versions \u003d {"},{"line_number":36,"context_line":"        \u00271.1\u0027: \u00271.0\u0027,"},{"line_number":37,"context_line":"    }"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    obj_relationships \u003d {"},{"line_number":40,"context_line":"        \u0027value\u0027: [(\u00271.1\u0027, \u00271.0\u0027)],"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_9bffe000","line":37,"in_reply_to":"ba3cc151_2e54571f","updated":"2015-07-07 18:01:41.000000000","message":"Done","commit_id":"61df3e3fd8a75ff0a6f4f703cd15e9a0a90454c8"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"fb6bfc6077531a84b7bde48e16dbe448920911d1","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        target_version \u003d utils.convert_version_to_tuple(target_version)"},{"line_number":47,"context_line":"        if target_version \u003c (1, 1) and \u0027value\u0027 in primitive:"},{"line_number":48,"context_line":"            old \u003d primitive[\u0027value\u0027]"},{"line_number":49,"context_line":"            primitive[\u0027value\u0027] \u003d objects.MonitorMetricValue(integer_value\u003dold)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    # NOTE(jaypipes): This method exists to convert the object to the"},{"line_number":52,"context_line":"    # format expected by the RPC notifier for metrics events."}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_ee1bcf7e","line":49,"updated":"2015-07-07 14:28:41.000000000","message":"no, you need to hydrate the object version of 1.0, so you need to provide an integer, not a MonitorMetricValue","commit_id":"61df3e3fd8a75ff0a6f4f703cd15e9a0a90454c8"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"e3fe1d9cd9b9f69f867302f1abc7cc5b963e6099","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        target_version \u003d utils.convert_version_to_tuple(target_version)"},{"line_number":47,"context_line":"        if target_version \u003c (1, 1) and \u0027value\u0027 in primitive:"},{"line_number":48,"context_line":"            old \u003d primitive[\u0027value\u0027]"},{"line_number":49,"context_line":"            primitive[\u0027value\u0027] \u003d objects.MonitorMetricValue(integer_value\u003dold)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    # NOTE(jaypipes): This method exists to convert the object to the"},{"line_number":52,"context_line":"    # format expected by the RPC notifier for metrics events."}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_0c0dd13d","line":49,"in_reply_to":"ba3cc151_ee1bcf7e","updated":"2015-07-07 18:01:41.000000000","message":"I sorta changed the design in patchset # 5 after dansmith\u0027s comment on not changing the type of an existing field.","commit_id":"61df3e3fd8a75ff0a6f4f703cd15e9a0a90454c8"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0880fc3658f62ad4af787633a5274c5d3a185e2f","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    fields \u003d {"},{"line_number":27,"context_line":"        \u0027name\u0027: fields.MonitorMetricTypeField(nullable\u003dFalse),"},{"line_number":28,"context_line":"        \u0027value\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":29,"context_line":"        \u0027numa_nodes_values\u0027: fields.DictOfIntegersField(nullable\u003dTrue),"},{"line_number":30,"context_line":"        \u0027timestamp\u0027: fields.DateTimeField(nullable\u003dFalse),"},{"line_number":31,"context_line":"        # This will be the stevedore extension full class name"},{"line_number":32,"context_line":"        # for the plugin from which the metric originates."}],"source_content_type":"text/x-python","patch_set":5,"id":"9a41bdd9_830bde8d","line":29,"updated":"2015-07-14 15:02:43.000000000","message":"Leave this as-is.","commit_id":"235eb3baf7e25a1f40d72dd023982e5895df56fb"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"63e86958ad771332ceb04bda18164892a1933308","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    fields \u003d {"},{"line_number":27,"context_line":"        \u0027name\u0027: fields.MonitorMetricTypeField(nullable\u003dFalse),"},{"line_number":28,"context_line":"        \u0027value\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":29,"context_line":"        \u0027numa_nodes_values\u0027: fields.DictOfIntegersField(nullable\u003dTrue),"},{"line_number":30,"context_line":"        \u0027timestamp\u0027: fields.DateTimeField(nullable\u003dFalse),"},{"line_number":31,"context_line":"        # This will be the stevedore extension full class name"},{"line_number":32,"context_line":"        # for the plugin from which the metric originates."}],"source_content_type":"text/x-python","patch_set":5,"id":"9a41bdd9_1eb40180","line":29,"in_reply_to":"9a41bdd9_830bde8d","updated":"2015-07-14 15:51:44.000000000","message":"Done","commit_id":"235eb3baf7e25a1f40d72dd023982e5895df56fb"},{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"b5a0386002eba579100bd96da3d5eefd140f1f8f","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        super(MonitorMetric, self).obj_make_compatible(primitive,"},{"line_number":38,"context_line":"                                                       target_version)"},{"line_number":39,"context_line":"        target_version \u003d utils.convert_version_to_tuple(target_version)"},{"line_number":40,"context_line":"        if target_version \u003c (1, 1) and \u0027numa_nodes_values\u0027 in primitive:"},{"line_number":41,"context_line":"            del primitive[\u0027numa_nodes_values\u0027]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def obj_load_attr(self, attrname):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a41bdd9_181e595f","line":40,"updated":"2015-07-14 14:35:57.000000000","message":"If we need to backport to 1.0, we need to somehow make sure value is set. It could be null in 1.1 but we need to fill it with something in the backport to 1.0.","commit_id":"235eb3baf7e25a1f40d72dd023982e5895df56fb"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"63e86958ad771332ceb04bda18164892a1933308","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        super(MonitorMetric, self).obj_make_compatible(primitive,"},{"line_number":38,"context_line":"                                                       target_version)"},{"line_number":39,"context_line":"        target_version \u003d utils.convert_version_to_tuple(target_version)"},{"line_number":40,"context_line":"        if target_version \u003c (1, 1) and \u0027numa_nodes_values\u0027 in primitive:"},{"line_number":41,"context_line":"            del primitive[\u0027numa_nodes_values\u0027]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def obj_load_attr(self, attrname):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a41bdd9_3eb9c579","line":40,"in_reply_to":"9a41bdd9_181e595f","updated":"2015-07-14 15:51:44.000000000","message":"Done","commit_id":"235eb3baf7e25a1f40d72dd023982e5895df56fb"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0880fc3658f62ad4af787633a5274c5d3a185e2f","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        super(MonitorMetric, self).obj_make_compatible(primitive,"},{"line_number":38,"context_line":"                                                       target_version)"},{"line_number":39,"context_line":"        target_version \u003d utils.convert_version_to_tuple(target_version)"},{"line_number":40,"context_line":"        if target_version \u003c (1, 1) and \u0027numa_nodes_values\u0027 in primitive:"},{"line_number":41,"context_line":"            del primitive[\u0027numa_nodes_values\u0027]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def obj_load_attr(self, attrname):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a41bdd9_e3418aaa","line":40,"in_reply_to":"9a41bdd9_181e595f","updated":"2015-07-14 15:02:43.000000000","message":"Yep, good call. So, either set this to None, or pick the first thing out of numa_node_values and use that.","commit_id":"235eb3baf7e25a1f40d72dd023982e5895df56fb"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"63e86958ad771332ceb04bda18164892a1933308","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        super(MonitorMetric, self).obj_make_compatible(primitive,"},{"line_number":38,"context_line":"                                                       target_version)"},{"line_number":39,"context_line":"        target_version \u003d utils.convert_version_to_tuple(target_version)"},{"line_number":40,"context_line":"        if target_version \u003c (1, 1) and \u0027numa_nodes_values\u0027 in primitive:"},{"line_number":41,"context_line":"            del primitive[\u0027numa_nodes_values\u0027]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def obj_load_attr(self, attrname):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a41bdd9_feafdd27","line":40,"in_reply_to":"9a41bdd9_e3418aaa","updated":"2015-07-14 15:51:44.000000000","message":"Done","commit_id":"235eb3baf7e25a1f40d72dd023982e5895df56fb"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0880fc3658f62ad4af787633a5274c5d3a185e2f","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    def obj_load_attr(self, attrname):"},{"line_number":44,"context_line":"        # NOTE(sbiswas7)We want to set the default behavior by loading the"},{"line_number":45,"context_line":"        # attributes with null values."},{"line_number":46,"context_line":"        setattr(self, attrname, None)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    # NOTE(jaypipes): This method exists to convert the object to the"},{"line_number":49,"context_line":"    # format expected by the RPC notifier for metrics events."}],"source_content_type":"text/x-python","patch_set":5,"id":"9a41bdd9_0354ae50","line":46,"updated":"2015-07-14 15:02:43.000000000","message":"This should only do this for the attribute you want, not all attributes. That said, I don\u0027t think you need this. Put something in the field when you backport it above.","commit_id":"235eb3baf7e25a1f40d72dd023982e5895df56fb"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"63e86958ad771332ceb04bda18164892a1933308","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    def obj_load_attr(self, attrname):"},{"line_number":44,"context_line":"        # NOTE(sbiswas7)We want to set the default behavior by loading the"},{"line_number":45,"context_line":"        # attributes with null values."},{"line_number":46,"context_line":"        setattr(self, attrname, None)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    # NOTE(jaypipes): This method exists to convert the object to the"},{"line_number":49,"context_line":"    # format expected by the RPC notifier for metrics events."}],"source_content_type":"text/x-python","patch_set":5,"id":"9a41bdd9_9ea81122","line":46,"in_reply_to":"9a41bdd9_0354ae50","updated":"2015-07-14 15:51:44.000000000","message":"Done","commit_id":"235eb3baf7e25a1f40d72dd023982e5895df56fb"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"0c30d10d04d30daffe6d1e01f80642bd65e461b8","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            dict_to_return[\u0027numa_nodes_values\u0027] \u003d self.numa_nodes_values"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        return dict_to_return"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"@base.NovaObjectRegistry.register"},{"line_number":69,"context_line":"class MonitorMetricList(base.ObjectListBase, base.NovaObject):"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba3cc151_b75f370e","line":66,"updated":"2015-07-08 04:33:09.000000000","message":"An alternative to this could be:\n\ndict_to_return \u003d {\n           \u0027name\u0027: self.name\n           \u0027timestamp\u0027: xxx\n           \u0027source\u0027: self.source\n           \u0027value\u0027: self.value\n}\n\nif not self.value and self.numa_nodes_values:\n    dict_to_return[\u0027value\u0027] \u003d self.numa_nodes_values\n\nreturn dict_to_return","commit_id":"235eb3baf7e25a1f40d72dd023982e5895df56fb"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"63e86958ad771332ceb04bda18164892a1933308","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            dict_to_return[\u0027numa_nodes_values\u0027] \u003d self.numa_nodes_values"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        return dict_to_return"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"@base.NovaObjectRegistry.register"},{"line_number":69,"context_line":"class MonitorMetricList(base.ObjectListBase, base.NovaObject):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a41bdd9_787680a5","line":66,"in_reply_to":"9a41bdd9_a3e382a3","updated":"2015-07-14 15:51:44.000000000","message":"Will let Jay decide this piece. Sticking with the original approach for now.","commit_id":"235eb3baf7e25a1f40d72dd023982e5895df56fb"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0880fc3658f62ad4af787633a5274c5d3a185e2f","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            dict_to_return[\u0027numa_nodes_values\u0027] \u003d self.numa_nodes_values"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        return dict_to_return"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"@base.NovaObjectRegistry.register"},{"line_number":69,"context_line":"class MonitorMetricList(base.ObjectListBase, base.NovaObject):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a41bdd9_a3e382a3","line":66,"in_reply_to":"ba3cc151_b75f370e","updated":"2015-07-14 15:02:43.000000000","message":"You don\u0027t want to check for None-ness, you want to check for is-it-set-ness:\n\n if self.obj_attr_is_set(\u0027value\u0027):\n     dict[\u0027value\u0027] \u003d self.value","commit_id":"235eb3baf7e25a1f40d72dd023982e5895df56fb"},{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"b5a0386002eba579100bd96da3d5eefd140f1f8f","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    fields \u003d {"},{"line_number":74,"context_line":"        \u0027objects\u0027: fields.ListOfObjectsField(\u0027MonitorMetric\u0027),"},{"line_number":75,"context_line":"    }"},{"line_number":76,"context_line":"    child_versions \u003d {"},{"line_number":77,"context_line":"        \u00271.0\u0027: \u00271.0\u0027,"},{"line_number":78,"context_line":"    }"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a41bdd9_15106458","line":76,"updated":"2015-07-14 14:35:57.000000000","message":"Need to update this to hold new version of MonitorMetric","commit_id":"235eb3baf7e25a1f40d72dd023982e5895df56fb"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"63e86958ad771332ceb04bda18164892a1933308","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    fields \u003d {"},{"line_number":74,"context_line":"        \u0027objects\u0027: fields.ListOfObjectsField(\u0027MonitorMetric\u0027),"},{"line_number":75,"context_line":"    }"},{"line_number":76,"context_line":"    child_versions \u003d {"},{"line_number":77,"context_line":"        \u00271.0\u0027: \u00271.0\u0027,"},{"line_number":78,"context_line":"    }"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a41bdd9_5e65a91b","line":76,"in_reply_to":"9a41bdd9_15106458","updated":"2015-07-14 15:51:44.000000000","message":"Done","commit_id":"235eb3baf7e25a1f40d72dd023982e5895df56fb"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0880fc3658f62ad4af787633a5274c5d3a185e2f","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    fields \u003d {"},{"line_number":74,"context_line":"        \u0027objects\u0027: fields.ListOfObjectsField(\u0027MonitorMetric\u0027),"},{"line_number":75,"context_line":"    }"},{"line_number":76,"context_line":"    child_versions \u003d {"},{"line_number":77,"context_line":"        \u00271.0\u0027: \u00271.0\u0027,"},{"line_number":78,"context_line":"    }"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a41bdd9_c3e00699","line":76,"in_reply_to":"9a41bdd9_15106458","updated":"2015-07-14 15:02:43.000000000","message":"Yeah","commit_id":"235eb3baf7e25a1f40d72dd023982e5895df56fb"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"63e86958ad771332ceb04bda18164892a1933308","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    fields \u003d {"},{"line_number":74,"context_line":"        \u0027objects\u0027: fields.ListOfObjectsField(\u0027MonitorMetric\u0027),"},{"line_number":75,"context_line":"    }"},{"line_number":76,"context_line":"    child_versions \u003d {"},{"line_number":77,"context_line":"        \u00271.0\u0027: \u00271.0\u0027,"},{"line_number":78,"context_line":"    }"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a41bdd9_1e6ba1f2","line":76,"in_reply_to":"9a41bdd9_c3e00699","updated":"2015-07-14 15:51:44.000000000","message":"Done","commit_id":"235eb3baf7e25a1f40d72dd023982e5895df56fb"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"efc0125516a30fafc040d09860daec1ff3352915","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    fields \u003d {"},{"line_number":27,"context_line":"        \u0027name\u0027: fields.MonitorMetricTypeField(nullable\u003dFalse),"},{"line_number":28,"context_line":"        \u0027value\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":29,"context_line":"        \u0027numa_nodes_values\u0027: fields.DictOfIntegersField(nullable\u003dTrue),"},{"line_number":30,"context_line":"        \u0027timestamp\u0027: fields.DateTimeField(nullable\u003dFalse),"},{"line_number":31,"context_line":"        # This will be the stevedore extension full class name"},{"line_number":32,"context_line":"        # for the plugin from which the metric originates."}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_01d6a6f0","line":29,"updated":"2015-07-15 15:21:10.000000000","message":"Plus, this really should indicate the values are storing the memory bandwidth numbers. How about:\n\n \u0027numa_nodes_membw_values\u0027","commit_id":"c0b9d003fbe01a951fbe33e0fb2ac865e8cb7e67"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"c37f563ce26a64a0998d747cf4cd0c08c08a7d9c","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    fields \u003d {"},{"line_number":27,"context_line":"        \u0027name\u0027: fields.MonitorMetricTypeField(nullable\u003dFalse),"},{"line_number":28,"context_line":"        \u0027value\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":29,"context_line":"        \u0027numa_nodes_values\u0027: fields.DictOfIntegersField(nullable\u003dTrue),"},{"line_number":30,"context_line":"        \u0027timestamp\u0027: fields.DateTimeField(nullable\u003dFalse),"},{"line_number":31,"context_line":"        # This will be the stevedore extension full class name"},{"line_number":32,"context_line":"        # for the plugin from which the metric originates."}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_10bfcdaa","line":29,"in_reply_to":"9a41bdd9_01d6a6f0","updated":"2015-07-15 15:49:24.000000000","message":"Ok named it \"numa_membw_values\" to keep the name short...hope that\u0027s ok...","commit_id":"c0b9d003fbe01a951fbe33e0fb2ac865e8cb7e67"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"efc0125516a30fafc040d09860daec1ff3352915","unresolved":false,"context_lines":[{"line_number":59,"context_line":"            \u0027source\u0027: self.source,"},{"line_number":60,"context_line":"        }"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        if self.value:"},{"line_number":63,"context_line":"            dict_to_return[\u0027value\u0027] \u003d self.value"},{"line_number":64,"context_line":"        if self.numa_nodes_values:"},{"line_number":65,"context_line":"            dict_to_return[\u0027numa_nodes_values\u0027] \u003d self.numa_nodes_values"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_c1cd1e32","line":62,"updated":"2015-07-15 15:21:10.000000000","message":"if self.value is not None:\n\nself.value can easily be 0.","commit_id":"c0b9d003fbe01a951fbe33e0fb2ac865e8cb7e67"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"c37f563ce26a64a0998d747cf4cd0c08c08a7d9c","unresolved":false,"context_lines":[{"line_number":59,"context_line":"            \u0027source\u0027: self.source,"},{"line_number":60,"context_line":"        }"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        if self.value:"},{"line_number":63,"context_line":"            dict_to_return[\u0027value\u0027] \u003d self.value"},{"line_number":64,"context_line":"        if self.numa_nodes_values:"},{"line_number":65,"context_line":"            dict_to_return[\u0027numa_nodes_values\u0027] \u003d self.numa_nodes_values"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_3cf8adc2","line":62,"in_reply_to":"9a41bdd9_c1cd1e32","updated":"2015-07-15 15:49:24.000000000","message":"Done","commit_id":"c0b9d003fbe01a951fbe33e0fb2ac865e8cb7e67"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"efc0125516a30fafc040d09860daec1ff3352915","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        if self.value:"},{"line_number":63,"context_line":"            dict_to_return[\u0027value\u0027] \u003d self.value"},{"line_number":64,"context_line":"        if self.numa_nodes_values:"},{"line_number":65,"context_line":"            dict_to_return[\u0027numa_nodes_values\u0027] \u003d self.numa_nodes_values"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        return dict_to_return"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_815cf67d","line":64,"updated":"2015-07-15 15:21:10.000000000","message":"This should probably be:\n\n elif self.numa_membw_values is not None:\n\nas it\u0027s not possible (or shouldn\u0027t be at least...) to have BOTH value and numa_membw_values both be not None","commit_id":"c0b9d003fbe01a951fbe33e0fb2ac865e8cb7e67"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"c37f563ce26a64a0998d747cf4cd0c08c08a7d9c","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        if self.value:"},{"line_number":63,"context_line":"            dict_to_return[\u0027value\u0027] \u003d self.value"},{"line_number":64,"context_line":"        if self.numa_nodes_values:"},{"line_number":65,"context_line":"            dict_to_return[\u0027numa_nodes_values\u0027] \u003d self.numa_nodes_values"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        return dict_to_return"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_dc02e1b3","line":64,"in_reply_to":"9a41bdd9_815cf67d","updated":"2015-07-15 15:49:24.000000000","message":"Done","commit_id":"c0b9d003fbe01a951fbe33e0fb2ac865e8cb7e67"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4d8117845e959838479dc760580a4317beb24336","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    fields \u003d {"},{"line_number":27,"context_line":"        \u0027name\u0027: fields.MonitorMetricTypeField(nullable\u003dFalse),"},{"line_number":28,"context_line":"        \u0027value\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":29,"context_line":"        \u0027numa_membw_values\u0027: fields.DictOfIntegersField(nullable\u003dTrue),"},{"line_number":30,"context_line":"        \u0027timestamp\u0027: fields.DateTimeField(nullable\u003dFalse),"},{"line_number":31,"context_line":"        # This will be the stevedore extension full class name"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a41bdd9_b9a4c54a","line":28,"updated":"2015-07-15 18:26:50.000000000","message":"I don\u0027t think this should be changed. Just don\u0027t set it if you don\u0027t have the value, right? If we do change this, it needs to be references in the above version history.","commit_id":"2327fd69998717221d43d88d3d812bc4416ce060"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4d8117845e959838479dc760580a4317beb24336","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                                                       target_version)"},{"line_number":39,"context_line":"        target_version \u003d utils.convert_version_to_tuple(target_version)"},{"line_number":40,"context_line":"        if target_version \u003c (1, 1) and \u0027numa_nodes_values\u0027 in primitive:"},{"line_number":41,"context_line":"            primitive[\u0027numa_nodes_values\u0027] \u003d None"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def obj_load_attr(self, attrname):"},{"line_number":44,"context_line":"        # NOTE(sbiswas7)We want to set the default behavior by loading the"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a41bdd9_199e1107","line":41,"updated":"2015-07-15 18:26:50.000000000","message":"This value didn\u0027t exist in 1.0 so you need to delete it from primitive, not set it to None.","commit_id":"2327fd69998717221d43d88d3d812bc4416ce060"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"40fa03d584fc5da1f7b26b6a308efdcef4d68372","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                                                       target_version)"},{"line_number":39,"context_line":"        target_version \u003d utils.convert_version_to_tuple(target_version)"},{"line_number":40,"context_line":"        if target_version \u003c (1, 1) and \u0027numa_nodes_values\u0027 in primitive:"},{"line_number":41,"context_line":"            primitive[\u0027numa_nodes_values\u0027] \u003d None"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def obj_load_attr(self, attrname):"},{"line_number":44,"context_line":"        # NOTE(sbiswas7)We want to set the default behavior by loading the"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a41bdd9_bb6b39f0","line":41,"in_reply_to":"9a41bdd9_199e1107","updated":"2015-07-16 10:33:01.000000000","message":"Done","commit_id":"2327fd69998717221d43d88d3d812bc4416ce060"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4d8117845e959838479dc760580a4317beb24336","unresolved":false,"context_lines":[{"line_number":41,"context_line":"            primitive[\u0027numa_nodes_values\u0027] \u003d None"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def obj_load_attr(self, attrname):"},{"line_number":44,"context_line":"        # NOTE(sbiswas7)We want to set the default behavior by loading the"},{"line_number":45,"context_line":"        # attributes with null values, since there can be cases where"},{"line_number":46,"context_line":"        # either of these values are not initialized."},{"line_number":47,"context_line":"        if attrname \u003d\u003d \u0027numa_nodes_values\u0027 or attrname \u003d\u003d \u0027value\u0027:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a41bdd9_79695df8","line":44,"range":{"start_line":44,"start_character":10,"end_line":44,"end_character":24},"updated":"2015-07-15 18:26:50.000000000","message":"You need a colon and a space after your closing paren.","commit_id":"2327fd69998717221d43d88d3d812bc4416ce060"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"40fa03d584fc5da1f7b26b6a308efdcef4d68372","unresolved":false,"context_lines":[{"line_number":41,"context_line":"            primitive[\u0027numa_nodes_values\u0027] \u003d None"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def obj_load_attr(self, attrname):"},{"line_number":44,"context_line":"        # NOTE(sbiswas7)We want to set the default behavior by loading the"},{"line_number":45,"context_line":"        # attributes with null values, since there can be cases where"},{"line_number":46,"context_line":"        # either of these values are not initialized."},{"line_number":47,"context_line":"        if attrname \u003d\u003d \u0027numa_nodes_values\u0027 or attrname \u003d\u003d \u0027value\u0027:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a41bdd9_7b613104","line":44,"in_reply_to":"9a41bdd9_79695df8","updated":"2015-07-16 10:33:01.000000000","message":"Removed this block entirely","commit_id":"2327fd69998717221d43d88d3d812bc4416ce060"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4d8117845e959838479dc760580a4317beb24336","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        # NOTE(sbiswas7)We want to set the default behavior by loading the"},{"line_number":45,"context_line":"        # attributes with null values, since there can be cases where"},{"line_number":46,"context_line":"        # either of these values are not initialized."},{"line_number":47,"context_line":"        if attrname \u003d\u003d \u0027numa_nodes_values\u0027 or attrname \u003d\u003d \u0027value\u0027:"},{"line_number":48,"context_line":"            setattr(self, attrname, None)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    # NOTE(jaypipes): This method exists to convert the object to the"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a41bdd9_b98da5d4","line":47,"updated":"2015-07-15 18:26:50.000000000","message":"This is a nit, but this could be a lot cleaner like:\n\n if attrname in (\u0027numa_nodes_values\u0027, \u0027value\u0027):\n\nThat said, why do we need to do this? Is there code that depends on always dereferencing .value or something?","commit_id":"2327fd69998717221d43d88d3d812bc4416ce060"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"40fa03d584fc5da1f7b26b6a308efdcef4d68372","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        # NOTE(sbiswas7)We want to set the default behavior by loading the"},{"line_number":45,"context_line":"        # attributes with null values, since there can be cases where"},{"line_number":46,"context_line":"        # either of these values are not initialized."},{"line_number":47,"context_line":"        if attrname \u003d\u003d \u0027numa_nodes_values\u0027 or attrname \u003d\u003d \u0027value\u0027:"},{"line_number":48,"context_line":"            setattr(self, attrname, None)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    # NOTE(jaypipes): This method exists to convert the object to the"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a41bdd9_1b37c5ff","line":47,"in_reply_to":"9a41bdd9_b98da5d4","updated":"2015-07-16 10:33:01.000000000","message":"We don\u0027t. Figured the reason why I had put this hear. It was due to your comment below where i was checking for None.","commit_id":"2327fd69998717221d43d88d3d812bc4416ce060"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4d8117845e959838479dc760580a4317beb24336","unresolved":false,"context_lines":[{"line_number":59,"context_line":"            \u0027source\u0027: self.source,"},{"line_number":60,"context_line":"        }"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        if self.value is not None:"},{"line_number":63,"context_line":"            dict_to_return[\u0027value\u0027] \u003d self.value"},{"line_number":64,"context_line":"        elif self.numa_membw_values is not None:"},{"line_number":65,"context_line":"            dict_to_return[\u0027numa_membw_values\u0027] \u003d self.numa_membw_values"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a41bdd9_b97b65bd","line":62,"updated":"2015-07-15 18:26:50.000000000","message":"If this is why you\u0027re defaulting to None above, just do this:\n\n if self.obj_attr_is_set(\u0027value\u0027):\n     dict_to_return[\u0027value\u0027] \u003d self.value","commit_id":"2327fd69998717221d43d88d3d812bc4416ce060"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"40fa03d584fc5da1f7b26b6a308efdcef4d68372","unresolved":false,"context_lines":[{"line_number":59,"context_line":"            \u0027source\u0027: self.source,"},{"line_number":60,"context_line":"        }"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        if self.value is not None:"},{"line_number":63,"context_line":"            dict_to_return[\u0027value\u0027] \u003d self.value"},{"line_number":64,"context_line":"        elif self.numa_membw_values is not None:"},{"line_number":65,"context_line":"            dict_to_return[\u0027numa_membw_values\u0027] \u003d self.numa_membw_values"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a41bdd9_9b23d5bc","line":62,"in_reply_to":"9a41bdd9_b97b65bd","updated":"2015-07-16 10:33:01.000000000","message":"Thx. Done.","commit_id":"2327fd69998717221d43d88d3d812bc4416ce060"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4d8117845e959838479dc760580a4317beb24336","unresolved":false,"context_lines":[{"line_number":70,"context_line":"@base.NovaObjectRegistry.register"},{"line_number":71,"context_line":"class MonitorMetricList(base.ObjectListBase, base.NovaObject):"},{"line_number":72,"context_line":"    # Version 1.0: Initial version"},{"line_number":73,"context_line":"    # Version 1.1: Added NUMA support"},{"line_number":74,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a41bdd9_d9618906","line":73,"range":{"start_line":73,"start_character":4,"end_line":73,"end_character":37},"updated":"2015-07-15 18:26:50.000000000","message":"This should be:\n\n Version 1.1: MonitorMetric version 1.1","commit_id":"2327fd69998717221d43d88d3d812bc4416ce060"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"40fa03d584fc5da1f7b26b6a308efdcef4d68372","unresolved":false,"context_lines":[{"line_number":70,"context_line":"@base.NovaObjectRegistry.register"},{"line_number":71,"context_line":"class MonitorMetricList(base.ObjectListBase, base.NovaObject):"},{"line_number":72,"context_line":"    # Version 1.0: Initial version"},{"line_number":73,"context_line":"    # Version 1.1: Added NUMA support"},{"line_number":74,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a41bdd9_de6f0bc2","line":73,"in_reply_to":"9a41bdd9_d9618906","updated":"2015-07-16 10:33:01.000000000","message":"Done","commit_id":"2327fd69998717221d43d88d3d812bc4416ce060"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"891bf4c3704e581a8ce51a9c3c80145d4404b684","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    fields \u003d {"},{"line_number":27,"context_line":"        \u0027name\u0027: fields.MonitorMetricTypeField(nullable\u003dFalse),"},{"line_number":28,"context_line":"        \u0027value\u0027: fields.IntegerField(nullable\u003dFalse),"},{"line_number":29,"context_line":"        \u0027numa_membw_values\u0027: fields.DictOfIntegersField(nullable\u003dTrue),"},{"line_number":30,"context_line":"        \u0027timestamp\u0027: fields.DateTimeField(nullable\u003dFalse),"},{"line_number":31,"context_line":"        # This will be the stevedore extension full class name"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a50d1a3_a1a303ff","line":28,"updated":"2015-07-23 16:52:24.000000000","message":"This should change to nullable\u003dTrue, which is a perfectly valid, backwards-compatible change. Please mention in the version comment description above that nullable was changed to True for the value field.","commit_id":"eb56a14df24b13f60c7959cab72efe67e6b4a490"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"6fca899d71e149797b5d57aa62fc8204607cbe90","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    fields \u003d {"},{"line_number":27,"context_line":"        \u0027name\u0027: fields.MonitorMetricTypeField(nullable\u003dFalse),"},{"line_number":28,"context_line":"        \u0027value\u0027: fields.IntegerField(nullable\u003dFalse),"},{"line_number":29,"context_line":"        \u0027numa_membw_values\u0027: fields.DictOfIntegersField(nullable\u003dTrue),"},{"line_number":30,"context_line":"        \u0027timestamp\u0027: fields.DateTimeField(nullable\u003dFalse),"},{"line_number":31,"context_line":"        # This will be the stevedore extension full class name"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a50d1a3_0e687086","line":28,"in_reply_to":"3a50d1a3_a1a303ff","updated":"2015-07-27 18:27:56.000000000","message":"Had changed it to true before Dan\u0027s comment but then i missed his comment on the alternate approach. Done now.","commit_id":"eb56a14df24b13f60c7959cab72efe67e6b4a490"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"891bf4c3704e581a8ce51a9c3c80145d4404b684","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                                                       target_version)"},{"line_number":39,"context_line":"        target_version \u003d utils.convert_version_to_tuple(target_version)"},{"line_number":40,"context_line":"        if target_version \u003c (1, 1) and \u0027numa_nodes_values\u0027 in primitive:"},{"line_number":41,"context_line":"            primitive[\u0027numa_nodes_values\u0027] \u003d None"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    # NOTE(jaypipes): This method exists to convert the object to the"},{"line_number":44,"context_line":"    # format expected by the RPC notifier for metrics events."}],"source_content_type":"text/x-python","patch_set":9,"id":"3a50d1a3_012c3797","line":41,"updated":"2015-07-23 16:52:24.000000000","message":"This needs to be:\n\n del primitive[\u0027numa_nodes_values\u0027]\n\notherwise the key will continue to be in the primitive dict, and we don\u0027t want to transmit this key to clients that do not understand it.","commit_id":"eb56a14df24b13f60c7959cab72efe67e6b4a490"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"6fca899d71e149797b5d57aa62fc8204607cbe90","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                                                       target_version)"},{"line_number":39,"context_line":"        target_version \u003d utils.convert_version_to_tuple(target_version)"},{"line_number":40,"context_line":"        if target_version \u003c (1, 1) and \u0027numa_nodes_values\u0027 in primitive:"},{"line_number":41,"context_line":"            primitive[\u0027numa_nodes_values\u0027] \u003d None"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    # NOTE(jaypipes): This method exists to convert the object to the"},{"line_number":44,"context_line":"    # format expected by the RPC notifier for metrics events."}],"source_content_type":"text/x-python","patch_set":9,"id":"3a50d1a3_0eff10ab","line":41,"in_reply_to":"3a50d1a3_012c3797","updated":"2015-07-27 18:27:56.000000000","message":"Again one of those things that got messed up in between reviews. My bad. Done now.","commit_id":"eb56a14df24b13f60c7959cab72efe67e6b4a490"},{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"8b548f25a75f2bfac0fb345d7a3152eb7a956279","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            \u0027source\u0027: self.source,"},{"line_number":53,"context_line":"        }"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        if self.obj_attr_is_set(\u0027value\u0027):"},{"line_number":56,"context_line":"            dict_to_return[\u0027value\u0027] \u003d self.value"},{"line_number":57,"context_line":"        elif self.obj_attr_is_set(\u0027numa_membw_values\u0027):"},{"line_number":58,"context_line":"            dict_to_return[\u0027numa_membw_values\u0027] \u003d self.numa_membw_values"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a50d1a3_8233d313","line":55,"updated":"2015-07-23 15:00:22.000000000","message":"This will always be set because value is not nullable right?","commit_id":"eb56a14df24b13f60c7959cab72efe67e6b4a490"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"891bf4c3704e581a8ce51a9c3c80145d4404b684","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            \u0027source\u0027: self.source,"},{"line_number":53,"context_line":"        }"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        if self.obj_attr_is_set(\u0027value\u0027):"},{"line_number":56,"context_line":"            dict_to_return[\u0027value\u0027] \u003d self.value"},{"line_number":57,"context_line":"        elif self.obj_attr_is_set(\u0027numa_membw_values\u0027):"},{"line_number":58,"context_line":"            dict_to_return[\u0027numa_membw_values\u0027] \u003d self.numa_membw_values"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a50d1a3_e176eba2","line":55,"in_reply_to":"3a50d1a3_8233d313","updated":"2015-07-23 16:52:24.000000000","message":"No, nullability is different from whether some field has been set.","commit_id":"eb56a14df24b13f60c7959cab72efe67e6b4a490"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c036315affca8364feab38f45b8024ec9aef7428","unresolved":false,"context_lines":[{"line_number":20,"context_line":"@base.NovaObjectRegistry.register"},{"line_number":21,"context_line":"class MonitorMetric(base.NovaObject):"},{"line_number":22,"context_line":"    # Version 1.0: Initial version"},{"line_number":23,"context_line":"    # Version 1.1: Added NUMA support,nullable changed to True for value field"},{"line_number":24,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a50d1a3_bce93281","line":23,"range":{"start_line":23,"start_character":37,"end_line":23,"end_character":38},"updated":"2015-07-28 15:36:39.000000000","message":"Add a space here","commit_id":"f6efe9cf8a3be3a4bba0c127adf4db20fe1eef6a"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c036315affca8364feab38f45b8024ec9aef7428","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    fields \u003d {"},{"line_number":27,"context_line":"        \u0027name\u0027: fields.MonitorMetricTypeField(nullable\u003dFalse),"},{"line_number":28,"context_line":"        \u0027value\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":29,"context_line":"        \u0027numa_membw_values\u0027: fields.DictOfIntegersField(nullable\u003dTrue),"},{"line_number":30,"context_line":"        \u0027timestamp\u0027: fields.DateTimeField(nullable\u003dFalse),"},{"line_number":31,"context_line":"        # This will be the stevedore extension full class name"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a50d1a3_fcc1fae4","line":28,"range":{"start_line":28,"start_character":37,"end_line":28,"end_character":50},"updated":"2015-07-28 15:36:39.000000000","message":"Again, you can\u0027t change this to nullable\u003dTrue unless you account for it in obj_make_compatible(). That will be hard because you can\u0027t synthesize a value for older clients if you have none.\n\nBut again, I think that you don\u0027t need this to be nullable. Just don\u0027t set it on the object and it will be missing instead of set \u003dNone. Then make your code that consumes it just check to see if it\u0027s set with obj_attr_is_set().","commit_id":"f6efe9cf8a3be3a4bba0c127adf4db20fe1eef6a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"7a829343542ea37475f9fee939436c0e52777985","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    fields \u003d {"},{"line_number":27,"context_line":"        \u0027name\u0027: fields.MonitorMetricTypeField(nullable\u003dFalse),"},{"line_number":28,"context_line":"        \u0027value\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":29,"context_line":"        \u0027numa_membw_values\u0027: fields.DictOfIntegersField(nullable\u003dTrue),"},{"line_number":30,"context_line":"        \u0027timestamp\u0027: fields.DateTimeField(nullable\u003dFalse),"},{"line_number":31,"context_line":"        # This will be the stevedore extension full class name"},{"line_number":32,"context_line":"        # for the plugin from which the metric originates."}],"source_content_type":"text/x-python","patch_set":10,"id":"3a50d1a3_45ea9210","line":29,"updated":"2015-07-28 15:52:01.000000000","message":"A little strange, we add new field for another type metric value.\n\nCan we invention something like:\n\nvalue: fields.VariableField()\n\nBut still need to think about a way to limit the field type based on name field.\n\nJust come out this in my mind, it need more think about more detail. Ignore me if this is undoable idea.","commit_id":"f6efe9cf8a3be3a4bba0c127adf4db20fe1eef6a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"7a829343542ea37475f9fee939436c0e52777985","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                                                       target_version)"},{"line_number":39,"context_line":"        target_version \u003d utils.convert_version_to_tuple(target_version)"},{"line_number":40,"context_line":"        if target_version \u003c (1, 1) and \u0027numa_nodes_values\u0027 in primitive:"},{"line_number":41,"context_line":"            del primitive[\u0027numa_nodes_values\u0027]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    # NOTE(jaypipes): This method exists to convert the object to the"},{"line_number":44,"context_line":"    # format expected by the RPC notifier for metrics events."}],"source_content_type":"text/x-python","patch_set":10,"id":"3a50d1a3_dc63de18","line":41,"updated":"2015-07-28 15:52:01.000000000","message":"it is \"del primitive[\u0027numa_membw_values\u0027] \" ? correct me if I miss something.","commit_id":"f6efe9cf8a3be3a4bba0c127adf4db20fe1eef6a"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c036315affca8364feab38f45b8024ec9aef7428","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        }"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        if self.obj_attr_is_set(\u0027value\u0027):"},{"line_number":56,"context_line":"            dict_to_return[\u0027value\u0027] \u003d self.value"},{"line_number":57,"context_line":"        elif self.obj_attr_is_set(\u0027numa_membw_values\u0027):"},{"line_number":58,"context_line":"            dict_to_return[\u0027numa_membw_values\u0027] \u003d self.numa_membw_values"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3a50d1a3_22709ca3","line":56,"updated":"2015-07-28 15:36:39.000000000","message":"See, you\u0027re already checking is-set, so you don\u0027t need self.value to be nullable for this case.","commit_id":"f6efe9cf8a3be3a4bba0c127adf4db20fe1eef6a"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0f59c73296f1128cee70508214bc8d4976da7378","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    fields \u003d {"},{"line_number":28,"context_line":"        \u0027name\u0027: fields.MonitorMetricTypeField(nullable\u003dFalse),"},{"line_number":29,"context_line":"        \u0027value\u0027: fields.IntegerField(nullable\u003dFalse),"},{"line_number":30,"context_line":"        \u0027numa_membw_values\u0027: fields.DictOfIntegersField(nullable\u003dTrue),"},{"line_number":31,"context_line":"        \u0027timestamp\u0027: fields.DateTimeField(nullable\u003dFalse),"},{"line_number":32,"context_line":"        # This will be the stevedore extension full class name"},{"line_number":33,"context_line":"        # for the plugin from which the metric originates."}],"source_content_type":"text/x-python","patch_set":11,"id":"3a50d1a3_783d73ba","line":30,"updated":"2015-07-30 20:08:35.000000000","message":"Not sure this is really right to be nullable, but not a big deal at this point.","commit_id":"ed4ec8c84ff005cea97f0fdd2901d842f8bcbc32"}],"nova/tests/unit/objects/test_monitor_metric.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4d8117845e959838479dc760580a4317beb24336","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                                    numa_membw_values\u003d{\"0\": 10, \"1\": 43},"},{"line_number":57,"context_line":"                                    timestamp\u003d_ts_now,"},{"line_number":58,"context_line":"                                    source\u003d\u0027nova.virt.libvirt.driver\u0027)"},{"line_number":59,"context_line":"        self.assertEqual(_monitor_numa_metric_spec, obj.to_dict())"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class TestMonitorMetricObject(test_objects._LocalTest,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a41bdd9_b929259d","line":59,"updated":"2015-07-15 18:26:50.000000000","message":"There are missing tests for the other changes you\u0027re making, such as the obj_load_attr() stuff. However, I\u0027d much prefer to just remove that, as I said in my comments on the previous file. However, if we keep it for some reason, we need tests here.","commit_id":"2327fd69998717221d43d88d3d812bc4416ce060"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"40fa03d584fc5da1f7b26b6a308efdcef4d68372","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                                    numa_membw_values\u003d{\"0\": 10, \"1\": 43},"},{"line_number":57,"context_line":"                                    timestamp\u003d_ts_now,"},{"line_number":58,"context_line":"                                    source\u003d\u0027nova.virt.libvirt.driver\u0027)"},{"line_number":59,"context_line":"        self.assertEqual(_monitor_numa_metric_spec, obj.to_dict())"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class TestMonitorMetricObject(test_objects._LocalTest,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a41bdd9_fe9d2fbc","line":59,"in_reply_to":"9a41bdd9_b929259d","updated":"2015-07-16 10:33:01.000000000","message":"Done","commit_id":"2327fd69998717221d43d88d3d812bc4416ce060"}]}
