)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"4affb276080c81d80f92f09a283d294c37e3cdab","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Use new agent API if available"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Falls back to vendor passthru on receiving 404 or 406."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Also fixes logging around lookup: log traceback on unexpected"},{"line_number":12,"context_line":"exceptions, log successful lookup and replace % with ,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"bacf61ea_2c1e3b70","line":9,"updated":"2016-08-04 14:14:14.000000000","message":"Now only 404 :)","commit_id":"23d189f8df46c45299a53028843ee841b2f10c95"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"44dd7daeba9e9f5851a1b879cd8cd118def0103a","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Use new agent API if available"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Falls back to vendor passthru on receiving 404 or 406."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Also fixes logging around lookup: log traceback on unexpected"},{"line_number":12,"context_line":"exceptions, log successful lookup and replace % with ,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"bacf61ea_2e9d8866","line":9,"updated":"2016-08-04 16:15:21.000000000","message":"Only 404","commit_id":"f98636793ee1981d1ddb220a6abd43410c7c52a2"}],"ironic_python_agent/agent.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"075e17d41c72a1528356ad1aab7d06695e0e8279","unresolved":false,"context_lines":[{"line_number":336,"context_line":"                starting_interval\u003dself.lookup_interval,"},{"line_number":337,"context_line":"                node_uuid\u003duuid)"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"            LOG.debug(\u0027Received lookup results: %s\u0027, content)"},{"line_number":340,"context_line":"            self.node \u003d content[\u0027node\u0027]"},{"line_number":341,"context_line":"            LOG.info(\u0027Lookup succeeded, node UUID is %s\u0027, self.node[\u0027uuid\u0027])"},{"line_number":342,"context_line":"            hardware.cache_node(self.node)"}],"source_content_type":"text/x-python","patch_set":15,"id":"bacf61ea_d393b359","line":339,"updated":"2016-08-04 15:59:50.000000000","message":"Do we really want to log everything? Including the full node object?","commit_id":"f98636793ee1981d1ddb220a6abd43410c7c52a2"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1ef901bba9f57df60b3ca2da9e698dc5f8f3d259","unresolved":false,"context_lines":[{"line_number":336,"context_line":"                starting_interval\u003dself.lookup_interval,"},{"line_number":337,"context_line":"                node_uuid\u003duuid)"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"            LOG.debug(\u0027Received lookup results: %s\u0027, content)"},{"line_number":340,"context_line":"            self.node \u003d content[\u0027node\u0027]"},{"line_number":341,"context_line":"            LOG.info(\u0027Lookup succeeded, node UUID is %s\u0027, self.node[\u0027uuid\u0027])"},{"line_number":342,"context_line":"            hardware.cache_node(self.node)"}],"source_content_type":"text/x-python","patch_set":15,"id":"bacf61ea_2e6aa881","line":339,"in_reply_to":"bacf61ea_d393b359","updated":"2016-08-04 16:11:20.000000000","message":"We do it several times already... we log parameters of every call, and node is often there - see the logs","commit_id":"f98636793ee1981d1ddb220a6abd43410c7c52a2"}],"ironic_python_agent/ironic_api_client.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"81198690be2e3fb8a2f58e64c1592c91bc822e79","unresolved":false,"context_lines":[{"line_number":28,"context_line":"class APIClient(object):"},{"line_number":29,"context_line":"    api_version \u003d \u0027v1\u0027"},{"line_number":30,"context_line":"    payload_version \u003d \u00272\u0027"},{"line_number":31,"context_line":"    new_api \u003d True"},{"line_number":32,"context_line":"    lookup_api \u003d \u0027/%s/lookup\u0027 % api_version"},{"line_number":33,"context_line":"    heartbeat_api \u003d \u0027/%s/heartbeat/{uuid}\u0027 % api_version"},{"line_number":34,"context_line":"    lookup_passthru \u003d (\u0027/%s/drivers/{driver}/vendor_passthru/lookup\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_0631abec","line":31,"updated":"2016-07-05 15:07:57.000000000","message":"As we hardcode it now, it means that we\u0027ll stop using vendor passthru on master completely, meaning that we won\u0027t test it anymore. WDYT about making it configurable until the old methods are deprecated?","commit_id":"a4899b7b5e01eff9e50cda8e0f4d242b2679eded"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"48dfc27c6786a5b6df80cf74d0782d2d32afaa78","unresolved":false,"context_lines":[{"line_number":28,"context_line":"class APIClient(object):"},{"line_number":29,"context_line":"    api_version \u003d \u0027v1\u0027"},{"line_number":30,"context_line":"    payload_version \u003d \u00272\u0027"},{"line_number":31,"context_line":"    new_api \u003d True"},{"line_number":32,"context_line":"    lookup_api \u003d \u0027/%s/lookup\u0027 % api_version"},{"line_number":33,"context_line":"    heartbeat_api \u003d \u0027/%s/heartbeat/{uuid}\u0027 % api_version"},{"line_number":34,"context_line":"    lookup_passthru \u003d (\u0027/%s/drivers/{driver}/vendor_passthru/lookup\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_c678432e","line":31,"in_reply_to":"1aa78d24_0631abec","updated":"2016-07-05 15:12:23.000000000","message":"even if it\u0027s configurable, unless we make separate jobs for it, we won\u0027t test it.","commit_id":"a4899b7b5e01eff9e50cda8e0f4d242b2679eded"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"d19098bff26426f338eeeee59a50e2b2407f6f05","unresolved":false,"context_lines":[{"line_number":28,"context_line":"class APIClient(object):"},{"line_number":29,"context_line":"    api_version \u003d \u0027v1\u0027"},{"line_number":30,"context_line":"    payload_version \u003d \u00272\u0027"},{"line_number":31,"context_line":"    new_api \u003d True"},{"line_number":32,"context_line":"    lookup_api \u003d \u0027/%s/lookup\u0027 % api_version"},{"line_number":33,"context_line":"    heartbeat_api \u003d \u0027/%s/heartbeat/{uuid}\u0027 % api_version"},{"line_number":34,"context_line":"    lookup_passthru \u003d (\u0027/%s/drivers/{driver}/vendor_passthru/lookup\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_82157e4a","line":31,"in_reply_to":"1aa78d24_66050f79","updated":"2016-07-11 13:56:54.000000000","message":"I think grenade will still test it, because we\u0027ll be using the Mitaka agent throughout the job. Since this won\u0027t have support for the new API, it will use vendor passthru.","commit_id":"a4899b7b5e01eff9e50cda8e0f4d242b2679eded"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"a8ed61d26150c9fa2cccb7cae6e427f70212f46c","unresolved":false,"context_lines":[{"line_number":28,"context_line":"class APIClient(object):"},{"line_number":29,"context_line":"    api_version \u003d \u0027v1\u0027"},{"line_number":30,"context_line":"    payload_version \u003d \u00272\u0027"},{"line_number":31,"context_line":"    new_api \u003d True"},{"line_number":32,"context_line":"    lookup_api \u003d \u0027/%s/lookup\u0027 % api_version"},{"line_number":33,"context_line":"    heartbeat_api \u003d \u0027/%s/heartbeat/{uuid}\u0027 % api_version"},{"line_number":34,"context_line":"    lookup_passthru \u003d (\u0027/%s/drivers/{driver}/vendor_passthru/lookup\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_66050f79","line":31,"in_reply_to":"1aa78d24_c678432e","updated":"2016-07-05 15:14:35.000000000","message":"Yes, I mean we can change one job to still use an old way, and switch others to new one.","commit_id":"a4899b7b5e01eff9e50cda8e0f4d242b2679eded"},{"author":{"_account_id":18893,"name":"Miles Gould","email":"mgould@redhat.com","username":"pozorvlak"},"change_message_id":"5d00469b19555c4b43babf2fbb9468bbdb31bcd3","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                                         \u0027logs for details.\u0027)"},{"line_number":109,"context_line":"        return node_content"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def _do_new_lookup(self, hardware_info, node_uuid):"},{"line_number":112,"context_line":"        args \u003d ["},{"line_number":113,"context_line":"            \u0027addresses\u003d%s\u0027 % \u0027,\u0027.join(iface.mac_address"},{"line_number":114,"context_line":"                                      for iface in hardware_info[\u0027interfaces\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_1c1c5311","line":111,"updated":"2016-07-05 16:51:47.000000000","message":"Calling things \"new X\" gets confusing later on when the new thing itself becomes old (for instance: New College, Oxford was founded in 1379, and is older than almost all the other Oxford colleges). Can we use more descriptive names, or version numbers?","commit_id":"a4899b7b5e01eff9e50cda8e0f4d242b2679eded"},{"author":{"_account_id":18893,"name":"Miles Gould","email":"mgould@redhat.com","username":"pozorvlak"},"change_message_id":"7aedf2ab6f02653e237bdc673434a6532317646d","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                        if self.new_api"},{"line_number":155,"context_line":"                        else self._do_old_lookup(hardware_info, node_uuid))"},{"line_number":156,"context_line":"        except Exception:"},{"line_number":157,"context_line":"            LOG.exception(\u0027Lookup failed\u0027)"},{"line_number":158,"context_line":"            return False"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        if response.status_code !\u003d requests.codes.OK:"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_26e280d5","line":157,"updated":"2016-06-30 17:18:55.000000000","message":"\"Lookup failed for node {uuid} with {hardware_info}\" would be more informative.","commit_id":"a4899b7b5e01eff9e50cda8e0f4d242b2679eded"},{"author":{"_account_id":18893,"name":"Miles Gould","email":"mgould@redhat.com","username":"pozorvlak"},"change_message_id":"5d00469b19555c4b43babf2fbb9468bbdb31bcd3","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                        if self.new_api"},{"line_number":155,"context_line":"                        else self._do_old_lookup(hardware_info, node_uuid))"},{"line_number":156,"context_line":"        except Exception:"},{"line_number":157,"context_line":"            LOG.exception(\u0027Lookup failed\u0027)"},{"line_number":158,"context_line":"            return False"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        if response.status_code !\u003d requests.codes.OK:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_3cd4af45","line":157,"in_reply_to":"3aaa91ec_146ca3ce","updated":"2016-07-05 16:51:47.000000000","message":"OK: is there anything small we could add to the log message to indicate how the error was triggered?","commit_id":"a4899b7b5e01eff9e50cda8e0f4d242b2679eded"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"6243e5138183b76019a4c9a87a27e363c7edcf0e","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                        if self.new_api"},{"line_number":155,"context_line":"                        else self._do_old_lookup(hardware_info, node_uuid))"},{"line_number":156,"context_line":"        except Exception:"},{"line_number":157,"context_line":"            LOG.exception(\u0027Lookup failed\u0027)"},{"line_number":158,"context_line":"            return False"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        if response.status_code !\u003d requests.codes.OK:"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_146ca3ce","line":157,"in_reply_to":"3aaa91ec_26e280d5","updated":"2016-07-01 10:58:08.000000000","message":"Knowing uuid is a rare case right now, and hardware_info is way too big to log it.","commit_id":"a4899b7b5e01eff9e50cda8e0f4d242b2679eded"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"4affb276080c81d80f92f09a283d294c37e3cdab","unresolved":false,"context_lines":[{"line_number":28,"context_line":"class APIClient(object):"},{"line_number":29,"context_line":"    api_version \u003d \u0027v1\u0027"},{"line_number":30,"context_line":"    payload_version \u003d \u00272\u0027"},{"line_number":31,"context_line":"    ramdisk_api \u003d True"},{"line_number":32,"context_line":"    lookup_api \u003d \u0027/%s/lookup\u0027 % api_version"},{"line_number":33,"context_line":"    heartbeat_api \u003d \u0027/%s/heartbeat/{uuid}\u0027 % api_version"},{"line_number":34,"context_line":"    lookup_passthru \u003d (\u0027/%s/drivers/{driver}/vendor_passthru/lookup\u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"bacf61ea_e7455c43","line":31,"updated":"2016-08-04 14:14:14.000000000","message":"Maybe call this use_ramdisk_api to make it more obvious? Not a blocker, though.","commit_id":"23d189f8df46c45299a53028843ee841b2f10c95"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"4affb276080c81d80f92f09a283d294c37e3cdab","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    lookup_passthru \u003d (\u0027/%s/drivers/{driver}/vendor_passthru/lookup\u0027"},{"line_number":35,"context_line":"                       % api_version)"},{"line_number":36,"context_line":"    heartbeat_passthru \u003d (\u0027/%s/nodes/{uuid}/vendor_passthru/heartbeat\u0027"},{"line_number":37,"context_line":"                          % api_version)"},{"line_number":38,"context_line":"    ramdisk_api_headers \u003d {\u0027X-OpenStack-Ironic-API-Version\u0027: \u00271.22\u0027}"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def __init__(self, api_url, driver_name):"}],"source_content_type":"text/x-python","patch_set":14,"id":"bacf61ea_8796203c","line":37,"updated":"2016-08-04 14:14:14.000000000","message":"Can we add a comment somewhere that we can drop all this in Ocata?","commit_id":"23d189f8df46c45299a53028843ee841b2f10c95"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"4affb276080c81d80f92f09a283d294c37e3cdab","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        ]"},{"line_number":117,"context_line":"        if node_uuid:"},{"line_number":118,"context_line":"            args.append(\u0027node_uuid\u003d%s\u0027 % node_uuid)"},{"line_number":119,"context_line":"        path \u003d \u0027%s?%s\u0027 % (self.lookup_api, \u0027\u0026\u0027.join(args))"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        response \u003d self._request(\u0027GET\u0027, path, headers\u003dself.ramdisk_api_headers)"},{"line_number":122,"context_line":"        if response.status_code in (requests.codes.NOT_FOUND,"}],"source_content_type":"text/x-python","patch_set":14,"id":"bacf61ea_276494b7","line":119,"updated":"2016-08-04 14:14:14.000000000","message":"can we use the params\u003d argument in requests.get here?\n\n    params \u003d {}\n    params[\u0027addresses\u0027] \u003d \u0027,\u0027.join(...)\n    if node_uuid:\n        params[\u0027node_uuid\u0027] \u003d node_uuid\n    self._request(\u0027GET\u0027, self.lookup_api, params\u003dparams, ...)","commit_id":"23d189f8df46c45299a53028843ee841b2f10c95"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"4affb276080c81d80f92f09a283d294c37e3cdab","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        response \u003d self._request(\u0027GET\u0027, path, headers\u003dself.ramdisk_api_headers)"},{"line_number":122,"context_line":"        if response.status_code in (requests.codes.NOT_FOUND,"},{"line_number":123,"context_line":"                                    requests.codes.NOT_ACCEPTABLE):"},{"line_number":124,"context_line":"            # Assume that new API is not available and retry"},{"line_number":125,"context_line":"            LOG.warning(\u0027New API is not available, falling back to old \u0027"},{"line_number":126,"context_line":"                        \u0027agent vendor passthru\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"bacf61ea_c773f87e","line":123,"updated":"2016-08-04 14:14:14.000000000","message":"This can just be NOT_FOUND","commit_id":"23d189f8df46c45299a53028843ee841b2f10c95"}],"releasenotes/notes/new-agent-api-afbe7391493749be.yaml":[{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"4affb276080c81d80f92f09a283d294c37e3cdab","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Use new Ironic agent API when it\u0027s available."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"bacf61ea_87a8e08d","line":3,"updated":"2016-08-04 14:14:14.000000000","message":"I\u0027d prefer to add the API version here","commit_id":"23d189f8df46c45299a53028843ee841b2f10c95"}]}
