)]}'
{".zuul.yaml":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6bf150465bc08b0409d95e493b750cb9d0233d5d","unresolved":false,"context_lines":[{"line_number":162,"context_line":"      - openstack/watcher"},{"line_number":163,"context_line":"      - openstack/watcher-tempest-plugin"},{"line_number":164,"context_line":"      - openstack/tempest"},{"line_number":165,"context_line":"      # TODO(mriedem): Remove this once https://review.opendev.org/659886/"},{"line_number":166,"context_line":"      # is merged and require the new minimum version of novaclient."},{"line_number":167,"context_line":"      - openstack/python-novaclient"},{"line_number":168,"context_line":"    vars:"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"bfb3d3c7_fb98c21b","line":165,"updated":"2019-05-23 21:19:59.000000000","message":"This is only temporary.","commit_id":"ef8c69c8c84ee0c2c53e0c78318cca32a986c75f"}],"watcher/common/nova_helper.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6bf150465bc08b0409d95e493b750cb9d0233d5d","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        :param servers: If true, include information about servers per"},{"line_number":56,"context_line":"            hypervisor"},{"line_number":57,"context_line":"        :param detailed: If true, include information about the compute service"},{"line_number":58,"context_line":"            per hypervisor (requires microversion 2.53)"},{"line_number":59,"context_line":"        \"\"\""},{"line_number":60,"context_line":"        return self.nova.hypervisors.search(node_name, servers\u003dservers,"},{"line_number":61,"context_line":"                                            detailed\u003ddetailed)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bfb3d3c7_3ba73a52","line":58,"range":{"start_line":58,"start_character":27,"end_line":58,"end_character":55},"updated":"2019-05-23 21:19:59.000000000","message":"As such we will want to rebase on top of https://review.opendev.org/661104 once that is merged.","commit_id":"ef8c69c8c84ee0c2c53e0c78318cca32a986c75f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8f66a618202189109f309ea77f0272534a6aea4e","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def get_compute_node_by_hostname(self, node_hostname):"},{"line_number":64,"context_line":"        \"\"\"Get compute node by hostname\"\"\""},{"line_number":65,"context_line":"        # TODO(mriedem): This method could be optimized if"},{"line_number":66,"context_line":"        # GET /os-hypervisors/detail had a host filter parameter."},{"line_number":67,"context_line":"        try:"},{"line_number":68,"context_line":"            hypervisors \u003d [hv for hv in self.get_compute_node_list()"},{"line_number":69,"context_line":"                           if hv.service[\u0027host\u0027] \u003d\u003d node_hostname]"}],"source_content_type":"text/x-python","patch_set":2,"id":"bfb3d3c7_5b254ec1","line":66,"range":{"start_line":65,"start_character":8,"end_line":66,"end_character":65},"updated":"2019-05-23 21:23:51.000000000","message":"Note that for non-ironic baremetal nodes, the compute service host should be the same as the hypervisor_hostname, so we could arguably just remove the call to get_compute_node_list. Does this code ever need to care about ironic?","commit_id":"ef8c69c8c84ee0c2c53e0c78318cca32a986c75f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fc913ad162f5cdb7ebe7acad9afaf4b1e85ce6d2","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def get_compute_node_by_hostname(self, node_hostname):"},{"line_number":64,"context_line":"        \"\"\"Get compute node by hostname\"\"\""},{"line_number":65,"context_line":"        # TODO(mriedem): This method could be optimized if"},{"line_number":66,"context_line":"        # GET /os-hypervisors/detail had a host filter parameter."},{"line_number":67,"context_line":"        try:"},{"line_number":68,"context_line":"            hypervisors \u003d [hv for hv in self.get_compute_node_list()"},{"line_number":69,"context_line":"                           if hv.service[\u0027host\u0027] \u003d\u003d node_hostname]"}],"source_content_type":"text/x-python","patch_set":2,"id":"bfb3d3c7_5e745c68","line":66,"range":{"start_line":65,"start_character":8,"end_line":66,"end_character":65},"in_reply_to":"bfb3d3c7_5b254ec1","updated":"2019-05-23 21:40:45.000000000","message":"http://lists.openstack.org/pipermail/openstack-discuss/2019-May/006581.html","commit_id":"ef8c69c8c84ee0c2c53e0c78318cca32a986c75f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4c8b4baa5958f3397dac94de5a5307490b1f02bd","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    def get_compute_node_list(self):"},{"line_number":49,"context_line":"        return self.nova.hypervisors.list()"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def get_compute_node_by_id(self, node_id):"},{"line_number":52,"context_line":"        \"\"\"Get compute node by ID (*not* UUID)\"\"\""},{"line_number":53,"context_line":"        # We need to pass an object with an \u0027id\u0027 attribute to make it work"},{"line_number":54,"context_line":"        return self.nova.hypervisors.get(utils.Struct(id\u003dnode_id))"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_c02cb003","side":"PARENT","line":51,"range":{"start_line":51,"start_character":8,"end_line":51,"end_character":30},"updated":"2019-05-28 20:19:05.000000000","message":"Might need to leave this since I think Dantalion has a patch that uses this in the grafana datasource series. I don\u0027t see any conflicts though.","commit_id":"855bfecf2f57786610d097a0c1b4ee4ee1f2a51c"},{"author":{"_account_id":29911,"name":"Dantali0n","email":"info@dantalion.nl","username":"Dantali0n"},"change_message_id":"b9e0eb64f75ebdd73b169ab34570ba3dd3843eee","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    def get_compute_node_list(self):"},{"line_number":49,"context_line":"        return self.nova.hypervisors.list()"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def get_compute_node_by_id(self, node_id):"},{"line_number":52,"context_line":"        \"\"\"Get compute node by ID (*not* UUID)\"\"\""},{"line_number":53,"context_line":"        # We need to pass an object with an \u0027id\u0027 attribute to make it work"},{"line_number":54,"context_line":"        return self.nova.hypervisors.get(utils.Struct(id\u003dnode_id))"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_f4fe4869","side":"PARENT","line":51,"range":{"start_line":51,"start_character":8,"end_line":51,"end_character":30},"in_reply_to":"bfb3d3c7_004648c1","updated":"2019-05-29 13:47:37.000000000","message":"It can be removed entirely, the Grafana datasource no longer requires to make any calls to nova and the information from the ClusterDataModel will be sufficient to retrieve metrics.","commit_id":"855bfecf2f57786610d097a0c1b4ee4ee1f2a51c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d893a02a27b54c83725fa73020d958f066bcc9a2","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    def get_compute_node_list(self):"},{"line_number":49,"context_line":"        return self.nova.hypervisors.list()"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def get_compute_node_by_id(self, node_id):"},{"line_number":52,"context_line":"        \"\"\"Get compute node by ID (*not* UUID)\"\"\""},{"line_number":53,"context_line":"        # We need to pass an object with an \u0027id\u0027 attribute to make it work"},{"line_number":54,"context_line":"        return self.nova.hypervisors.get(utils.Struct(id\u003dnode_id))"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_004648c1","side":"PARENT","line":51,"range":{"start_line":51,"start_character":8,"end_line":51,"end_character":30},"in_reply_to":"bfb3d3c7_c02cb003","updated":"2019-05-28 20:20:25.000000000","message":"https://review.opendev.org/#/c/661295/1/watcher/common/nova_helper.py@51","commit_id":"855bfecf2f57786610d097a0c1b4ee4ee1f2a51c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9d1b4aedb7cdf8cfff20ed88b2c1f80534b77f21","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    def get_compute_node_list(self):"},{"line_number":49,"context_line":"        return self.nova.hypervisors.list()"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def get_compute_node_by_id(self, node_id):"},{"line_number":52,"context_line":"        \"\"\"Get compute node by ID (*not* UUID)\"\"\""},{"line_number":53,"context_line":"        # We need to pass an object with an \u0027id\u0027 attribute to make it work"},{"line_number":54,"context_line":"        return self.nova.hypervisors.get(utils.Struct(id\u003dnode_id))"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_b6ea0dd5","side":"PARENT","line":51,"range":{"start_line":51,"start_character":8,"end_line":51,"end_character":30},"in_reply_to":"bfb3d3c7_f4fe4869","updated":"2019-05-29 19:41:38.000000000","message":"Great, thanks for confirming.","commit_id":"855bfecf2f57786610d097a0c1b4ee4ee1f2a51c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e5ed1ad7fb0cc4c1584ce9990f6e30cb50418f6d","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    def get_compute_node_by_name(self, node_name, servers\u003dFalse):"},{"line_number":57,"context_line":"        return self.nova.hypervisors.search(node_name, servers)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def get_compute_node_by_hostname(self, node_hostname):"},{"line_number":60,"context_line":"        \"\"\"Get compute node by hostname\"\"\""},{"line_number":61,"context_line":"        try:"},{"line_number":62,"context_line":"            hypervisors \u003d [hv for hv in self.get_compute_node_list()"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_2c7250ae","side":"PARENT","line":59,"range":{"start_line":59,"start_character":8,"end_line":59,"end_character":36},"updated":"2019-05-29 20:58:11.000000000","message":"We could probably make this backportable and still optimize if we did something like this:\n\n# search for the hypervisor by hypervisor_hostname without\n# details\nhypervisors \u003d self.get_compute_node_by_name(node_hostname)\n# we could get multiple back because it is a fuzzy match\n# so find the one whose service hostname matches the given\n# node_hostname\nfor hypervisor in hypervisors:\n    if hypervisor.service[\u0027host\u0027] \u003d\u003d node_hostname:\n        # return the hypervisor with details\n        return self.get_compute_node_by_id(hypervisor.id)\nraise exception.ComputeNodeNotFound(name\u003dnode_hostname)\n\nAnd then we could do https://review.opendev.org/#/c/662089/ which allows us to remove the call to get_compute_node_by_id (and depends on newer python-novaclient so not backportable).","commit_id":"855bfecf2f57786610d097a0c1b4ee4ee1f2a51c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5fbadbcb6ecf80d1f3e76c686ea45fe5dc6a0a82","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        \"\"\"Get compute node by hostname\"\"\""},{"line_number":61,"context_line":"        try:"},{"line_number":62,"context_line":"            hypervisors \u003d [hv for hv in self.get_compute_node_list()"},{"line_number":63,"context_line":"                           if hv.service[\u0027host\u0027] \u003d\u003d node_hostname]"},{"line_number":64,"context_line":"            if len(hypervisors) !\u003d 1:"},{"line_number":65,"context_line":"                # TODO(hidekazu)"},{"line_number":66,"context_line":"                # this may occur if VMware vCenter driver is used"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_7169fff6","side":"PARENT","line":63,"range":{"start_line":63,"start_character":27,"end_line":63,"end_character":65},"updated":"2019-05-29 20:47:47.000000000","message":"Technically we could just return here since we found our match and for a non-ironic node (which isn\u0027t supported here anyway) this is going to be 1:1 with the hypervisor. The downside is it\u0027s very inefficient to list all hypervisors with details just to find the one we want. We want to use search for that but as noted below that can still return more than 1 because of the fuzzy match.","commit_id":"855bfecf2f57786610d097a0c1b4ee4ee1f2a51c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5fbadbcb6ecf80d1f3e76c686ea45fe5dc6a0a82","unresolved":false,"context_lines":[{"line_number":66,"context_line":"                # this may occur if VMware vCenter driver is used"},{"line_number":67,"context_line":"                raise exception.ComputeNodeNotFound(name\u003dnode_hostname)"},{"line_number":68,"context_line":"            else:"},{"line_number":69,"context_line":"                compute_nodes \u003d self.nova.hypervisors.search("},{"line_number":70,"context_line":"                    hypervisors[0].hypervisor_hostname)"},{"line_number":71,"context_line":"                if len(compute_nodes) !\u003d 1:"},{"line_number":72,"context_line":"                    raise exception.ComputeNodeNotFound(name\u003dnode_hostname)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"                return self.get_compute_node_by_id(compute_nodes[0].id)"},{"line_number":75,"context_line":"        except Exception as exc:"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_31a14747","side":"PARENT","line":72,"range":{"start_line":69,"start_character":16,"end_line":72,"end_character":75},"updated":"2019-05-29 20:47:47.000000000","message":"Technically this is already a bug because of the fuzzy match on the server side:\n\nhttps://github.com/openstack/nova/blob/d4f58f5eb/nova/db/sqlalchemy/api.py#L676","commit_id":"855bfecf2f57786610d097a0c1b4ee4ee1f2a51c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9d1b4aedb7cdf8cfff20ed88b2c1f80534b77f21","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def get_compute_node_by_hostname(self, node_hostname):"},{"line_number":64,"context_line":"        \"\"\"Get compute node by hostname\"\"\""},{"line_number":65,"context_line":"        # TODO(mriedem): This method could be optimized if"},{"line_number":66,"context_line":"        # GET /os-hypervisors/detail had a host filter parameter."},{"line_number":67,"context_line":"        try:"},{"line_number":68,"context_line":"            hypervisors \u003d [hv for hv in self.get_compute_node_list()"},{"line_number":69,"context_line":"                           if hv.service[\u0027host\u0027] \u003d\u003d node_hostname]"},{"line_number":70,"context_line":"            if len(hypervisors) !\u003d 1:"},{"line_number":71,"context_line":"                # TODO(hidekazu)"},{"line_number":72,"context_line":"                # this may occur if ironic driver is used"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_b698cd74","line":69,"range":{"start_line":65,"start_character":8,"end_line":69,"end_character":66},"updated":"2019-05-29 19:41:38.000000000","message":"Per the ML discussion [1] I\u0027ll remove this in a follow up so it can be reverted if it causes problems.\n\n[1] http://lists.openstack.org/pipermail/openstack-discuss/2019-May/thread.html#6581","commit_id":"0394005b91102ce5afc467782180b6899d244dc4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ca1b1ff1dd565984e9476459e604c158d8fe612f","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def get_compute_node_by_hostname(self, node_hostname):"},{"line_number":64,"context_line":"        \"\"\"Get compute node by hostname\"\"\""},{"line_number":65,"context_line":"        # TODO(mriedem): This method could be optimized if"},{"line_number":66,"context_line":"        # GET /os-hypervisors/detail had a host filter parameter."},{"line_number":67,"context_line":"        try:"},{"line_number":68,"context_line":"            hypervisors \u003d [hv for hv in self.get_compute_node_list()"},{"line_number":69,"context_line":"                           if hv.service[\u0027host\u0027] \u003d\u003d node_hostname]"},{"line_number":70,"context_line":"            if len(hypervisors) !\u003d 1:"},{"line_number":71,"context_line":"                # TODO(hidekazu)"},{"line_number":72,"context_line":"                # this may occur if ironic driver is used"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_31a7070e","line":69,"range":{"start_line":65,"start_character":8,"end_line":69,"end_character":66},"in_reply_to":"bfb3d3c7_7637b500","updated":"2019-05-29 20:09:19.000000000","message":"Hmm, but....that would use GET /os-hypervisors/detail?hypervisor_hostname_pattern\u003dnode_hostname which could be a problem because hypervisor_hostname_pattern is a fuzzy match query:\n\nhttps://github.com/openstack/nova/blob/d4f58f5eb6e68d0348868efc45212b70feb0bde1/nova/db/sqlalchemy/api.py#L676\n\nWhich means if the service hostname is compute1 and there is a compute10, compute11, compute100 etc in the database we could get back more than one hypervisor which would fail length check, so we can\u0027t do that. I guess the TODO to filter on service hostname stands for now.","commit_id":"0394005b91102ce5afc467782180b6899d244dc4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"86c58600145ba6717cca709034742e50d94fbec6","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def get_compute_node_by_hostname(self, node_hostname):"},{"line_number":64,"context_line":"        \"\"\"Get compute node by hostname\"\"\""},{"line_number":65,"context_line":"        # TODO(mriedem): This method could be optimized if"},{"line_number":66,"context_line":"        # GET /os-hypervisors/detail had a host filter parameter."},{"line_number":67,"context_line":"        try:"},{"line_number":68,"context_line":"            hypervisors \u003d [hv for hv in self.get_compute_node_list()"},{"line_number":69,"context_line":"                           if hv.service[\u0027host\u0027] \u003d\u003d node_hostname]"},{"line_number":70,"context_line":"            if len(hypervisors) !\u003d 1:"},{"line_number":71,"context_line":"                # TODO(hidekazu)"},{"line_number":72,"context_line":"                # this may occur if ironic driver is used"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_7637b500","line":69,"range":{"start_line":65,"start_character":8,"end_line":69,"end_character":66},"in_reply_to":"bfb3d3c7_b698cd74","updated":"2019-05-29 20:00:10.000000000","message":"Actually it\u0027s probably easier to just remove this in this change since what we want is this:\n\ncompute_nodes \u003d self.get_compute_node_by_name(\n                    node_hostname, detailed\u003dTrue)\n\nAnd we need the novaclient bump for that anyway.","commit_id":"0394005b91102ce5afc467782180b6899d244dc4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"59c310f0cc3979a175123b622d47cacc80f96e11","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        return self.nova.hypervisors.search(node_name, servers\u003dservers,"},{"line_number":61,"context_line":"                                            detailed\u003ddetailed)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def get_compute_node_by_hostname(self, node_hostname):"},{"line_number":64,"context_line":"        \"\"\"Get compute node by hostname\"\"\""},{"line_number":65,"context_line":"        # TODO(mriedem): This method could be optimized if"},{"line_number":66,"context_line":"        # GET /os-hypervisors/detail had a host filter parameter."}],"source_content_type":"text/x-python","patch_set":4,"id":"9fb8cfa7_2e219db5","line":63,"updated":"2019-06-03 14:30:45.000000000","message":"I\u0027m still considering if we should do what I suggested in PS3:\n\nhttps://review.opendev.org/#/c/661121/3/watcher/common/nova_helper.py@a59\n\nWe can still optimize and reduce calls in a backward compatible (and backportable) way by searching for hypervisors with the maching hypervisor_hostname first, and if there are multiple (because of the fuzzy match) we then filter client-side on the service[\u0027host\u0027] field. We\u0027d still have to call get_compute_node_by_name to get the details until the next patch in the series, but at least that way we\u0027d (1) fix a bug due to the fuzzy match on self.nova.hypervisors.search returning multiple and (2) optimize the code to avoid the get_compute_node_list call. I think I\u0027ll do that. The next change in the series should be able to remain unchanged.","commit_id":"3091b587518d21c8c2835408389c935d4df29905"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"02d3588d47daa36493e107f75562a25d422edeab","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        return self.nova.hypervisors.search(node_name, servers\u003dservers,"},{"line_number":61,"context_line":"                                            detailed\u003ddetailed)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def get_compute_node_by_hostname(self, node_hostname):"},{"line_number":64,"context_line":"        \"\"\"Get compute node by hostname\"\"\""},{"line_number":65,"context_line":"        # TODO(mriedem): This method could be optimized if"},{"line_number":66,"context_line":"        # GET /os-hypervisors/detail had a host filter parameter."}],"source_content_type":"text/x-python","patch_set":4,"id":"9fb8cfa7_a274c19a","line":63,"in_reply_to":"9fb8cfa7_2e219db5","updated":"2019-06-03 14:37:45.000000000","message":"Tracking with bug 1831464.","commit_id":"3091b587518d21c8c2835408389c935d4df29905"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"59e484952b2e6060ca10328d0f069a863cfa57ff","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        return self.nova.hypervisors.search(node_name, servers\u003dservers,"},{"line_number":61,"context_line":"                                            detailed\u003ddetailed)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def get_compute_node_by_hostname(self, node_hostname):"},{"line_number":64,"context_line":"        \"\"\"Get compute node by hostname\"\"\""},{"line_number":65,"context_line":"        # TODO(mriedem): This method could be optimized if"},{"line_number":66,"context_line":"        # GET /os-hypervisors/detail had a host filter parameter."}],"source_content_type":"text/x-python","patch_set":4,"id":"9fb8cfa7_3b3b18d2","line":63,"in_reply_to":"9fb8cfa7_a274c19a","updated":"2019-06-03 16:29:32.000000000","message":"\u003e We can still optimize and reduce calls in a backward compatible (and backportable) way by searching for hypervisors with the maching hypervisor_hostname first, and if there are multiple (because of the fuzzy match) we then filter client-side on the service[\u0027host\u0027] field.\n\nNevermind that won\u0027t work because without the dependent novaclient changes to list hypervisors with details and search on the hypervisor_hostname, we won\u0027t get back the compute service host information to be able to filter client-side. So I\u0027ll just keep this as-is and assume we don\u0027t need to backport it.","commit_id":"3091b587518d21c8c2835408389c935d4df29905"},{"author":{"_account_id":29911,"name":"Dantali0n","email":"info@dantalion.nl","username":"Dantali0n"},"change_message_id":"99027c7296d1688aaa51941d767e0c570fab325c","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        :param detailed: If true, include information about the compute service"},{"line_number":58,"context_line":"            per hypervisor (requires microversion 2.53)"},{"line_number":59,"context_line":"        \"\"\""},{"line_number":60,"context_line":"        return self.nova.hypervisors.search(node_name, servers\u003dservers,"},{"line_number":61,"context_line":"                                            detailed\u003ddetailed)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def get_compute_node_by_hostname(self, node_hostname):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fb8cfa7_0692214c","line":60,"updated":"2019-06-24 09:21:27.000000000","message":"I do not know how we missed this but this does not work because hypervisors.search is deprecated with microversion 2.53 https://developer.openstack.org/api-ref/compute/?expanded\u003dsearch-hypervisor-detail. I just tried this in our QA environment and it results in: search() got an unexpected keyword argument \u0027detailed\u0027","commit_id":"3f76f9cfdb6a1ce4dd120fa3de6c7fb05761102a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d2e1e848a0a64493c7ea8fc9f91e3772057aa0b2","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        :param detailed: If true, include information about the compute service"},{"line_number":58,"context_line":"            per hypervisor (requires microversion 2.53)"},{"line_number":59,"context_line":"        \"\"\""},{"line_number":60,"context_line":"        return self.nova.hypervisors.search(node_name, servers\u003dservers,"},{"line_number":61,"context_line":"                                            detailed\u003ddetailed)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def get_compute_node_by_hostname(self, node_hostname):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fb8cfa7_dac61617","line":60,"in_reply_to":"9fb8cfa7_0692214c","updated":"2019-06-24 13:31:10.000000000","message":"Do you have the minimum required python-novaclient version per the depends-on in the commit message?\n\nhttps://review.opendev.org/#/c/661785/","commit_id":"3f76f9cfdb6a1ce4dd120fa3de6c7fb05761102a"}]}
