)]}'
{"bindep.txt":[{"author":{"_account_id":6547,"name":"Andreas Jaeger","email":"jaegerandi@gmail.com","username":"jaegerandi"},"change_message_id":"9f6c14c463e519511dd70e6363306e88ad58dafc","unresolved":false,"context_lines":[{"line_number":10,"context_line":"latexmk [pdf-docs]"},{"line_number":11,"context_line":"fonts-freefont-otf [pdf-docs]"},{"line_number":12,"context_line":"texlive-xetex [pdf-docs]"},{"line_number":13,"context_line":"graphviz [doc]"}],"source_content_type":"text/plain","patch_set":14,"id":"3f65232a_20ef1185","line":13,"updated":"2020-10-26 12:01:44.000000000","message":"MIssing newline, let me add","commit_id":"ea36b35b01536f85f673fb3ab96b1f0a632868de"}],"doc/requirements.txt":[{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"ba2300465511927055e57d5da7e377ce99ff67c2","unresolved":false,"context_lines":[{"line_number":5,"context_line":"sphinx\u003e\u003d2.0.0,!\u003d2.1.0 # BSD"},{"line_number":6,"context_line":"sphinxcontrib-httpdomain\u003e\u003d1.3.0 # BSD"},{"line_number":7,"context_line":"sphinxcontrib-pecanwsme\u003e\u003d0.2 # Apache-2.0"},{"line_number":8,"context_line":"sphinxcontrib-actdiag\u003e\u003d0.8.5 # BSD"},{"line_number":9,"context_line":"sphinxcontrib-seqdiag\u003e\u003d0.8.4 # BSD"},{"line_number":10,"context_line":"sphinxcontrib-svg2pdfconverter\u003e\u003d0.1.0 # BSD"},{"line_number":11,"context_line":"reno\u003e\u003d3.1.0 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":11,"id":"3f65232a_997dc91e","line":8,"range":{"start_line":8,"start_character":0,"end_line":8,"end_character":34},"updated":"2020-10-24 05:39:38.000000000","message":"It\u0027s not due to lack of this package, the error is:\n\n2020-10-24 05:32:26.649127 | ubuntu-focal | Warning, treated as error:\n2020-10-24 05:32:26.649138 | ubuntu-focal | dot command \u0027dot\u0027 cannot be run (needed for graphviz output), check the graphviz_dot setting\n2020-10-24 05:32:26.894665 | ubuntu-focal | ERROR: InvocationError for command /home/zuul/src/opendev.org/openstack/cyborg/.tox/docs/bin/sphinx-build -W -b html doc/source doc/build/html (exited with code 2)","commit_id":"c564a19ef31270942ddffc0d59efafbe74281562"}],"doc/source/contributor/microversions.rst":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"fad9edcfeb2f0e4cdac42cdb586c48afaa057223","unresolved":false,"context_lines":[{"line_number":22,"context_line":"This value is currently ``2.0`` and is expected to remain so for quite a"},{"line_number":23,"context_line":"long time."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":".. TODO:: Need to add the ``latest`` behave as if maximum version was"},{"line_number":26,"context_line":"          specified."},{"line_number":27,"context_line":"   There is a special value ``latest`` which can be specified, which will"},{"line_number":28,"context_line":"   allow a client to always receive the most recent version of API"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f560f44_82b8a4c8","line":25,"updated":"2020-07-29 11:03:27.000000000","message":"docs: Unknown directive type \"TODO\".","commit_id":"9945475f9d11ea0a07b045af55a8a755767fda9f"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"1cbeabda0d03168f0b5c834cab366a7d89541a75","unresolved":false,"context_lines":[{"line_number":215,"context_line":"In Code"},{"line_number":216,"context_line":"-------"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"In ``nova/api/openstack/wsgi.py`` we define an ``@api_version`` decorator"},{"line_number":219,"context_line":"which is intended to be used on top-level Controller methods. It is"},{"line_number":220,"context_line":"not appropriate for lower-level methods. Some examples::x"},{"line_number":221,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f560f44_6292b04d","line":218,"range":{"start_line":218,"start_character":50,"end_line":218,"end_character":61},"updated":"2020-07-29 11:02:31.000000000","message":"Cyborg lacks a decorator to apply microversion detection","commit_id":"9945475f9d11ea0a07b045af55a8a755767fda9f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"3e8db76ab42c5b4c8f4e6cb6f908a226d018915f","unresolved":false,"context_lines":[{"line_number":27,"context_line":"   responses from the server."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"  .. warning:: The ``latest`` value is mostly meant for integration testing and"},{"line_number":30,"context_line":"  would be dangerous to rely on in client code since Cyborg microversions are"},{"line_number":31,"context_line":"  not following semver and therefore backward compatibility is not guaranteed."},{"line_number":32,"context_line":"  Clients, like python-cyborgclient, should always require a specific"},{"line_number":33,"context_line":"  microversion but limit what is acceptable to the version range that it"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9f560f44_05f77e8e","line":30,"updated":"2020-09-17 03:17:18.000000000","message":"docs: Explicit markup ends without a blank line; unexpected unindent.","commit_id":"231ac048f5f4db06d2551afb327a366be5f18a67"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"526dfe54ac8657a2d20add088ac20ec0b2023bb3","unresolved":false,"context_lines":[{"line_number":27,"context_line":"   responses from the server."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"  .. warning:: The ``latest`` value is mostly meant for integration testing and"},{"line_number":30,"context_line":"  would be dangerous to rely on in client code since Cyborg microversions are"},{"line_number":31,"context_line":"  not following sever and therefore backward compatibility is not guaranteed."},{"line_number":32,"context_line":"  Clients, like python-cyborgclient, should always require a specific"},{"line_number":33,"context_line":"  microversion but limit what is acceptable to the version range that it"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_bc281b98","line":30,"updated":"2020-10-08 03:30:31.000000000","message":"docs: Explicit markup ends without a blank line; unexpected unindent.","commit_id":"6f5b9318d09a3078b7c0e370b28120a62e837174"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d6728c0fe0566f6542ea286ac58d2ee3127fb1a7","unresolved":false,"context_lines":[{"line_number":108,"context_line":"we need a microversion\"."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":""},{"line_number":111,"context_line":".. graphviz::"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"   digraph states {"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f560f44_6f021940","line":111,"updated":"2020-10-12 03:13:18.000000000","message":"docs: Unknown directive type \"graphviz\".","commit_id":"7a06ca13d3541993593dd5862279057638efd7c2"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ad1a4b7671ee927dccad46de6750b1e40059790c","unresolved":false,"context_lines":[{"line_number":276,"context_line":"  ``doc/api_samples/versions/versions-get-resp.json`` and"},{"line_number":277,"context_line":"  ``doc/api_samples/versions/v21-version-get-resp.json``."},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"* Make a new commit to python-cyborgclient and update corresponding"},{"line_number":280,"context_line":"  files to enable the newly added microversion API."},{"line_number":281,"context_line":"  See :python-cyborgclient-doc:`Adding support for a new microversion"},{"line_number":282,"context_line":"  \u003ccontributor/microversions\u003e` in python-cyborgclient for more details."}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f65232a_ac91779c","line":279,"updated":"2020-10-23 02:59:29.000000000","message":"docs: Unknown interpreted text role \"python-cyborgclient-doc\".","commit_id":"5a2abca66fb103648b7e025f6a0920732eaae36f"},{"author":{"_account_id":24872,"name":"YumengBao","email":"yumeng_bao@yahoo.com","username":"Yumeng_Bao"},"change_message_id":"8f67c30b392359d6d53412f148aff90d4a1d150a","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    OpenStack-API-Version: accelerator 2.0"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"If a user makes a request without specifying a version, they will get"},{"line_number":20,"context_line":"the ``2.0`` as the default version (it is defined in"},{"line_number":21,"context_line":"``cyborg/api/controllers/v2/versions.py``, using ``_MIN_VERSION_STRING``)."},{"line_number":22,"context_line":"This value is currently ``2.0`` and is expected to remain so for quite a"},{"line_number":23,"context_line":"long time."},{"line_number":24,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"1f621f24_b58f8e73","line":21,"range":{"start_line":19,"start_character":56,"end_line":21,"end_character":74},"updated":"2020-11-10 02:14:40.000000000","message":"Can we say the following way to indicate more clearly we use min_version as the default version? \nexample: If a user makes a request without specifying a version, they will get the _MIN_VERSION_STRING(defined in ``cyborg/api/controllers/v2/versions.py``) as the default version. This value is currently ``2.0`` and is expected to remain so for quite a\nlong time.","commit_id":"b8eb8d2aa4bff62a89bde323d9558043ab794c78"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"c8b805cd5a2afab5990c6c7e63c817b77bbb92b9","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    OpenStack-API-Version: accelerator 2.0"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"If a user makes a request without specifying a version, they will get"},{"line_number":20,"context_line":"the ``2.0`` as the default version (it is defined in"},{"line_number":21,"context_line":"``cyborg/api/controllers/v2/versions.py``, using ``_MIN_VERSION_STRING``)."},{"line_number":22,"context_line":"This value is currently ``2.0`` and is expected to remain so for quite a"},{"line_number":23,"context_line":"long time."},{"line_number":24,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"1f621f24_8d25195f","line":21,"range":{"start_line":19,"start_character":56,"end_line":21,"end_character":74},"in_reply_to":"1f621f24_b58f8e73","updated":"2020-11-10 11:24:54.000000000","message":"Done","commit_id":"b8eb8d2aa4bff62a89bde323d9558043ab794c78"},{"author":{"_account_id":24872,"name":"YumengBao","email":"yumeng_bao@yahoo.com","username":"Yumeng_Bao"},"change_message_id":"8f67c30b392359d6d53412f148aff90d4a1d150a","unresolved":false,"context_lines":[{"line_number":23,"context_line":"long time."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"There is a special value ``latest`` which can be specified, which will"},{"line_number":26,"context_line":"allow a client to always receive the most recent version of API"},{"line_number":27,"context_line":"responses from the server."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":".. warning::"}],"source_content_type":"text/x-rst","patch_set":16,"id":"1f621f24_15e002fa","line":26,"range":{"start_line":26,"start_character":33,"end_line":26,"end_character":56},"updated":"2020-11-10 02:14:40.000000000","message":"I would also like to suggest pointing out the specific release here. eg. receive _MAX_VERSION_STRING (defined in\n``cyborg/api/controllers/v2/versions.py``) as the most recent version.","commit_id":"b8eb8d2aa4bff62a89bde323d9558043ab794c78"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"c8b805cd5a2afab5990c6c7e63c817b77bbb92b9","unresolved":false,"context_lines":[{"line_number":23,"context_line":"long time."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"There is a special value ``latest`` which can be specified, which will"},{"line_number":26,"context_line":"allow a client to always receive the most recent version of API"},{"line_number":27,"context_line":"responses from the server."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":".. warning::"}],"source_content_type":"text/x-rst","patch_set":16,"id":"1f621f24_2d34c592","line":26,"range":{"start_line":26,"start_character":33,"end_line":26,"end_character":56},"in_reply_to":"1f621f24_15e002fa","updated":"2020-11-10 11:24:54.000000000","message":"Done","commit_id":"b8eb8d2aa4bff62a89bde323d9558043ab794c78"},{"author":{"_account_id":24872,"name":"YumengBao","email":"yumeng_bao@yahoo.com","username":"Yumeng_Bao"},"change_message_id":"8f67c30b392359d6d53412f148aff90d4a1d150a","unresolved":false,"context_lines":[{"line_number":36,"context_line":"  that it understands at the time."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"For full details please read the `Ussuri spec for microversions"},{"line_number":39,"context_line":"\u003chttps://specs.openstack.org/openstack/cyborg-specs/specs/ussuri/approved/cyborg-api.html\u003e`_"},{"line_number":40,"context_line":"and `Microversion Specification"},{"line_number":41,"context_line":"\u003chttp://specs.openstack.org/openstack/api-wg/guidelines/microversion_specification.html\u003e`_."},{"line_number":42,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"1f621f24_f5bd86d8","line":39,"range":{"start_line":39,"start_character":1,"end_line":39,"end_character":89},"updated":"2020-11-10 02:14:40.000000000","message":"not a valid link","commit_id":"b8eb8d2aa4bff62a89bde323d9558043ab794c78"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"c8b805cd5a2afab5990c6c7e63c817b77bbb92b9","unresolved":false,"context_lines":[{"line_number":36,"context_line":"  that it understands at the time."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"For full details please read the `Ussuri spec for microversions"},{"line_number":39,"context_line":"\u003chttps://specs.openstack.org/openstack/cyborg-specs/specs/ussuri/approved/cyborg-api.html\u003e`_"},{"line_number":40,"context_line":"and `Microversion Specification"},{"line_number":41,"context_line":"\u003chttp://specs.openstack.org/openstack/api-wg/guidelines/microversion_specification.html\u003e`_."},{"line_number":42,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"1f621f24_4d2f813e","line":39,"range":{"start_line":39,"start_character":1,"end_line":39,"end_character":89},"in_reply_to":"1f621f24_f5bd86d8","updated":"2020-11-10 11:24:54.000000000","message":"Done","commit_id":"b8eb8d2aa4bff62a89bde323d9558043ab794c78"},{"author":{"_account_id":24872,"name":"YumengBao","email":"yumeng_bao@yahoo.com","username":"Yumeng_Bao"},"change_message_id":"8f67c30b392359d6d53412f148aff90d4a1d150a","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"  - changing a status code on a particular response."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    Example: changing the return code of an API from 501 to 400."},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"      .. note:: Fixing a bug so that a 400+ code is returned rather than a"},{"line_number":98,"context_line":"          500 or 503 does not require a microversion change. It\u0027s assumed"},{"line_number":99,"context_line":"          that clients are not expected to handle a 500 or 503 response and"},{"line_number":100,"context_line":"          therefore should not need to opt-in to microversion changes that"},{"line_number":101,"context_line":"          fixes a 500 or 503 response from happening."}],"source_content_type":"text/x-rst","patch_set":16,"id":"1f621f24_4d6b06f0","line":98,"range":{"start_line":95,"start_character":0,"end_line":98,"end_character":60},"updated":"2020-11-10 02:14:40.000000000","message":"I was quite confused about these two cases. Can you give two simple examples to illustrate their differences? such as: for POST accelerator_requests/{ID} request, change return code from 501 to 400 needs a microversion, but change from 401 to 402 does not need a microversion. and then give the reason why we do so","commit_id":"b8eb8d2aa4bff62a89bde323d9558043ab794c78"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"c8b805cd5a2afab5990c6c7e63c817b77bbb92b9","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"  - changing a status code on a particular response."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    Example: changing the return code of an API from 501 to 400."},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"      .. note:: Fixing a bug so that a 400+ code is returned rather than a"},{"line_number":98,"context_line":"          500 or 503 does not require a microversion change. It\u0027s assumed"},{"line_number":99,"context_line":"          that clients are not expected to handle a 500 or 503 response and"},{"line_number":100,"context_line":"          therefore should not need to opt-in to microversion changes that"},{"line_number":101,"context_line":"          fixes a 500 or 503 response from happening."}],"source_content_type":"text/x-rst","patch_set":16,"id":"1f621f24_cdf9d1c8","line":98,"range":{"start_line":95,"start_character":0,"end_line":98,"end_character":60},"in_reply_to":"1f621f24_4d6b06f0","updated":"2020-11-10 11:24:54.000000000","message":"this comes from nova. pls see commit:ec17b727e9a7658fa375975d6932d8539a158a8a","commit_id":"b8eb8d2aa4bff62a89bde323d9558043ab794c78"},{"author":{"_account_id":24872,"name":"YumengBao","email":"yumeng_bao@yahoo.com","username":"Yumeng_Bao"},"change_message_id":"8f67c30b392359d6d53412f148aff90d4a1d150a","unresolved":false,"context_lines":[{"line_number":219,"context_line":"Cyborg API version."},{"line_number":220,"context_line":"we define constant ``MINOR_0_INITIAL_VERSION`` as ``0`` to be"},{"line_number":221,"context_line":"used as the initial value of microversion."},{"line_number":222,"context_line":"we define other version like ``MINOR_1_PROJECT_ID`` as ``1`` means"},{"line_number":223,"context_line":"the microversion of project_id is 1."},{"line_number":224,"context_line":"then we define ``MINOR_MAX_VERSION`` to the max version, which equals to"},{"line_number":225,"context_line":"latest."},{"line_number":226,"context_line":"we define ``_MIN_VERSION_STRING`` with the combination of ``BASE_VERSION``"}],"source_content_type":"text/x-rst","patch_set":16,"id":"1f621f24_6d5ec244","line":223,"range":{"start_line":222,"start_character":0,"end_line":223,"end_character":36},"updated":"2020-11-10 02:14:40.000000000","message":"I think we should state this as a very good microversion example: adding a new attribute in the API method, rather than sate too simple like now. pls refer to https://docs.openstack.org/nova/latest/contributor/microversions.html#adding-a-new-api-method","commit_id":"b8eb8d2aa4bff62a89bde323d9558043ab794c78"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"c8b805cd5a2afab5990c6c7e63c817b77bbb92b9","unresolved":false,"context_lines":[{"line_number":219,"context_line":"Cyborg API version."},{"line_number":220,"context_line":"we define constant ``MINOR_0_INITIAL_VERSION`` as ``0`` to be"},{"line_number":221,"context_line":"used as the initial value of microversion."},{"line_number":222,"context_line":"we define other version like ``MINOR_1_PROJECT_ID`` as ``1`` means"},{"line_number":223,"context_line":"the microversion of project_id is 1."},{"line_number":224,"context_line":"then we define ``MINOR_MAX_VERSION`` to the max version, which equals to"},{"line_number":225,"context_line":"latest."},{"line_number":226,"context_line":"we define ``_MIN_VERSION_STRING`` with the combination of ``BASE_VERSION``"}],"source_content_type":"text/x-rst","patch_set":16,"id":"1f621f24_0da90923","line":223,"range":{"start_line":222,"start_character":0,"end_line":223,"end_character":36},"in_reply_to":"1f621f24_6d5ec244","updated":"2020-11-10 11:24:54.000000000","message":"do you mean the L307-L314 example?","commit_id":"b8eb8d2aa4bff62a89bde323d9558043ab794c78"},{"author":{"_account_id":24872,"name":"YumengBao","email":"yumeng_bao@yahoo.com","username":"Yumeng_Bao"},"change_message_id":"8f67c30b392359d6d53412f148aff90d4a1d150a","unresolved":false,"context_lines":[{"line_number":214,"context_line":"In Code"},{"line_number":215,"context_line":"-------"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"In ``cyborg/api/controllers/v2/versions.py`` we define constant"},{"line_number":218,"context_line":"``BASE_VERSION`` as ``2`` which is intended to be used as the"},{"line_number":219,"context_line":"Cyborg API version."},{"line_number":220,"context_line":"we define constant ``MINOR_0_INITIAL_VERSION`` as ``0`` to be"},{"line_number":221,"context_line":"used as the initial value of microversion."},{"line_number":222,"context_line":"we define other version like ``MINOR_1_PROJECT_ID`` as ``1`` means"},{"line_number":223,"context_line":"the microversion of project_id is 1."},{"line_number":224,"context_line":"then we define ``MINOR_MAX_VERSION`` to the max version, which equals to"},{"line_number":225,"context_line":"latest."},{"line_number":226,"context_line":"we define ``_MIN_VERSION_STRING`` with the combination of ``BASE_VERSION``"},{"line_number":227,"context_line":"and ``MINOR_0_INITIAL_VERSION``, which means the min version of Cyborg API,"},{"line_number":228,"context_line":"we define ``_MAX_VERSION_STRING`` with the combination of ``BASE_VERSION``"},{"line_number":229,"context_line":"and ``MINOR_MAX_VERSION``, which means the max version of Cyborg API."},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"In ``cyborg/api/controllers/v2/utils.py``, we define the check function of"},{"line_number":232,"context_line":"microversion."},{"line_number":233,"context_line":"For the example of \u0027allow_project_id()\u0027 function, we compare the request"},{"line_number":234,"context_line":"version and the defined ``MINOR_1_PROJECT_ID`` to check whether the request"},{"line_number":235,"context_line":"is allowed. If the user\u0027s request with the version which is lower than"},{"line_number":236,"context_line":"``MINOR_1_PROJECT_ID``, we will raise \"Request not acceptable.\" exception to"},{"line_number":237,"context_line":"the user."},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"Adding a new API method"},{"line_number":240,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":16,"id":"1f621f24_8d26becd","line":237,"range":{"start_line":217,"start_character":0,"end_line":237,"end_character":9},"updated":"2020-11-10 02:14:40.000000000","message":"suggest adding a bullet point for each paragraph, which will be more clear.","commit_id":"b8eb8d2aa4bff62a89bde323d9558043ab794c78"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"c8b805cd5a2afab5990c6c7e63c817b77bbb92b9","unresolved":false,"context_lines":[{"line_number":214,"context_line":"In Code"},{"line_number":215,"context_line":"-------"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"In ``cyborg/api/controllers/v2/versions.py`` we define constant"},{"line_number":218,"context_line":"``BASE_VERSION`` as ``2`` which is intended to be used as the"},{"line_number":219,"context_line":"Cyborg API version."},{"line_number":220,"context_line":"we define constant ``MINOR_0_INITIAL_VERSION`` as ``0`` to be"},{"line_number":221,"context_line":"used as the initial value of microversion."},{"line_number":222,"context_line":"we define other version like ``MINOR_1_PROJECT_ID`` as ``1`` means"},{"line_number":223,"context_line":"the microversion of project_id is 1."},{"line_number":224,"context_line":"then we define ``MINOR_MAX_VERSION`` to the max version, which equals to"},{"line_number":225,"context_line":"latest."},{"line_number":226,"context_line":"we define ``_MIN_VERSION_STRING`` with the combination of ``BASE_VERSION``"},{"line_number":227,"context_line":"and ``MINOR_0_INITIAL_VERSION``, which means the min version of Cyborg API,"},{"line_number":228,"context_line":"we define ``_MAX_VERSION_STRING`` with the combination of ``BASE_VERSION``"},{"line_number":229,"context_line":"and ``MINOR_MAX_VERSION``, which means the max version of Cyborg API."},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"In ``cyborg/api/controllers/v2/utils.py``, we define the check function of"},{"line_number":232,"context_line":"microversion."},{"line_number":233,"context_line":"For the example of \u0027allow_project_id()\u0027 function, we compare the request"},{"line_number":234,"context_line":"version and the defined ``MINOR_1_PROJECT_ID`` to check whether the request"},{"line_number":235,"context_line":"is allowed. If the user\u0027s request with the version which is lower than"},{"line_number":236,"context_line":"``MINOR_1_PROJECT_ID``, we will raise \"Request not acceptable.\" exception to"},{"line_number":237,"context_line":"the user."},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"Adding a new API method"},{"line_number":240,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":16,"id":"1f621f24_eda5ad48","line":237,"range":{"start_line":217,"start_character":0,"end_line":237,"end_character":9},"in_reply_to":"1f621f24_8d26becd","updated":"2020-11-10 11:24:54.000000000","message":"Done","commit_id":"b8eb8d2aa4bff62a89bde323d9558043ab794c78"},{"author":{"_account_id":24872,"name":"YumengBao","email":"yumeng_bao@yahoo.com","username":"Yumeng_Bao"},"change_message_id":"8f67c30b392359d6d53412f148aff90d4a1d150a","unresolved":false,"context_lines":[{"line_number":241,"context_line":""},{"line_number":242,"context_line":"In the controller class::"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":".. code::"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"  def my_api_method(self, req, id):"},{"line_number":247,"context_line":"      if not utils.allow_project_id():"},{"line_number":248,"context_line":"          raise exception.NotAcceptable(_("},{"line_number":249,"context_line":"              \"Request not acceptable. The minimal required API \""},{"line_number":250,"context_line":"              \"version should be %(base)s.%(opr)s\") %"},{"line_number":251,"context_line":"              {\u0027base\u0027: versions.BASE_VERSION,"},{"line_number":252,"context_line":"              \u0027opr\u0027: versions.MINOR_1_PROJECT_ID})"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"This method would only be available if the caller had specified an"},{"line_number":255,"context_line":"``OpenStack-API-Version`` of \u003e\u003d ``accelerator 2.1``. If they had specified a"}],"source_content_type":"text/x-rst","patch_set":16,"id":"1f621f24_6d2362be","line":252,"range":{"start_line":244,"start_character":0,"end_line":252,"end_character":50},"updated":"2020-11-10 02:14:40.000000000","message":"seems this block has some formatting issue, pls check. https://storage.bhs.cloud.ovh.net/v1/AUTH_dcaab5e32b234d56b626f72581e3644c/zuul_opendev_logs_2e3/743722/16/check/openstack-tox-docs/2e383cf/docs/contributor/microversions.html#adding-a-new-api-method","commit_id":"b8eb8d2aa4bff62a89bde323d9558043ab794c78"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"c8b805cd5a2afab5990c6c7e63c817b77bbb92b9","unresolved":false,"context_lines":[{"line_number":241,"context_line":""},{"line_number":242,"context_line":"In the controller class::"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":".. code::"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"  def my_api_method(self, req, id):"},{"line_number":247,"context_line":"      if not utils.allow_project_id():"},{"line_number":248,"context_line":"          raise exception.NotAcceptable(_("},{"line_number":249,"context_line":"              \"Request not acceptable. The minimal required API \""},{"line_number":250,"context_line":"              \"version should be %(base)s.%(opr)s\") %"},{"line_number":251,"context_line":"              {\u0027base\u0027: versions.BASE_VERSION,"},{"line_number":252,"context_line":"              \u0027opr\u0027: versions.MINOR_1_PROJECT_ID})"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"This method would only be available if the caller had specified an"},{"line_number":255,"context_line":"``OpenStack-API-Version`` of \u003e\u003d ``accelerator 2.1``. If they had specified a"}],"source_content_type":"text/x-rst","patch_set":16,"id":"1f621f24_6d6fddfb","line":252,"range":{"start_line":244,"start_character":0,"end_line":252,"end_character":50},"in_reply_to":"1f621f24_6d2362be","updated":"2020-11-10 11:24:54.000000000","message":"Done","commit_id":"b8eb8d2aa4bff62a89bde323d9558043ab794c78"},{"author":{"_account_id":24872,"name":"YumengBao","email":"yumeng_bao@yahoo.com","username":"Yumeng_Bao"},"change_message_id":"8f67c30b392359d6d53412f148aff90d4a1d150a","unresolved":false,"context_lines":[{"line_number":255,"context_line":"``OpenStack-API-Version`` of \u003e\u003d ``accelerator 2.1``. If they had specified a"},{"line_number":256,"context_line":"lower version (or not specified it and received the default of"},{"line_number":257,"context_line":"``accelerator 2.0``) the server would respond with ``HTTP/406``."},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"Other necessary changes"},{"line_number":260,"context_line":"-----------------------"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"If you are adding a patch which adds a new microversion, it is"}],"source_content_type":"text/x-rst","patch_set":16,"id":"1f621f24_48077419","line":259,"range":{"start_line":258,"start_character":0,"end_line":259,"end_character":23},"updated":"2020-11-10 02:14:40.000000000","message":"also need to mention cyborg_tempest_plugin in this section.\nsuch as: If applicable, add Functional sample tests under cyborg_tempest_plugin/tests/api/","commit_id":"b8eb8d2aa4bff62a89bde323d9558043ab794c78"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"c8b805cd5a2afab5990c6c7e63c817b77bbb92b9","unresolved":false,"context_lines":[{"line_number":255,"context_line":"``OpenStack-API-Version`` of \u003e\u003d ``accelerator 2.1``. If they had specified a"},{"line_number":256,"context_line":"lower version (or not specified it and received the default of"},{"line_number":257,"context_line":"``accelerator 2.0``) the server would respond with ``HTTP/406``."},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"Other necessary changes"},{"line_number":260,"context_line":"-----------------------"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"If you are adding a patch which adds a new microversion, it is"}],"source_content_type":"text/x-rst","patch_set":16,"id":"1f621f24_ad5d7548","line":259,"range":{"start_line":258,"start_character":0,"end_line":259,"end_character":23},"in_reply_to":"1f621f24_48077419","updated":"2020-11-10 11:24:54.000000000","message":"Done","commit_id":"b8eb8d2aa4bff62a89bde323d9558043ab794c78"},{"author":{"_account_id":24872,"name":"YumengBao","email":"yumeng_bao@yahoo.com","username":"Yumeng_Bao"},"change_message_id":"8f67c30b392359d6d53412f148aff90d4a1d150a","unresolved":false,"context_lines":[{"line_number":302,"context_line":"method test, you just need to add the ``OpenStack-API-Version``"},{"line_number":303,"context_line":"header, for example::"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":".. code::"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"  req \u003d fakes.HTTPRequest.blank(\u0027/testable/url/endpoint\u0027)"},{"line_number":308,"context_line":"  req.headers \u003d {\u0027OpenStack-API-Version\u0027: \u0027accelerator 2.1\u0027}"},{"line_number":309,"context_line":"  req.api_version_request \u003d api_version.APIVersionRequest(\u00272.1\u0027)"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"  controller \u003d controller.TestableController()"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"  res \u003d controller.index(req)"},{"line_number":314,"context_line":"  ... assertions about the response ..."},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"For many examples of testing, the canonical examples are in"},{"line_number":317,"context_line":"``cyborg.tests.unit.api.controllers.v2.test_arqs.TestARQsController#test_apply_patch_allow_project_id``."}],"source_content_type":"text/x-rst","patch_set":16,"id":"1f621f24_8814ec45","line":314,"range":{"start_line":305,"start_character":0,"end_line":314,"end_character":39},"updated":"2020-11-10 02:14:40.000000000","message":"also seems some formatting issues here.pls check https://storage.bhs.cloud.ovh.net/v1/AUTH_dcaab5e32b234d56b626f72581e3644c/zuul_opendev_logs_2e3/743722/16/check/openstack-tox-docs/2e383cf/docs/contributor/microversions.html#adding-a-new-api-method","commit_id":"b8eb8d2aa4bff62a89bde323d9558043ab794c78"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"c8b805cd5a2afab5990c6c7e63c817b77bbb92b9","unresolved":false,"context_lines":[{"line_number":302,"context_line":"method test, you just need to add the ``OpenStack-API-Version``"},{"line_number":303,"context_line":"header, for example::"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":".. code::"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"  req \u003d fakes.HTTPRequest.blank(\u0027/testable/url/endpoint\u0027)"},{"line_number":308,"context_line":"  req.headers \u003d {\u0027OpenStack-API-Version\u0027: \u0027accelerator 2.1\u0027}"},{"line_number":309,"context_line":"  req.api_version_request \u003d api_version.APIVersionRequest(\u00272.1\u0027)"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"  controller \u003d controller.TestableController()"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"  res \u003d controller.index(req)"},{"line_number":314,"context_line":"  ... assertions about the response ..."},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"For many examples of testing, the canonical examples are in"},{"line_number":317,"context_line":"``cyborg.tests.unit.api.controllers.v2.test_arqs.TestARQsController#test_apply_patch_allow_project_id``."}],"source_content_type":"text/x-rst","patch_set":16,"id":"1f621f24_2d6965f8","line":314,"range":{"start_line":305,"start_character":0,"end_line":314,"end_character":39},"in_reply_to":"1f621f24_8814ec45","updated":"2020-11-10 11:24:54.000000000","message":"Done","commit_id":"b8eb8d2aa4bff62a89bde323d9558043ab794c78"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"68b4993de4428feac38627a040d61a1c5504f57d","unresolved":false,"context_lines":[{"line_number":256,"context_line":"                \"Request not acceptable. The minimal required API \""},{"line_number":257,"context_line":"                \"version should be %(base)s.%(opr)s\") %"},{"line_number":258,"context_line":"                {\u0027base\u0027: versions.BASE_VERSION,"},{"line_number":259,"context_line":"                 \u0027opr\u0027: versions.MINOR_1_PROJECT_ID})"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"This method would only be available if the caller had specified an"},{"line_number":262,"context_line":"``OpenStack-API-Version`` of \u003e\u003d ``accelerator 2.1``. If they had specified a"}],"source_content_type":"text/x-rst","patch_set":18,"id":"1f621f24_c46a43b1","line":259,"updated":"2020-11-10 22:19:23.000000000","message":"docs: Unexpected indentation.","commit_id":"09b69249fc42a6f216c691c7e86abfc602dae942"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"cb9fb768928505b12c22107a4f0289ce7c0f55a7","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Cyborg uses a framework we call \u0027API Microversions\u0027 for allowing changes"},{"line_number":8,"context_line":"to the API while preserving backward compatibility. The basic idea is"},{"line_number":9,"context_line":"that a user has to explicitly ask for their request to be treated with"},{"line_number":10,"context_line":"a particular version of the API. So breaking changes can be added to"},{"line_number":11,"context_line":"the API without breaking users who don\u0027t specifically ask for it. This"},{"line_number":12,"context_line":"is done with an HTTP header ``OpenStack-API-Version`` which has as its"}],"source_content_type":"text/x-rst","patch_set":20,"id":"2cc7a48d_c97b5a5a","line":9,"range":{"start_line":9,"start_character":12,"end_line":9,"end_character":30},"updated":"2020-11-26 09:35:58.000000000","message":"I think it is not \"has to\", we have default version when user don\u0027t specify the verison.","commit_id":"eabd6e1f791d9727a0a97e85bac9a5005f5b7d91"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"de98080fa0566e8292d258aa987bb9d1d6a05078","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Cyborg uses a framework we call \u0027API Microversions\u0027 for allowing changes"},{"line_number":8,"context_line":"to the API while preserving backward compatibility. The basic idea is"},{"line_number":9,"context_line":"that a user has to explicitly ask for their request to be treated with"},{"line_number":10,"context_line":"a particular version of the API. So breaking changes can be added to"},{"line_number":11,"context_line":"the API without breaking users who don\u0027t specifically ask for it. This"},{"line_number":12,"context_line":"is done with an HTTP header ``OpenStack-API-Version`` which has as its"}],"source_content_type":"text/x-rst","patch_set":20,"id":"f129d737_f71fe960","line":9,"range":{"start_line":9,"start_character":12,"end_line":9,"end_character":30},"in_reply_to":"29cd8b09_1b205ceb","updated":"2020-11-27 01:49:01.000000000","message":"This docs is a refer for the users when they need a microversion, if the API does not need a microversion when there is a request, it will not need a microversion, so IMO it\u0027s ok for us, and the nova microversion introduce also said as before. see https://docs.openstack.org/nova/latest/contributor/microversions.html#background","commit_id":"eabd6e1f791d9727a0a97e85bac9a5005f5b7d91"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"7d37dbd9470a1f8ab29661b4ae63bfe42ae4a0a6","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Cyborg uses a framework we call \u0027API Microversions\u0027 for allowing changes"},{"line_number":8,"context_line":"to the API while preserving backward compatibility. The basic idea is"},{"line_number":9,"context_line":"that a user has to explicitly ask for their request to be treated with"},{"line_number":10,"context_line":"a particular version of the API. So breaking changes can be added to"},{"line_number":11,"context_line":"the API without breaking users who don\u0027t specifically ask for it. This"},{"line_number":12,"context_line":"is done with an HTTP header ``OpenStack-API-Version`` which has as its"}],"source_content_type":"text/x-rst","patch_set":20,"id":"f181a312_f1134d9d","line":9,"range":{"start_line":9,"start_character":12,"end_line":9,"end_character":30},"in_reply_to":"2cc7a48d_c97b5a5a","updated":"2020-11-26 09:59:44.000000000","message":"This docs in order to remind the users of using Cyborg\u0027s APIs, if they want to use a featue with a microversion bonded,they have to request the specific version. So it would be ok to use \"has to\"","commit_id":"eabd6e1f791d9727a0a97e85bac9a5005f5b7d91"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"616752d382106405684cdefb6cfb11d1c82c3e4c","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Cyborg uses a framework we call \u0027API Microversions\u0027 for allowing changes"},{"line_number":8,"context_line":"to the API while preserving backward compatibility. The basic idea is"},{"line_number":9,"context_line":"that a user has to explicitly ask for their request to be treated with"},{"line_number":10,"context_line":"a particular version of the API. So breaking changes can be added to"},{"line_number":11,"context_line":"the API without breaking users who don\u0027t specifically ask for it. This"},{"line_number":12,"context_line":"is done with an HTTP header ``OpenStack-API-Version`` which has as its"}],"source_content_type":"text/x-rst","patch_set":20,"id":"29cd8b09_1b205ceb","line":9,"range":{"start_line":9,"start_character":12,"end_line":9,"end_character":30},"in_reply_to":"f181a312_f1134d9d","updated":"2020-11-26 10:06:04.000000000","message":"Ah ok, got it.\nIs it better to say \"if user wants their API request be treated with a particular version of API, he/she should explicityly specify a microversion\".","commit_id":"eabd6e1f791d9727a0a97e85bac9a5005f5b7d91"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"915308338e2cb1fd1fd2c3202169d75fc5758f4c","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Cyborg uses a framework we call \u0027API Microversions\u0027 for allowing changes"},{"line_number":8,"context_line":"to the API while preserving backward compatibility. The basic idea is"},{"line_number":9,"context_line":"that a user has to explicitly ask for their request to be treated with"},{"line_number":10,"context_line":"a particular version of the API. So breaking changes can be added to"},{"line_number":11,"context_line":"the API without breaking users who don\u0027t specifically ask for it. This"},{"line_number":12,"context_line":"is done with an HTTP header ``OpenStack-API-Version`` which has as its"}],"source_content_type":"text/x-rst","patch_set":20,"id":"902e9bb5_60d3ad07","line":9,"range":{"start_line":9,"start_character":12,"end_line":9,"end_character":30},"in_reply_to":"f181a312_f1134d9d","updated":"2020-11-26 10:05:43.000000000","message":"The default version is a base,if the micro version not noted in the API reference the user would be use the default version.","commit_id":"eabd6e1f791d9727a0a97e85bac9a5005f5b7d91"}]}
