)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"007ea3642b22bf1a44b541e553bc707792ea40ef","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"54850bc9_6d5bd9a7","updated":"2026-05-13 14:59:37.000000000","message":"check-rdo","commit_id":"00c087b7873b99501104e45b1166263596e0184f"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"2ab5619880d6b524d9ab83053221bb9afd80e3ef","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"d1c4ce94_09cdc1a5","updated":"2026-05-13 16:50:53.000000000","message":"check-rdo","commit_id":"00c087b7873b99501104e45b1166263596e0184f"}],"watcher/decision_engine/model/element/instance.py":[{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"df34466d272d7896f5f2efea1d93e5fa4aa219cf","unresolved":true,"context_lines":[{"line_number":58,"context_line":"        \"pinned_az\": ovo_fields.StringField(default\u003d\"\"),"},{"line_number":59,"context_line":"        \"flavor_extra_specs\": wfields.JsonField(default\u003d{}),"},{"line_number":60,"context_line":"        # New fields for zone migration"},{"line_number":61,"context_line":"        \"host\": ovo_fields.StringField(default\u003d\"\"),"},{"line_number":62,"context_line":"        \"created\": ovo_fields.DateTimeField(),"},{"line_number":63,"context_line":"    }"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7d9ad21f_8f56c7dd","line":61,"range":{"start_line":61,"start_character":0,"end_line":61,"end_character":51},"updated":"2026-05-15 19:55:14.000000000","message":"Another option would be to get the Node from the model, since Instance and Node are connected with an Edge. Why should we store the host here instead?","commit_id":"00c087b7873b99501104e45b1166263596e0184f"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"2192f467e5e805c26339b04af1c7369adc797aa8","unresolved":true,"context_lines":[{"line_number":58,"context_line":"        \"pinned_az\": ovo_fields.StringField(default\u003d\"\"),"},{"line_number":59,"context_line":"        \"flavor_extra_specs\": wfields.JsonField(default\u003d{}),"},{"line_number":60,"context_line":"        # New fields for zone migration"},{"line_number":61,"context_line":"        \"host\": ovo_fields.StringField(default\u003d\"\"),"},{"line_number":62,"context_line":"        \"created\": ovo_fields.DateTimeField(),"},{"line_number":63,"context_line":"    }"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"2cc87137_ca5b04a1","line":61,"range":{"start_line":61,"start_character":0,"end_line":61,"end_character":51},"in_reply_to":"4ca65855_f0837da0","updated":"2026-05-18 15:05:51.000000000","message":"I was thinking in a different way, because we already have to maintain the edge connection between nodes and instances, so there is already a code doing that processing on updates.","commit_id":"00c087b7873b99501104e45b1166263596e0184f"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"f1feb7039fd0bd68a10c45bf274262d65cf8fa49","unresolved":true,"context_lines":[{"line_number":58,"context_line":"        \"pinned_az\": ovo_fields.StringField(default\u003d\"\"),"},{"line_number":59,"context_line":"        \"flavor_extra_specs\": wfields.JsonField(default\u003d{}),"},{"line_number":60,"context_line":"        # New fields for zone migration"},{"line_number":61,"context_line":"        \"host\": ovo_fields.StringField(default\u003d\"\"),"},{"line_number":62,"context_line":"        \"created\": ovo_fields.DateTimeField(),"},{"line_number":63,"context_line":"    }"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"4ca65855_f0837da0","line":61,"range":{"start_line":61,"start_character":0,"end_line":61,"end_character":51},"in_reply_to":"7d9ad21f_8f56c7dd","updated":"2026-05-18 06:57:37.000000000","message":"Just for convenience. I feel it\u0027s an easier and cheaper to get the host from the Server to use a field that need to follow the graph. Also, it\u0027s easy to keep the field updated with the actual value.","commit_id":"00c087b7873b99501104e45b1166263596e0184f"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"df34466d272d7896f5f2efea1d93e5fa4aa219cf","unresolved":true,"context_lines":[{"line_number":59,"context_line":"        \"flavor_extra_specs\": wfields.JsonField(default\u003d{}),"},{"line_number":60,"context_line":"        # New fields for zone migration"},{"line_number":61,"context_line":"        \"host\": ovo_fields.StringField(default\u003d\"\"),"},{"line_number":62,"context_line":"        \"created\": ovo_fields.DateTimeField(),"},{"line_number":63,"context_line":"    }"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def accept(self, visitor):"}],"source_content_type":"text/x-python","patch_set":1,"id":"dc2fb6d7_500fe0a0","line":62,"range":{"start_line":62,"start_character":9,"end_line":62,"end_character":16},"updated":"2026-05-15 19:55:14.000000000","message":"why not \"created_at\"?","commit_id":"00c087b7873b99501104e45b1166263596e0184f"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"f1feb7039fd0bd68a10c45bf274262d65cf8fa49","unresolved":true,"context_lines":[{"line_number":59,"context_line":"        \"flavor_extra_specs\": wfields.JsonField(default\u003d{}),"},{"line_number":60,"context_line":"        # New fields for zone migration"},{"line_number":61,"context_line":"        \"host\": ovo_fields.StringField(default\u003d\"\"),"},{"line_number":62,"context_line":"        \"created\": ovo_fields.DateTimeField(),"},{"line_number":63,"context_line":"    }"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def accept(self, visitor):"}],"source_content_type":"text/x-python","patch_set":1,"id":"eb48a15a_f90bb99f","line":62,"range":{"start_line":62,"start_character":9,"end_line":62,"end_character":16},"in_reply_to":"dc2fb6d7_500fe0a0","updated":"2026-05-18 06:57:37.000000000","message":"the Server class from nova_helper uses `created` , https://github.com/openstack/watcher/blob/master/watcher/common/nova_helper.py#L114 , and it uses `created to access it`.","commit_id":"00c087b7873b99501104e45b1166263596e0184f"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"2192f467e5e805c26339b04af1c7369adc797aa8","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        \"flavor_extra_specs\": wfields.JsonField(default\u003d{}),"},{"line_number":60,"context_line":"        # New fields for zone migration"},{"line_number":61,"context_line":"        \"host\": ovo_fields.StringField(default\u003d\"\"),"},{"line_number":62,"context_line":"        \"created\": ovo_fields.DateTimeField(),"},{"line_number":63,"context_line":"    }"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def accept(self, visitor):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7473fc81_fc93ed9d","line":62,"range":{"start_line":62,"start_character":9,"end_line":62,"end_character":16},"in_reply_to":"eb48a15a_f90bb99f","updated":"2026-05-18 15:05:51.000000000","message":"hum, ok then","commit_id":"00c087b7873b99501104e45b1166263596e0184f"}],"watcher/decision_engine/model/model_root.py":[{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"df34466d272d7896f5f2efea1d93e5fa4aa219cf","unresolved":true,"context_lines":[{"line_number":118,"context_line":"        self.assert_node(node)"},{"line_number":119,"context_line":"        self.assert_instance(instance)"},{"line_number":120,"context_line":"        instance.host \u003d node.hostname"},{"line_number":121,"context_line":"        self.add_edge(instance.uuid, node.uuid)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    @lockutils.synchronized(\"model_root\")"},{"line_number":124,"context_line":"    def unmap_instance(self, instance, node):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9c4c5a96_c4836498","line":121,"range":{"start_line":121,"start_character":8,"end_line":121,"end_character":47},"updated":"2026-05-15 19:55:14.000000000","message":"each Instance should be connected only to one Node. We could retrieve the Node from Instance with a \"self.successors(Instance)\" here. Wdyt?","commit_id":"00c087b7873b99501104e45b1166263596e0184f"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"f1feb7039fd0bd68a10c45bf274262d65cf8fa49","unresolved":true,"context_lines":[{"line_number":118,"context_line":"        self.assert_node(node)"},{"line_number":119,"context_line":"        self.assert_instance(instance)"},{"line_number":120,"context_line":"        instance.host \u003d node.hostname"},{"line_number":121,"context_line":"        self.add_edge(instance.uuid, node.uuid)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    @lockutils.synchronized(\"model_root\")"},{"line_number":124,"context_line":"    def unmap_instance(self, instance, node):"}],"source_content_type":"text/x-python","patch_set":1,"id":"c4906f60_8d954c66","line":121,"range":{"start_line":121,"start_character":8,"end_line":121,"end_character":47},"in_reply_to":"9c4c5a96_c4836498","updated":"2026-05-18 06:57:37.000000000","message":"you mean use it here in the map_instance or use \"self.successors(Instance)\" instead of adding the host field?. As mentioned before, I found it a convenient way to identify the host from the instance object but yes, it could be avoided and use graph instead. I simply see it easier from developer pov.","commit_id":"00c087b7873b99501104e45b1166263596e0184f"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"2192f467e5e805c26339b04af1c7369adc797aa8","unresolved":true,"context_lines":[{"line_number":118,"context_line":"        self.assert_node(node)"},{"line_number":119,"context_line":"        self.assert_instance(instance)"},{"line_number":120,"context_line":"        instance.host \u003d node.hostname"},{"line_number":121,"context_line":"        self.add_edge(instance.uuid, node.uuid)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    @lockutils.synchronized(\"model_root\")"},{"line_number":124,"context_line":"    def unmap_instance(self, instance, node):"}],"source_content_type":"text/x-python","patch_set":1,"id":"f01ead8b_a99c9c7e","line":121,"range":{"start_line":121,"start_character":8,"end_line":121,"end_character":47},"in_reply_to":"c4906f60_8d954c66","updated":"2026-05-18 15:05:51.000000000","message":"I was considering using self.successors(Instance) to retrieve this info, intead of adding \u0027host\u0027 to Instace element, since we already manage this update when a instance is moved for example. The difference is that you are storing this info in the element, while the other would be based on the compute model.\nNot sure what other think about that.","commit_id":"00c087b7873b99501104e45b1166263596e0184f"}],"watcher/tests/unit/decision_engine/model/data/scenario_1.xml":[{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"df34466d272d7896f5f2efea1d93e5fa4aa219cf","unresolved":true,"context_lines":[{"line_number":1,"context_line":"\u003cModelRoot\u003e"},{"line_number":2,"context_line":"  \u003cComputeNode uuid\u003d\"Node_0\" status\u003d\"enabled\" state\u003d\"up\" id\u003d\"0\" hostname\u003d\"hostname_0\" vcpus\u003d\"40\" vcpu_reserved\u003d\"0\" vcpu_ratio\u003d\"1\" disk\u003d\"250\" disk_gb_reserved\u003d\"0\" disk_ratio\u003d\"1\" disk_capacity\u003d\"250\" memory\u003d\"132\" memory_mb_reserved\u003d\"0\" memory_ratio\u003d\"1\"\u003e"},{"line_number":3,"context_line":"    \u003cInstance watcher_exclude\u003d\"False\" state\u003d\"active\" name\u003d\"INSTANCE_0\" uuid\u003d\"d000ef1f-dc19-4982-9383-087498bfde03\" vcpus\u003d\"10\" disk\u003d\"20\" disk_capacity\u003d\"20\" memory\u003d\"2\" metadata\u003d\u0027{\"optimize\": true,\"top\": \"floor\", \"nested\": {\"x\": \"y\"}}\u0027 project_id\u003d\"91FFFE30-78A0-4152-ACD2-8310FF274DC9\" created\u003d\"2026-02-09T18:55:13Z\"/\u003e"},{"line_number":4,"context_line":"    \u003cInstance watcher_exclude\u003d\"False\" state\u003d\"active\" name\u003d\"INSTANCE_1\" uuid\u003d\"d010ef1f-dc19-4982-9383-087498bfde03\" vcpus\u003d\"11\" disk\u003d\"18\" disk_capacity\u003d\"20\" memory\u003d\"3\" metadata\u003d\u0027{\"optimize\": true,\"top\": \"floor\", \"nested\": {\"x\": \"y\"}}\u0027 project_id\u003d\"26F03131-32CB-4697-9D61-9123F87A8147\" created\u003d\"2026-02-08T18:55:13Z\"/\u003e"},{"line_number":5,"context_line":"  \u003c/ComputeNode\u003e"},{"line_number":6,"context_line":"  \u003cComputeNode uuid\u003d\"Node_1\" status\u003d\"enabled\" state\u003d\"up\" id\u003d\"1\" hostname\u003d\"hostname_1\" vcpus\u003d\"40\" vcpu_reserved\u003d\"0\" vcpu_ratio\u003d\"1\" disk\u003d\"250\" disk_gb_reserved\u003d\"0\" disk_ratio\u003d\"1\" disk_capacity\u003d\"250\" memory\u003d\"132\" memory_mb_reserved\u003d\"0\" memory_ratio\u003d\"1\"\u003e"},{"line_number":7,"context_line":"    \u003cInstance watcher_exclude\u003d\"False\" state\u003d\"active\" name\u003d\"INSTANCE_2\" uuid\u003d\"d020ef1f-dc19-4982-9383-087498bfde03\" vcpus\u003d\"12\" disk\u003d\"19\" disk_capacity\u003d\"20\" memory\u003d\"1\" metadata\u003d\u0027{\"optimize\": true,\"top\": \"floor\", \"nested\": {\"x\": \"y\"}}\u0027 project_id\u003d\"109F7909-0607-4712-B32C-5CC6D49D2F15\" created\u003d\"2026-02-07T18:55:13Z\"/\u003e"}],"source_content_type":"application/xml","patch_set":1,"id":"dae9ca9a_861196e8","line":4,"range":{"start_line":4,"start_character":283,"end_line":4,"end_character":313},"updated":"2026-05-15 19:55:14.000000000","message":"I think that we should update all instances, it expected that all instances in the model have the same attributes. So this model would not represent the expected model in memory. \nBtw, that\u0027s one of the reasons to have this files generated by a class/fixture.","commit_id":"00c087b7873b99501104e45b1166263596e0184f"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"f1feb7039fd0bd68a10c45bf274262d65cf8fa49","unresolved":true,"context_lines":[{"line_number":1,"context_line":"\u003cModelRoot\u003e"},{"line_number":2,"context_line":"  \u003cComputeNode uuid\u003d\"Node_0\" status\u003d\"enabled\" state\u003d\"up\" id\u003d\"0\" hostname\u003d\"hostname_0\" vcpus\u003d\"40\" vcpu_reserved\u003d\"0\" vcpu_ratio\u003d\"1\" disk\u003d\"250\" disk_gb_reserved\u003d\"0\" disk_ratio\u003d\"1\" disk_capacity\u003d\"250\" memory\u003d\"132\" memory_mb_reserved\u003d\"0\" memory_ratio\u003d\"1\"\u003e"},{"line_number":3,"context_line":"    \u003cInstance watcher_exclude\u003d\"False\" state\u003d\"active\" name\u003d\"INSTANCE_0\" uuid\u003d\"d000ef1f-dc19-4982-9383-087498bfde03\" vcpus\u003d\"10\" disk\u003d\"20\" disk_capacity\u003d\"20\" memory\u003d\"2\" metadata\u003d\u0027{\"optimize\": true,\"top\": \"floor\", \"nested\": {\"x\": \"y\"}}\u0027 project_id\u003d\"91FFFE30-78A0-4152-ACD2-8310FF274DC9\" created\u003d\"2026-02-09T18:55:13Z\"/\u003e"},{"line_number":4,"context_line":"    \u003cInstance watcher_exclude\u003d\"False\" state\u003d\"active\" name\u003d\"INSTANCE_1\" uuid\u003d\"d010ef1f-dc19-4982-9383-087498bfde03\" vcpus\u003d\"11\" disk\u003d\"18\" disk_capacity\u003d\"20\" memory\u003d\"3\" metadata\u003d\u0027{\"optimize\": true,\"top\": \"floor\", \"nested\": {\"x\": \"y\"}}\u0027 project_id\u003d\"26F03131-32CB-4697-9D61-9123F87A8147\" created\u003d\"2026-02-08T18:55:13Z\"/\u003e"},{"line_number":5,"context_line":"  \u003c/ComputeNode\u003e"},{"line_number":6,"context_line":"  \u003cComputeNode uuid\u003d\"Node_1\" status\u003d\"enabled\" state\u003d\"up\" id\u003d\"1\" hostname\u003d\"hostname_1\" vcpus\u003d\"40\" vcpu_reserved\u003d\"0\" vcpu_ratio\u003d\"1\" disk\u003d\"250\" disk_gb_reserved\u003d\"0\" disk_ratio\u003d\"1\" disk_capacity\u003d\"250\" memory\u003d\"132\" memory_mb_reserved\u003d\"0\" memory_ratio\u003d\"1\"\u003e"},{"line_number":7,"context_line":"    \u003cInstance watcher_exclude\u003d\"False\" state\u003d\"active\" name\u003d\"INSTANCE_2\" uuid\u003d\"d020ef1f-dc19-4982-9383-087498bfde03\" vcpus\u003d\"12\" disk\u003d\"19\" disk_capacity\u003d\"20\" memory\u003d\"1\" metadata\u003d\u0027{\"optimize\": true,\"top\": \"floor\", \"nested\": {\"x\": \"y\"}}\u0027 project_id\u003d\"109F7909-0607-4712-B32C-5CC6D49D2F15\" created\u003d\"2026-02-07T18:55:13Z\"/\u003e"}],"source_content_type":"application/xml","patch_set":1,"id":"5e497e22_ee32a1e6","line":4,"range":{"start_line":4,"start_character":283,"end_line":4,"end_character":313},"in_reply_to":"dae9ca9a_861196e8","updated":"2026-05-18 06:57:37.000000000","message":"I will in next PS.","commit_id":"00c087b7873b99501104e45b1166263596e0184f"}]}
