)]}'
{"cyborg/api/hooks.py":[{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"b9e64faf1e04b8fc2e2f769cfe978e2264bcce4c","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from oslo_config import cfg"},{"line_number":17,"context_line":"from oslo_serialization import jsonutils"},{"line_number":18,"context_line":"from pecan import hooks"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from cyborg.common import exception"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_45e33aa5","line":17,"updated":"2019-10-24 19:10:13.000000000","message":"PS3 was failing, while PS6 is working. The changes [1] seem like black magic to me, TBH. We should get further review of this part.\n\n\n[1] https://review.opendev.org/#/c/685542/3..6/cyborg/api/hooks.py","commit_id":"9fb411e860232d81252289a3ddca5d5b1297b019"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a1ec2aad12818a52cad685174e43fd6cbba6b7f2","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from oslo_config import cfg"},{"line_number":17,"context_line":"from oslo_serialization import jsonutils"},{"line_number":18,"context_line":"from pecan import hooks"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from cyborg.common import exception"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_9107301e","line":17,"in_reply_to":"3fa7e38b_45e33aa5","updated":"2019-10-24 21:53:13.000000000","message":"I agree this could use review by experts... but I\u0027m not sure there are many of those left.\n\nI think part of what\u0027s going on here has to do with the fact that, when not using api_servers, we\u0027re going to the service catalog and/or keystoneauth1 to look up endpoints. And glance (like nova, until [1] lands) incorrectly requires authentication to access the version document under /v2, which is ultimately where that endpoint comes from. And until [2] (which recently merged and was released in 3.18.0, so you could depend on it and maybe simplify some of the stuff below) ksa only tried to do version discovery unauthenticated. That could have caused the guts of get_{ksa|sdk}_adapter to blow up.\n\nSo what this might be doing is overriding the service catalog so the discovery doesn\u0027t have to go all the way to the glance API.\n\nThe auth plugin initialization looks like it might have simply been modernized to exploit functionality that\u0027s been consolidated into keystonemiddleware. I\u0027m not sure if there\u0027s a functional difference; perhaps a keystoner would be able to chime in there.\n\n[1] https://review.opendev.org/#/c/685181/\n[2] https://review.opendev.org/#/c/685042/","commit_id":"9fb411e860232d81252289a3ddca5d5b1297b019"}],"cyborg/common/utils.py":[{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"b9e64faf1e04b8fc2e2f769cfe978e2264bcce4c","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\"Utilities and helper functions.\"\"\""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from concurrent.futures import ThreadPoolExecutor"},{"line_number":19,"context_line":"from functools import wraps"},{"line_number":20,"context_line":"import six"},{"line_number":21,"context_line":"import time"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_654996b5","line":18,"updated":"2019-10-24 19:10:13.000000000","message":"A little confusing: the changes in this file were already merged [1]. Why is this showing as a diff?\n\n[1] https://review.opendev.org/#/c/681005/26/cyborg/common/utils.py","commit_id":"9fb411e860232d81252289a3ddca5d5b1297b019"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"31aa26f1044a95532f98465db66f7ba707412969","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\"Utilities and helper functions.\"\"\""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from concurrent.futures import ThreadPoolExecutor"},{"line_number":19,"context_line":"from functools import wraps"},{"line_number":20,"context_line":"import six"},{"line_number":21,"context_line":"import time"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_7155bf4f","line":18,"in_reply_to":"3fa7e38b_654996b5","updated":"2019-10-26 02:39:02.000000000","message":"Because after ps3, I executed rebase, so when you compare with ps3, will found that other patch content is included, which is actually the contents of other patches.","commit_id":"9fb411e860232d81252289a3ddca5d5b1297b019"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a1ec2aad12818a52cad685174e43fd6cbba6b7f2","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\"Utilities and helper functions.\"\"\""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from concurrent.futures import ThreadPoolExecutor"},{"line_number":19,"context_line":"from functools import wraps"},{"line_number":20,"context_line":"import six"},{"line_number":21,"context_line":"import time"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_c8fe616a","line":18,"in_reply_to":"3fa7e38b_654996b5","updated":"2019-10-24 21:53:13.000000000","message":"If you look at the diff from base you\u0027ll see just the strtime method was added. If you look at the diff from a different PS, like 1..6, you\u0027ll also be seeing the delta from the rebase included in PS2, which picks up the patch you referenced.\n\nIt\u0027s kind of a pain, and a limitation of the current version of gerrit, that you can\u0027t see the diff-of-diffs (I think that\u0027s a four-pane view). I think that\u0027s available in a newer version of gerrit, but we don\u0027t have that yet.","commit_id":"9fb411e860232d81252289a3ddca5d5b1297b019"}],"cyborg/image/glance.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"6cadbfe789b263e73002013f08cfa9b3b8300284","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        # We can\u0027t use glanceclient.common.utils.strip_version because"},{"line_number":122,"context_line":"        # of bug 1748009."},{"line_number":123,"context_line":"        endpoint \u003d re.sub(r\u0027/v\\d+(\\.\\d+)?/?$\u0027, \u0027/\u0027, endpoint)"},{"line_number":124,"context_line":"    api_servers \u003d [endpoint]"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    return itertools.cycle(api_servers)"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_ba5bb5f3","line":124,"range":{"start_line":124,"start_character":19,"end_line":124,"end_character":27},"updated":"2019-09-29 03:32:38.000000000","message":"Since there\u0027s only ever one of these, you could do some refactoring of the caller to not expect an iterable and just return the endpoint.\n\nBut that can be done later. The important thing is having gotten rid of the conf option.","commit_id":"cf2184a673ed99ecb8037e3f651b5a9875ee41bd"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"d07c24187b7578d57f286fbbdab245d5a0bed879","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        # We can\u0027t use glanceclient.common.utils.strip_version because"},{"line_number":122,"context_line":"        # of bug 1748009."},{"line_number":123,"context_line":"        endpoint \u003d re.sub(r\u0027/v\\d+(\\.\\d+)?/?$\u0027, \u0027/\u0027, endpoint)"},{"line_number":124,"context_line":"    api_servers \u003d [endpoint]"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    return itertools.cycle(api_servers)"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_fa512d37","line":124,"range":{"start_line":124,"start_character":19,"end_line":124,"end_character":27},"in_reply_to":"3fa7e38b_5ab40180","updated":"2019-09-29 07:35:42.000000000","message":"Agree.","commit_id":"cf2184a673ed99ecb8037e3f651b5a9875ee41bd"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"274e905efd2b67eb1f7e26d33bf6df9a0fb8ce4b","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        # We can\u0027t use glanceclient.common.utils.strip_version because"},{"line_number":122,"context_line":"        # of bug 1748009."},{"line_number":123,"context_line":"        endpoint \u003d re.sub(r\u0027/v\\d+(\\.\\d+)?/?$\u0027, \u0027/\u0027, endpoint)"},{"line_number":124,"context_line":"    api_servers \u003d [endpoint]"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    return itertools.cycle(api_servers)"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_5ab40180","line":124,"range":{"start_line":124,"start_character":19,"end_line":124,"end_character":27},"in_reply_to":"3fa7e38b_9a0d99e9","updated":"2019-09-29 07:21:51.000000000","message":"Actually in U this all goes away when you rip out glanceclient and cut over to sdk.","commit_id":"cf2184a673ed99ecb8037e3f651b5a9875ee41bd"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"6fa67e7bb2fdeb871ae376409f69b4935cda342e","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        # We can\u0027t use glanceclient.common.utils.strip_version because"},{"line_number":122,"context_line":"        # of bug 1748009."},{"line_number":123,"context_line":"        endpoint \u003d re.sub(r\u0027/v\\d+(\\.\\d+)?/?$\u0027, \u0027/\u0027, endpoint)"},{"line_number":124,"context_line":"    api_servers \u003d [endpoint]"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    return itertools.cycle(api_servers)"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_9a0d99e9","line":124,"range":{"start_line":124,"start_character":19,"end_line":124,"end_character":27},"in_reply_to":"3fa7e38b_ba5bb5f3","updated":"2019-09-29 03:45:27.000000000","message":"Will do it in U. Thanks.","commit_id":"cf2184a673ed99ecb8037e3f651b5a9875ee41bd"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"1fd8a516e9e1a325bd46e80b42d3a17c76d08009","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"def get_api_servers(context):"},{"line_number":109,"context_line":"    \"\"\"Shuffle a list of service endpoints and return an iterator that will"},{"line_number":110,"context_line":"    cycle through the list, looping around to the beginning if necessary."},{"line_number":111,"context_line":"    \"\"\""},{"line_number":112,"context_line":"    sess, auth \u003d _session_and_auth(context)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_476ae919","line":109,"range":{"start_line":109,"start_character":7,"end_line":109,"end_character":42},"updated":"2019-09-29 22:16:56.000000000","message":"Minor: We don\u0027t do this shuffle below.","commit_id":"3a83df0c0f3d069b0343fab62e6e0a8246c53a71"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"62401bb32797bc548fcd48b701fa2c5894717d1b","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"def get_api_servers(context):"},{"line_number":109,"context_line":"    \"\"\"Shuffle a list of service endpoints and return an iterator that will"},{"line_number":110,"context_line":"    cycle through the list, looping around to the beginning if necessary."},{"line_number":111,"context_line":"    \"\"\""},{"line_number":112,"context_line":"    sess, auth \u003d _session_and_auth(context)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_002ff787","line":109,"range":{"start_line":109,"start_character":7,"end_line":109,"end_character":42},"in_reply_to":"3fa7e38b_476ae919","updated":"2019-09-30 07:08:39.000000000","message":"Done","commit_id":"3a83df0c0f3d069b0343fab62e6e0a8246c53a71"}]}
