Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

py3.7 deadlock with monkeypatch of stdlib thread modules + use of ThreadPoolExecutor #508

Closed
coreycb opened this issue Jul 24, 2018 · 9 comments · Fixed by #598 or RC-MODULE/rumboot-tools#11

Comments

@coreycb
Copy link

coreycb commented Jul 24, 2018

There's a py3.7 deadlock when eventlet.patcher.monkey_patch(thread=True) is used with concurrent.futures.ThreadPoolExecutor().

Here's some sample code that deadlocks: https://bugs.python.org/file47709/bpo34173-recreate.py

Notice that it does not deadlock if the monkey_patch is removed.

I'm not sure if this is a bug in eventlet or concurrent.futures of the py3.7 standard library. I also have a py3.7 issue opened here: https://bugs.python.org/issue34173

If I switch /usr/lib/python3.7/concurrent/futures/thread.py back to use queue.Queue() (which was the case for py3.6) the deadlock goes away. This was changed in py3.7 from Queue to SimpleQueue:

- self._work_queue = queue.Queue()
+ self._work_queue = queue.SimpleQueue()
@coreycb coreycb changed the title py3.7 deadlock with monkeypatching of standard library thread modules + use of concurrent.futures.ThreadPoolExecutor py3.7 deadlock with monkeypatch of stdlib thread modules + use of ThreadPoolExecutor Jul 24, 2018
@temoto
Copy link
Member

temoto commented Jul 25, 2018

Eventlet and asyncio solve same problem. Why would you want concurrent.futures and eventlet in same application?

@coreycb
Copy link
Author

coreycb commented Jul 25, 2018

@temoto I'll pose that question to folks from affected upstream projects who are more knowledgeable than I am. I'm just trying to get this packaged for Ubuntu.

@coreycb
Copy link
Author

coreycb commented Jul 25, 2018

I've posed some questions upstream on the openstack-dev mailing list. You can follow along here: http://lists.openstack.org/pipermail/openstack-dev/2018-July/132473.html

Note that further testing has shown that https://docs.openstack.org/futurist/latest/reference/index.html#futurist.GreenThreadPoolExecutor does not deadlock.

@temoto
Copy link
Member

temoto commented Jul 25, 2018

Thank you. Is GreenThreadPoolExecutor an acceptable workaround?

@harlowja
Copy link

harlowja commented Jul 25, 2018

#An idea (it's ok if it gets shot down), but it might be useful to suck GreenThreadPoolExecutor into eventlet itself (vs having it in futurist)? I don't mind if the code that I/others wrote @ https://github.com/openstack/futurist/blob/master/futurist/_futures.py#L306-L491 gets taken or mutated or other...

@temoto
Copy link
Member

temoto commented Jul 25, 2018

@harlowja thank you, I absolutely agree that we should host eventlet related hacks in eventlet source tree.

@coreycb
Copy link
Author

coreycb commented Jul 25, 2018

@temoto Yes, based on @harlowja's input it is an acceptable workaround to use GreenThreadPoolExecutor with eventlet.

@harlowja
Copy link

Cool, feel free to take it (if u want); just let me know if/when that happens (likely futurist will have to proxy to that new implementation for some time for deprecation purposes).

openstack-gerrit pushed a commit to openstack/designate that referenced this issue Oct 24, 2018
python3.7 and eventlet cause the `future.ThreadPoolExecutor` to hang
indefinitely. Moving to `futurist.GreenThreadPoolExecutor` allows the
`designate-worker` process to use native eventlet greenthreads, which bypasses
the hanging issue.

Closes-Bug: #1782647

Related-Bug: https://bugs.python.org/issue34173
Related-Bug: eventlet/eventlet#508

Change-Id: I36c79ca72635d81cfcc8d3cc87b1bc5e0657d9e8
Signed-off-by: Graham Hayes <gr@ham.ie>
openstack-gerrit pushed a commit to openstack/nova that referenced this issue Dec 17, 2018
Based on eventlet issue [1] ThreadPoolExecutor doesn't play nice with
eventlet in python 3.7. We saw deadlocks in the functional-py37
execution in live migration tests due to live migration using
ThreadPoolExecutor.

The [1] suggests to replaces ThreadPoolExecutor with
futurist.GreenThreadPoolExecutor to avoid deadlocks. So this patch does
the replacement and adjusts the unit tests accordingly.

As the ThreadPoolExecutor was the last used class from the futures
module we remove that from the requirements and add the futurist module
instead.

[1] eventlet/eventlet#508

Change-Id: Ia56ab43be739e677760bbad5c40caad924425fa5
openstack-gerrit pushed a commit to openstack/openstack that referenced this issue Jan 4, 2019
* Update designate from branch 'master'
  - Merge "Fix test failures for new dnspython module"
  - Merge "Add blueprint in README.rst"
  - Fix test failures for new dnspython module
    
    Release dnspython==1.16.0 has fixed a bug which didn't apply the zone
    default TTL to records without an explicit TTL. Since there doesn't seem
    to be a way to accomodate both the old and new behaviour in our tests,
    set an explicit TTL for all our sample records.
    
    Change-Id: I2d4cd55b69da696a9d4b25213969248a4c2e6119
    
  - Imported Translations from Zanata
    
    For more information about this automatic import see:
    https://docs.openstack.org/i18n/latest/reviewing-translation-import.html
    
    Change-Id: I63154423204632d0f0d6b756ad9d3cc7a90a894f
    
  - Change openstack-dev to openstack-discuss
    
    Mailinglists have been updated. Openstack-discuss replaces openstack-dev.
    
    Change-Id: I429898c6f3a65a3287aa33a401911f3d1dcfc65a
    
  - Fix the record_types for CAA and NAPTR
    
    Co-Authored-By: Jake Yip <jake.yip@unimelb.edu.au>
    
    Change-Id: Ie064cb1212e960700ef24fa3ae7bde18e56eeedc
    
  - Imported Translations from Zanata
    
    For more information about this automatic import see:
    https://docs.openstack.org/i18n/latest/reviewing-translation-import.html
    
    Change-Id: I97e0d616b5fae021db4725aa1a9e6f7557809599
    
  - Imported Translations from Zanata
    
    For more information about this automatic import see:
    https://docs.openstack.org/i18n/latest/reviewing-translation-import.html
    
    Change-Id: Ie576daf140a81f8da11faa26bbc01efaf88b22fa
    
  - Merge "Standardize colorized logging"
  - Merge "CAA DNS records"
  - Merge "NAPTR DNS records"
  - Add blueprint in README.rst
    
    add blueprint int readme.rst
    
    Change-Id: I0fb02b5af9212fa31d78c028992c7b971d0792c8
    
  - Imported Translations from Zanata
    
    For more information about this automatic import see:
    https://docs.openstack.org/i18n/latest/reviewing-translation-import.html
    
    Change-Id: Ie9dc15999432ced927b7aad8a8193bde6ec3d90f
    
  - CAA DNS records
    
    This patchset adds support for DNS CAA (Certification Authority
    Authorization) Resource Record which is described in RFC 6844
    (https://tools.ietf.org/html/rfc6844)
    
    Change-Id: If9619096f1706d1123895b63b9129b9ffd4fb320
    Closes-Bug: 1787552
    
  - Merge "Add openstack-python37-jobs template"
  - Merge "Imported Translations from Zanata"
  - NAPTR DNS records
    
    This patchset adds support for DNS NAPTR (Naming Authority
    Pointer) Resource Record which is described in RFC 2915
    (https://tools.ietf.org/html/rfc2915)
    
    Change-Id: Ic7d26a6c653ce46e67438e983476782edd6ec890
    Closes-Bug: 1779850
    
  - Imported Translations from Zanata
    
    For more information about this automatic import see:
    https://docs.openstack.org/i18n/latest/reviewing-translation-import.html
    
    Change-Id: I33df114dce55ef18e3b38d0200b10d23c29a55ce
    
  - Standardize colorized logging
    
    Change-Id: Ic479f467cad40a57d6b0e2dd866ee631b91da2c6
    
  - Replace deprecated "decodestring()"
    
    "decodestring()" is deprecated alias of "decodebytes()"
    https://docs.python.org/3/library/base64.html#base64.decodestring
    
    This patch replaces "base64.decodestring" with
    "oslo_serialization.base64.decode_as_bytes".
    The same has been done for nova:
    https://review.openstack.org/#/c/610401/
    
    Change-Id: I604afb9cd34b7ff6695031dc271930e49ed80bcf
    
  - Merge "Move to GreenThreadPoolExecutor"
  - Add openstack-python37-jobs template
    
    Make sure that we are testing with the latest python version, too.
    
    We should also add a functional job running with py37.
    
    Change-Id: If6c2cd41ec39f15682ea6385ccbb5cfc8551689a
    
  - Move to GreenThreadPoolExecutor
    
    python3.7 and eventlet cause the `future.ThreadPoolExecutor` to hang
    indefinitely. Moving to `futurist.GreenThreadPoolExecutor` allows the
    `designate-worker` process to use native eventlet greenthreads, which bypasses
    the hanging issue.
    
    Closes-Bug: #1782647
    
    Related-Bug: https://bugs.python.org/issue34173
    Related-Bug: eventlet/eventlet#508
    
    Change-Id: I36c79ca72635d81cfcc8d3cc87b1bc5e0657d9e8
    Signed-off-by: Graham Hayes <gr@ham.ie>
    
  - Increment versioning with pbr instruction
    
    With moving away from required milestone releases, the version numbers
    calculated by PBR on the master branch will not work for those testing
    upgrades from the last stable release. More details can be found in the
    mailing list post here:
    
        http://lists.openstack.org/pipermail/openstack-dev/2018-October/135706.html
    
    This is an empty commit that will cause PBR to increment its calculated
    version to get around this.
    
    PBR will see the following which will cause it to increment the version:
    
    Sem-Ver: feature
    
    Please merge this patch as soon as possible to support those testing
    upgrades.
    
    Change-Id: I3e6e122655455b249a7fdc03514643f167521497
    Signed-off-by: Sean McGinnis <sean.mcginnis@gmail.com>
    
  - Update sphinx extension logging
    
    Sphinx 1.6 deprecated using the application object to perform logging
    and it will be removed in the upcoming 2.0 release. This updates our
    extensions to use the recommended sphinx.util.logging instead.
    
    Change-Id: I0b4d0d66ad60ff8e9b2d7de70d9858bd6ca5efa6
    Signed-off-by: Sean McGinnis <sean.mcginnis@gmail.com>
    
  - Merge "Fixing RabbitMQ gate timeouts"
  - Don't quote {posargs} in tox.ini
    
    Quotes around {posargs} cause the entire string to be combined into one
    arg that gets passed to stestr. This prevents passing multiple args
    (e.g. '--concurrency=16 some-regex')
    
    Change-Id: Ia9cf4ec0b6cd5addb81dd1ff31d7e930040ddc44
    
  - Fixing RabbitMQ gate timeouts
    
    - Raised rpc timeout from 5s to 60s (default).
    
    Change-Id: Ib5ffdd7f5a3e09b394b05a396e91148c869ab0b9
    
  - Merge "Add top-level CLI reference page in docs"
  - Merge "Fix venv target for creating release notes"
  - Merge "Worker should send NOTIFY also to all servers in 'also_notifies' pool settings."
  - Add top-level CLI reference page in docs
    
    This creates the top-level cli/ reference in the
    docs and moves the designate-manage docs to that
    CLI reference. A redirect is added for sending
    old links to the new home for the designate-manage.html
    page.
    
    We'll build on this to add docs for the new
    designate-status upgrade check command.
    
    Change-Id: Ic05bc343131651edc7379976fdc877cfb286e310
    
  - Fix venv target for creating release notes
    
    Without doc/requirements.txt in the venv target you
    can't create release notes by doing:
    
      tox -e venv -- reno new <slug>
    
    This fixes the venv target dependencies to do that.
    
    Change-Id: Ia4b0311755fe30a79bdb529dcea4ae21efd57c8a
    
  - Imported Translations from Zanata
    
    For more information about this automatic import see:
    https://docs.openstack.org/i18n/latest/reviewing-translation-import.html
    
    Change-Id: I637935e527a090e7e5e8d5529b173f942d5bdffd
    
  - Imported Translations from Zanata
    
    For more information about this automatic import see:
    https://docs.openstack.org/i18n/latest/reviewing-translation-import.html
    
    Change-Id: Ib107d8076150b35d8fe90a3c98ec9460ca505849
    
  - Merge "Remove -u root as mysql is executed with root user"
  - Merge "Use templates for cover and lower-constraints"
  - Merge "Add docs for project-id verification feature"
  - Merge "Imported Translations from Zanata"
  - Fixing Python 3.x issues introduced with eventlet update
    
    Closes-Bug: #1792671
    
    Change-Id: Iecef0977a1e4c102bd85b0d9c27a8d37dcd3ee17
    
  - Imported Translations from Zanata
    
    For more information about this automatic import see:
    https://docs.openstack.org/i18n/latest/reviewing-translation-import.html
    
    Change-Id: I38e17af7ab0bb27bf12317a7e3f65902f7701419
    
  - Use templates for cover and lower-constraints
    
    Use openstack-tox-cover template, this runs the cover job as
    non-voting in the check queue only.
    
    Use openstack-lower-constraints-jobs template
    
    Remove jobs that are part of the templates.
    
    Change-Id: I83bd26265887a0661ecd7fca60f27671d1c91699
    
  - Merge "Improve configuration guide"
  - Merge "Check the project zone quota when accepting zone transfer."
  - Improve configuration guide
    
    add example command line to generate policy file and add links to
    configuration docs (they are currently reside in the Admin Guide).
    
    Change-Id: Ie5a24ef99a7d272693702a39aa679c7ba0c07655
    
  - Merge "Verify project-id when setting quota"
  - Merge "Simplify olso.log setup"
  - Merge "Removed deprecated managed option in notification handler"
  - Merge "Update links in README"
  - Merge "Update link tags in README"
  - Check the project zone quota when accepting zone transfer.
    
    Change-Id: I3cb6cf8c804f008244e34968101f7343be192d48
    Closes-Bug: 1789876
    
  - Update link tags in README
    
    Change-Id: If3018699b4d0d8022ceca256e25cb0f60af1d138
    
  - Remove install-guide-jobs
    
    The install-guide-jobs template needs to stay in project-config, remove
    it from zuul file.
    
    See also https://review.openstack.org/597618
    
    Change-Id: I41ea3432e380eb884fa04d55a7c1e9ee338d04ea
    
  - Merge "switch documentation job to new PTI"
  - Add docs for project-id verification feature
    
    Change-Id: Ibe98d50be578b35cb92c70d703c23dd27b192787
    Related-Bug: #1760822
    
  - Merge "import zuul job settings from project-config"
  - Merge "Make update_status use synchronized_zone"
  - Remove -u root as mysql is executed with root user
    
    As openstack installation guides suggest to run mysql with root shell
    user, mysql will not ask for password, so the "-u root -p" is useless.
    
    Change-Id: I245b8969ec58de91b7d21267bbdf4273d572c8d2
    Related-Bug: #1785025
    
  - Update links in README
    
    Change the outdated links to the latest links in README
    
    Change-Id: Ia771f6b26c46967d48ca421a3290fa7f04c89c48
    
  - switch documentation job to new PTI
    
    This is a mechanically generated patch to switch the documentation
    jobs to use the new PTI versions of the jobs as part of the
    python3-first goal.
    
    See the python3-first goal document for details:
    https://governance.openstack.org/tc/goals/stein/python3-first.html
    
    Change-Id: Ic07158b0022f57069d7e117d03c329cb01c6f722
    Story: #2002586
    Task: #24292
    
  - import zuul job settings from project-config
    
    This is a mechanically generated patch to complete step 1 of moving
    the zuul job settings out of project-config and into each project
    repository.
    
    Because there will be a separate patch on each branch, the branch
    specifiers for branch-specific jobs have been removed.
    
    Because this patch is generated by a script, there may be some
    cosmetic changes to the layout of the YAML file(s) as the contents are
    normalized.
    
    See the python3-first goal document for details:
    https://governance.openstack.org/tc/goals/stein/python3-first.html
    
    Change-Id: I3111e19b546a12a61975d339ac0e7512fef50c04
    Story: #2002586
    Task: #24292
    
  - Removing removed bandit plugins to fix gate
    
    The following Openstack specific plugins were removed
    in the 1.5.0 release on bandit and is causing the pep8
    tests to fail.
    * B109, B111
    
    Change-Id: I6270decd28be26e8c497062e75b54a12f3a54517
    
  - Imported Translations from Zanata
    
    For more information about this automatic import see:
    https://docs.openstack.org/i18n/latest/reviewing-translation-import.html
    
    Change-Id: Id5d89bde7b6f0b289bdd8c3e11425f1f50e1b025
    
  - Update reno for stable/rocky
    
    Change-Id: I1ad06e118c4a164f68313c0c9b0ae3b834b137db
    
  - Imported Translations from Zanata
    
    For more information about this automatic import see:
    https://docs.openstack.org/i18n/latest/reviewing-translation-import.html
    
    Change-Id: I660e0dd489a24aac6d6dbbe516236e9f6d640fc9
    
  - Merge "Change Bad Action from a traceback into a warning"
  - Worker should send NOTIFY also to all servers in 'also_notifies' pool settings.
    
    Change-Id: I0a85c5df5c323d6f636c8cb92ee5201c14cdb306
    Closes-Bug: #1785769
    
  - Simplify olso.log setup
    
    Switching to log.get_default_log_levels, and implement
    _EXTRA_DEFAULT_LOG_LEVELS on top for anything designate specific.
    
    Change-Id: I20c89e0ddfde39c1a43c2e32a5dad67d180e38c3
    
  - Make update_status use synchronized_zone
    
    There is a race condition when adding a new recordset to a zone
    and when central is processing the update_status from a previous
    recordset/zone operation. In the subsequent recordset operation,
    central fails to update the zone's action/status in DB to UPDATE/PENDING.
    It remains as NONE/ACTIVE, and worker error's out.
    
    Each operation retrieves a different copy in memory of the Zone object
    (when it calls self.storage.get_zone). As a result this does not update
    the obj_changes field for the zone object for the latter operation.
    Therefore the DB update doesn't update any values.
    
    update_status should be synchronized as it updates zone DB
    
    Change-Id: Ib4e0bc567ba8eb54c61c3921d165521bf2f12206
    Closes-Bug: #1713875
    
  - Change Bad Action from a traceback into a warning
    
    * Added new exception BadAction.
    * Cleaned up processing code.
    
    Partial-Bug: #1768618
    Change-Id: I1255b87209a94ab25519aaa83648b7abfd49f067
    
  - Enable mutable config in designate
    
    New releases of oslo.config support a 'mutable' parameter to Opts.
    oslo.service provides an option here Icec3e664f3fe72614e373b2938e8dee53cf8bc5e
    allows services to tell oslo.service they want mutate_config_files to be
    called by passing a parameter.
    
    This commit is to use the same. This allows designate to benefit from
    I1e7a69de169cc85f4c09954b2f46ce2da7106d90, where the 'debug' option
    (owned by oslo.log) is made mutable. we should be able to turn debug
    logging on and off by changing the config.
    
    tc goal:
    https://governance.openstack.org/tc/goals/rocky/enable-mutable-configuration.html
    
    Change-Id: I5fba66b32b2b8eeea7c206e9eaec0d8c217dafb2
    
  - Merge "Reenable py3.6 tempest jobs + add py36 tox"
  - Merge "Remove testrepository"
  - Reenable py3.6 tempest jobs + add py36 tox
    
    Change-Id: I24cf490f74517aa8f92f81a5aca6785a7a442537
    Signed-off-by: Graham Hayes <gr@ham.ie>
    
  - Merge "Replace use of os.errno.* with errno.*"
  - Merge "Replace StopIteration with return for PEP 0479"
  - Removed deprecated managed option in notification handler
    
    The managed option has been deprecated for 3 years now, and is
    risky in general as it can cause custom sink handlers to delete
    all records in a zone by mistake.
    
    This also allows us to clean the code path up a bit.
    
    Related-Bug: #1387662
    Change-Id: Id6174eb7df0c7bc9d138e74f72b6931a025ec818
    
  - Set py36 gate non voting
    
    Change-Id: I42413448773a07fbbfdbc5f4b86515c6a3710574
    Signed-off-by: Graham Hayes <gr@ham.ie>
    
  - Replace use of os.errno.* with errno.*
    
    According to the following, os.errno has been removed in Py3.7:
    https://bugs.python.org/msg317876
    
    Change-Id: I941ba24a5f4ede4cc596dca92946ff5ae88a1d53
    Closes-Bug: #1782204
    
  - Replace StopIteration with return for PEP 0479
    
    PEP 0479, https://www.python.org/dev/peps/pep-0479/, makes the
    following change: "when StopIteration is raised inside a generator,
    it is replaced it with RuntimeError".
    
    The PEP suggests that if raise StopIteration occurs directly in a
    generator, simply replace it with return.
    
    Change-Id: I9bb72936c8d56b338084bb0be7e75aecdf09f8b3
    Closes-Bug: #1780827
    
  - Remove testrepository
    
    This commit is a follow-up of "switch to using stestr"
    which was merged already [1].
    After switch to using stestr, testrepository is unnecessary
    and should be removed.
    
    [1] https://review.openstack.org/571948
    
    Change-Id: I7b496624721173955315869b17d3f2050dc83d30
    
  - Merge "Replace testr to stestr"
  - Merge "Added CONTRIBUTING.rst file to the project"
  - Replace testr to stestr
    
    According to Openstack summit session [1] stestr is maintained
    project to which all Openstack projects should migrate.
    Let's switch it then.
    
    [1] https://etherpad.openstack.org/p/YVR-python-pti
    
    Change-Id: I0d2391779623135551f095f8f4b61a2d523c6f35
    
  - Added CONTRIBUTING.rst file to the project
    
    Change-Id: I8947abfb476827a6043c1567e671bc046f3ff755
    
  - Don't run tempest jobs when patching releasenote
    
    Change-Id: I28f8b9f3f75cf5a4dab43c1b728794f49321f777
    
  - Verify project-id when setting quota
    
    this patch adds several things to attempt (on best effort basis)
    to use incoming user token in the quota set request to ask Keystone
    if the project id the quota being set on is actualy valid:
    
    - added new [keystone] config section to hold session- and
      adapter-realated options for accessing Keystone enndpoint
    - added a token- and service catalog-based user auth plugin to the request
      context
    - use the above to construct a keystoneauth adapter for Identity service
      and attempt to GET on projects/{project_id}
    
      - only if the Keystone v3 catalog endpoint is not found, or
        the request returns 404 NotFound, we raise an error and return it
        as 400 BadRequest to client when attempting to change quotas for
        project.
    
    This behavior is enabled by setting a new
    [service:api]quotas-verify-project-id config option to True (default is
    False for backward compatibility).
    
    Change-Id: Ib14ee5b5628509b6a93be8b7bd10e734ab19ffee
    Depends-On: https://review.openstack.org/580142
    Closes-Bug: #1760822
    
  - Merge "Fix systemctl command in Ubuntu installation guide"
  - Merge "Use listener pools in designate-sink"
  - Allow newer versions of Flask
    
    Since keystone bumped the version of Flask in openstack/requirements,
    the upper constraint is now equal to 1.0.2 that is not allowed by
    the requirements.txt of designate.
    
    If we change the designate requirements, we could use the same
    version of Flask for both Keystone and Designate, helping
    deployers.
    
    Change-Id: Ic54ceebc1af5a9d74e415f7369e1d5bb19c6e915
    
  - Use listener pools in designate-sink
    
    configuring pools for notificaiton listeners is an alternative approach
    to using per-component notification topics, however not all
    oslo.messaging drivers support it (from currently available, zmq and
    amqp1 do not, rabbit and kafka do support listener pools).
    
    This patch adds a config option 'listener-pool-name' to [service:sink]
    config section (defaults to None) that can be used to configure a common
    pool for designate-sink notification listeners if the messaging driver
    does support them.
    
    Change-Id: I4fc1c7264671c3102c067beb7298879e62214d60
    
  - Init config before service start
    
    registering options during oslo.service start can result in a race with
    oslo.service's own startup logging of options, producing error
    
    RuntimeError: dictionary changed size during iteration
    
    Groups found to be responsible are [ssl] (from oslo_service.sslutils)
    and [keystone_authtoken] (from keystonemiddleware.auth_token).
    
    This was cought when starting designate-api with `--log-config-append`
    option with extra logging config containing many handlers
    (some are heavier to init than others, like fluentd),
    thus introducing enough time lapse for race to surface.
    
    Change-Id: I2295d91077b5cdc905eafa6f24a7b73168ceb1aa
    
  - Fix systemctl command in Ubuntu installation guide
    
    The systemctl command service names no longer prepend "openstack-"
    
    Closes bug: #1775720
    
    Change-Id: I89818e1a369b38365ebf0c6b6141207bb72a52ed
    
  - Imported Translations from Zanata
    
    For more information about this automatic import see:
    https://docs.openstack.org/i18n/latest/reviewing-translation-import.html
    
    Change-Id: I9301a9a66ccf936f7bc082621357dd121fe430d1
    
  - Merge "Switch to oslo_messaging.ConfFixture.transport_url"
  - Merge "Add unique constraint to service_statuses"
  - Merge "[Docs] Fix the incorrect designate service name"
  - Document --record instead of --records
    
    Per the cli, --records is deprecated and --record should be used
    instead.
    
    Change-Id: I00f2562342480a1eb9bdbba519e28c69dffe6d0e
    
  - [Docs] Fix the incorrect designate service name
    
    Change-Id: Ic28fedae673b12d7659eb492e2497ab9238695f8
    
  - Switch to oslo_messaging.ConfFixture.transport_url
    
    oslo_messaging's rpc_backend setting, which is set by
    ConfFixture.transport_driver has been deprecated since Newton. To allow
    oslo_messaging to remove it, switch to setting transport_url instead.
    
    Change-Id: I56ed0952f667dc51fb36aa1e85875e2d30097237
    Partial-Bug: #1712399
    
  - Merge "fix a typo in code"
  - Merge "Ensure the old files before build"
  - fix tox python3 overrides
    
    We want to default to running all tox environments under python 3, so
    set the basepython value in each environment.
    
    We do not want to specify a minor version number, because we do not
    want to have to update the file every time we upgrade python.
    
    We do not want to set the override once in testenv, because that
    breaks the more specific versions used in default environments like
    py35 and py36.
    
    Change-Id: If3aad2663d76fce58430d3b6ee6220ff550977a3
    Signed-off-by: Doug Hellmann <doug@doughellmann.com>
    
  - fix a typo in code
    
    Remove the duplicated 'for'.
    
    Change-Id: I83a1a1f085b5d8272f920db7df2b40ed23802915
    
  - Switch to using stestr
    
    According to Openstack summit session [1] stestr is
    maintained project to which all Openstack projects
    should migrate.
    Let's switch it then.
    
    [1] https://etherpad.openstack.org/p/YVR-python-pti
    
    Change-Id: I847368004d14c2f213d36c602398abfdbfa381cd
    Signed-off-by: Charles Short <zulcss@gmail.com>
    
  - Ensure the old files before build
    
    This patch is to ensure the old files are not left over
    when running these document builds.
    
    Change-Id: Ifb0db4bd2c6962f3d84418e9e924f8a783696dcb
    
  - Allow to check pep8 along with D000
    
    This patch only setup package dependency which named Pygments
    for this test. Pygments also exist item in lower-contraints.txt
    which does not setup along with tox env.
    
    Change-Id: I1a75150b7fd813a4126716b898a55f35c64c5ec6
    
  - Merge "Replace Chinese punctuation with English punctuation"
  - Add unique constraint to service_statuses
    
    In the current implementation, if for any reason a duplicate
    service entry gets created, the call to update that service
    will fail endlessly, and instead cause the service to create
    new entries everytime update_service_status gets called. Causing
    it to fill the database with duplicate entries.
    
    This patch adds a unique constraint to the service_statuses
    table based on the service_name and hostname, to ensure that
    this cannot happen.
    
    In addition we add a new test to the storage driver and further
    expanded the central service test coverage.
    
    Change-Id: I307a8f7dd8b8a83effa447a846db3288efa32dba
    Closes-Bug: #1768824
    
  - Fix contents render for notification.rst
    
    old:
    
       .. literalinclude::
    
           ../../../designate/tests/resources/sample_notifications/neutron/port.delete.start.json
    
    new:
    
        {
           "priority" : "INFO",
           "message_id" : "95ecdca3-967f-40aa-9469-d9fccc91d64b",
           "event_type" : "port.delete.start",
           "_context_roles" : [
              "Member"
           ],
           "_context_tenant_id" : "c97027dd880d4c129ae7a4ba7edade05",
           "timestamp" : "2012-11-16 12:56:17.155860",
           "_context_is_admin" : false,
           "_context_user_id" : "4ce5c085e09a478ea4edcd667a92df78",
           "payload" : {
              "port_id" : "bfdcb007-f68d-46bd-8150-abcae9fb3af6"
           },
           "_context_timestamp" : "2012-11-16 12:56:17.154672",
           "publisher_id" : "network.svc02.os.lan",
           "_context_read_deleted" : "no"
        }
    
    Change-Id: I659ffcb5fcb7032a54670602a6534218e1e153fa
    
  - Replace Chinese punctuation with English punctuation
    
    Curly quotes(Chinese punctuation) usually input from Chinese input method.
    When read from english context, it makes some confusion.
    
    Change-Id: I9b9c8015394578d52c3a55839b84b4f64fb0a5c4
    
  - Merge "Start replacing designate legacy jobs"
  - Start replacing designate legacy jobs
    
    Add a designate-base job to replace the legacy designate-devstack-base.
    
    Add test job on bionic with py36.
    
    Change-Id: I7c92b5b4464b585b0c9f64408507d8a2143f99d8
    
  - Make Neutron integration job voting
    
    Neutron has updated the neutron-tempest-plugin-designate-scenario job to
    be voting [0], let's follow that path.
    
    [0] https://review.openstack.org/568681
    
    Change-Id: Ifdfbdb4d465bc70b02be1c3f049dbfac67de4c88
    
  - Change copyright information for field.py
    
    Due to wrong copy&paste and this is commit from fujitsu
    since last year [1]
    
    [1] https://review.openstack.org/#/c/464971/
    
    Change-Id: Ib403898521efcda9edfefcfbc027b831031783c3
    
  - Add release notes link to README
    
    Add release notes url doc link to README.rst.
    
    Change-Id: I443ba4e6d6289c80dfbb8b60c9edf87b100dae37
    
  - fix a typo: s/extention/extension
    
    Change-Id: Ife244edb3addf28416cf6b1a2bb891161ef35100
    
  - Merge "Move pep8 checks to py3 by default"
  - Merge "uncap eventlet"
  - uncap eventlet
    
    We will manage the eventlet version using constraints now. See the
    thread starting at
    http://lists.openstack.org/pipermail/openstack-dev/2018-April/129096.html
    for more details.
    
    Amend lower constraints according to tools/fix-lower-constraints.py and
    remove setuptools from requirements.txt to fix requirements job.
    
    Change-Id: I4f336ce65904b5fde9b088a2624fb9196623e295
    Signed-off-by: Doug Hellmann <doug@doughellmann.com>
    
  - Merge "Ensure we do not pass invalid data for A records"
  - Ensure we do not pass invalid data for A records
    
    DNSPython does not allow IPs to have leading zeros
    for A records [1] and eventlet agrees [2], so we should
    ensure we do not create a situation where a project can
    DOS itself.
    
    This patch uses the DNSPython method to ensure it is kept in sync
    
    1 - https://github.com/rthalley/dnspython/blob/v1.15.0/dns/ipv4.py#L52-L54
    2 - https://github.com/eventlet/eventlet/blob/v0.20.0/eventlet/support/dns/ipv4.py#L52-L54
    
    Partial-Bug: 1760833
    Change-Id: I975b18d390647de9fe11c105cd421b761f88be6c
    
  - Update auth_uri option to www_authenticate_uri
    
    Option auth_uri from group keystone_authtoken is deprecated[1].
    Use option www_authenticate_uri from group keystone_authtoken.
    
    [1]https://review.openstack.org/#/c/508522/
    
    Change-Id: I80b505feb611af8a95ac19f2808c73069e2a33e5
    
  - Move pep8 checks to py3 by default
    
    Change-Id: I0964970c1590658754ea59b394835dc1472b7292
    
  - Replace deprecated LOG.warn with LOG.warning
    
    LOG.warn is deprecated in Python 3 [1] . But it still used in a few places, non-deprecated LOG.warning should be used instead.
    
    Note: If we are using logger from oslo.log, warn is still valid [2], but I agree we can switch to LOG.warning.
    
    [1]https://docs.python.org/3/library/logging.html#logging.warning
    [2]https://github.com/openstack/oslo.log/blob/master/oslo_log/log.py#L85
    
    Change-Id: Ibbcc287815cbc06162a13448c2dabcb0748e4e32
    Closes-Bug: #1508442
    
  - Updated from global requirements
    
    Change-Id: I9ffc7367b696a1f2eb63954d0d865a645869fa9a
    
  - Follow the new PTI for document build
    
    For compliance with the Project Testing Interface as described in:
    https://governance.openstack.org/tc/reference/project-testing-interface.html
    
    For more detials information, please refer to:
    http://lists.openstack.org/pipermail/openstack-dev/2017-December/125710.html
    
    Change-Id: Ic7dad29922af2efed2188f3215f364719f0e19ae
    
  - Updated from global requirements
    
    Change-Id: Ia668f35b1129471e617bbe4713add751a0c3b242
    
  - add lower-constraints job
    
    Create a tox environment for running the unit tests against the lower
    bounds of the dependencies.
    
    Create a lower-constraints.txt to be used to enforce the lower bounds
    in those tests.
    
    Add openstack-tox-lower-constraints job to the zuul configuration.
    
    See http://lists.openstack.org/pipermail/openstack-dev/2018-March/128352.html
    for more details.
    
    Change-Id: Id52de99217d1187e3a1a638c41aba18258b6c824
    Depends-On: https://review.openstack.org/555034
    Signed-off-by: Doug Hellmann <doug@doughellmann.com>
    
  - Merge "Remove translation of log messages"
  - Updated from global requirements
    
    Change-Id: I10b05a83452b01c547d199fee56ee721a3163b27
    
  - Merge "Fix policy name"
  - Fix policy name
    
    The `update_service_status` policy was missed
    named as `update_service_service_status` which seemed
    to cause issues for other rules.
    
    Closes-Bug: #1753503
    
    Change-Id: Ic2952c36c03a4cb7a148f1518766ddefb9144dcd
    
  - Updated from global requirements
    
    Change-Id: Idd8a6b399708f0b5ee9a7b750390f3a92e29bc4d
    
  - Remove translation of log messages
    
    * Removed all log translation.
    * Always lazy-load logging.
    * Fixed broken log lines and updated tests.
    
    Logs should no longer be translated (starting with Pike)[1].
    
    Also, according to OpenStack Guideline[2], logged string message should be
    interpolated by the logger.
    
    [1]: http://lists.openstack.org/pipermail/openstack-dev/2017-March/thread.html#113365
    [2]: https://docs.openstack.org/oslo.i18n/latest/user/guidelines.html#adding-variables-to-log-messages
    
    Change-Id: I07825694f173a8bebd7d62ade089c38d3c666283
    
  - Updated from global requirements
    
    Change-Id: I679b650302c9ac79ea95e1be3a724c91f90e20cc
    
  - Merge "Removing downgrade commands"
  - Updated from global requirements
    
    Change-Id: I79aa9ed0349b188d5c0bd2c51d41fb9cb3ca8765
    
  - Do not filter pools by attributes when non are provided
    
    This change stops the AttributeFilter from filtering when no
    attributes were provided.
    
    This also removes the pool_id attribte from the request, as this
    is used in a different filter.
    
    Change-Id: If57d81e0343fa442828da7390bf20249f4791861
    
  - Imported Translations from Zanata
    
    For more information about this automatic import see:
    https://docs.openstack.org/i18n/latest/reviewing-translation-import.html
    
    Change-Id: Idb8d1b65af69eb1a6c8f7671124b28f39add5ac4
    
  - Updated from global requirements
    
    Change-Id: I3deb9840f2e67ee6f19caa5e0fb07457b9668144
    
  - Merge "Zuul: Remove project name"
  - Merge "Fix typo"
  - Updated from global requirements
    
    Change-Id: I4bd96fe8c995e1c179716c5e13fdeeb197abc680
    
  - Merge "Resolve get_dns_view error after selecting multi-tenant view"
  - Merge "Updated from global requirements"
  - Removing downgrade commands
    
    The downgrade commands have been unsupported for a very long time now.
    
    Change-Id: I584bd0164e8dc43be79eab7ab80bbff361a4a53a
    
  - Resolve get_dns_view error after selecting multi-tenant view
    
    Adds a second comparison check when deciding whether to display the single
    tenant view or multi-tenant view in Infoblox. The issue is that the DB field
    is set to '0', which is not interpreted as false.
    
    Change-Id: Id0fac71cc6d82123a7ee5d5983467acd1b8e5a9e
    Closes-Bug: 1752349
    
  - Add os-testr in test-requirements.txt
    
    This is a dependency of pretty_tox.sh that is missing
    and causing the tests to fail.
    
    Change-Id: Ibc1fcb845ed8167a3bdd7e3f7345ad8c8efcd538
    
  - Updated from global requirements
    
    Change-Id: I3ecb58b38d88a40e2c388ec8a17fa672ad850e6b
    
  - Merge "Keep NS records for subdomains during Zone import."
  - Updated from global requirements
    
    Change-Id: I92305501eafaea700bc603e022225673b6464533
    
  - Imported Translations from Zanata
    
    For more information about this automatic import see:
    https://docs.openstack.org/i18n/latest/reviewing-translation-import.html
    
    Change-Id: Ia018fb2baecad3f46487f7ae3a2b6690fa8a4ba3
    
  - Merge "Migrate object to OVO (7)"
  - Merge "Migrate object to OVO (6)"
  - Merge "Migrate object to OVO (5)"
  - Merge "Migrate object to OVO (4)"
  - Merge "Migrate object to OVO (3)"
  - Merge "Migrate object to OVO (2)"
  - Merge "Migrate object to OVO"
  - Merge "Remove install-guide tox env"
  - Migrate object to OVO (7)
    
    - Remove old base objects
    
    Co-authored-By: Nguyen Van Trung <trungnv@vn.fujitsu.com>
    
    Change-Id: Icb8817a699a8c12957126a0499d95d13b8eeda6d
    Implements: blueprint designate-rolling-upgrade
    
  - Migrate object to OVO (6)
    
    This commit will migrate:
    - ValidationError and ValidationErrorList
    
    Co-authored-By: Nguyen Van Trung <trungnv@vn.fujitsu.com>
    
    Change-Id: I00d72d83dafb28a2d94aeabd844559be92d131f2
    Implements: blueprint designate-rolling-upgrade
    
  - Migrate object to OVO (5)
    
    This commit will migrate:
    - Blacklist object
    - Quota objects
    - Floating_IP objects
    
    Co-authored-By: Dai Dang Van <daidv@vn.fujitsu.com>
    
    Change-Id: I85455e7cbf24da4c7c6302060d5c3d203fdf2fc5
    Implements: blueprint designate-rolling-upgrade
    
  - Migrate object to OVO (4)
    
    This commit will migrate:
    - Pool and PoolList
    - Related objects
    
    Co-authored-By: Dai Dang Van <daidv@vn.fujitsu.com>
    
    Change-Id: I59da0628a9dc23efe8d8665bbf3359e652eaa8c9
    Implements: blueprint designate-rolling-upgrade
    
  - Migrate object to OVO (3)
    
    This commit will migrate:
    - Server and ServerList
    - ServiceStatus and ServiceStatusList
    - Tenant and TenantList
    - Tld and TldList
    - TsigKey and TsigKeyList
    
    Co-authored-By: Nguyen Van Trung <trungnv@vn.fujitsu.com>
    
    Change-Id: I2d6ec85e0c47b2e129bc55616ad92f53a2298940
    Implements: blueprint designate-rolling-upgrade
    
  - Migrate object to OVO (2)
    
    This commit will migrate:
    - ZoneImport and ZoneImportList
    - ZoneExport and ZoneExportList
    - ZoneTransferAccept and ZoneTransferAcceptList
    - ZoneTransferRequest and ZoneTransferRequestList
    
    Co-authored-By: Nguyen Van Trung <trungnv@vn.fujitsu.com>
    
    Change-Id: I80173ce20b5ef45f0bbbc2c5552b67e1aaec0c06
    Implements: blueprint designate-rolling-upgrade
    
  - Migrate object to OVO
    
    This commit will migrate Zone and ZoneMaster objects
    
    Co-authored-By: Hieu LE <hieulq@vn.fujitsu.com>
    Co-authored-By: Nguyen Van Trung <trungnv@vn.fujitsu.com>
    
    Change-Id: I8a0b0868d25dacd3dabeb7e0436cfcf93b1e4cc7
    Implements: blueprint designate-rolling-upgrade
    
  - Merge "Remove empty files"
  - Merge "Remove Hacking check for log translation"
  - Remove empty files
    
    doc/source/_static/designate-docs.css
    is empty file. We probably should delete it.
    
    Change-Id: I9d3d3e4c42e841abc9599eba81a3b6d7d9cb1a2f
    
  - Remove install-guide tox env
    
    The install-guide tox env is not used any more after docs migration.
    
    Change-Id: I38d05065bb98c97bb08e878c94d44a18e7c1ac46
    
  - Keep NS records for subdomains during Zone import.
    
    Change-Id: I07829822b8a50b0bff0b28370d9d6d3faacd445c
    Closes-Bug: 1747016
    
  - Merge "Skip grenade job on irrelevant changes"
  - Skip grenade job on irrelevant changes
    
    We do not need to run grenade for doc-only or similiar changes, skip
    those like we skip the devstack jobs.
    
    Change-Id: I7588ecc60791815cc6908324d59b299633bf15ce
    
  - Fix unicode not define in doc with py3
    
    Under Python 3.6 in Debian Sid, I couldn't build the sphinx doc, and this
    patch fixes it. It replaces unicode by six.text_type.
    
    Change-Id: I538f10ef297fb45cb82e47f5bcb86ed214a062b0
    
  - Merge "Updated from global requirements"
  - Merge "os-loganayze fix"
  - Updated from global requirements
    
    Change-Id: Iba74f3d5dd256b78fd1d8a884de35d01e566ae01
    
  - Merge "Add sample_default for pybasedir in __init__.py"
  - Remove Hacking check for log translation
    
    Change-Id: I9ab9215e58f6b94029649b8b5cec69ef13b0b6ac
    
  - Updated from global requirements
    
    Change-Id: I92d96a97638b02a49617e78939f6921f2de53a97
    
  - Imported Translations from Zanata
    
    For more information about this automatic import see:
    https://docs.openstack.org/i18n/latest/reviewing-translation-import.html
    
    Change-Id: Ifeb82929506ba9e5d7ae4fc0faedc455ace3dc2f
    
  - Add sample_default for pybasedir in __init__.py
    
    Adding that parameter helps to make Debian package
    builds reproducible.
    
    Change-Id: I676f0bbcba4c6ddd2b1694c116169ac9a174698d
    
  - Update reno for stable/queens
    
    Change-Id: I718973d1ad3af0318cff885bca29250ae054ef41
    
  - Merge "Use secure random to generate transfer key"
  - Fix typo
    
    Change-Id: I5fe025364b4fd7a3d2f6aa9b7d8dbc6d7a944dac
    
  - Merge "Remove use of unsupported TEMPEST_SERVICES variable"
  - Merge "Updated from global requirements"
  - Merge "Remove the deprecated "giturl" option"
  - Imported Translations from Zanata
    
    For more information about this automatic import see:
    https://docs.openstack.org/i18n/latest/reviewing-translation-import.html
    
    Change-Id: I2305fda874b0609b9671e68df81750e467a0e73b
    
  - Merge "Make requirements voting again, update .zuul.yaml"
  - os-loganayze fix
    
    This fixes log output in the gate
    
    Change-Id: I7c74e45128d6d1142452619324b3394660741e4c
    
  - Correct link address in docs
    
    Link address for "DNS Server Driver Support Matrix" is out of date,
    so correct it.
    
    Change-Id: I2584ca26b3ab24e3ac44db2e5a1d5ecb3599117e
    
  - Zuul: Remove project name
    
    Zuul no longer requires the project-name for in-repo configuration.
    Omitting it makes forking or renaming projects easier.
    
    Change-Id: I0dfdb10d037d004f40ed725b5dff3c3a27074df9
    
  - Updated from global requirements
    
    Change-Id: I37d1d405c671a8037a65c7b389a007a0dc1a9c18
    
  - Updated from global requirements
    
    Change-Id: I1156d06412a8602c9d11f1da088b8b9b315e45e8
    
  - Remove use of unsupported TEMPEST_SERVICES variable
    
    TEMPEST_SERVICES global variable is not supported
    by devstack since long back.
    - I380dd20e5ed716a0bdf92aa02c3730359b8136e4
    - I9c24705e494689f09a885eb0a640efd50db33fcf
    
    Service availability of tempest known services will be
    set by devstack with local check.
    - I02be777bf93143d946ccbb8e9eff637bfd1928d4
    
    This commit removes the unused TEMPEST_SERVICES setting
    Related-Bug: #1743688
    
    Change-Id: I596e45d0922686ce916fe4342d3d6357b57b91bb
    
  - Merge "Updated from global requirements"
  - Merge "Remove v1 API"
  - Use secure random to generate transfer key
    
    python random() is not suitable for generating random keys.
    We better use SystemRandom for these purposes.
    
    Change-Id: Icceaf56e67e60e3cd07af6415df5bae2fa76ba17
    
  - Make requirements voting again, update .zuul.yaml
    
    Change  Ibc77ea864503e63f73be0f1c41e07bfe8ea3dcae needed a non-voting
    requirements change for merging, since this is in, we can make
    requirements voting again. For this, just remove it.
    
    Remove voting from the neutron-tempest-plugin-designate job since
    non-voting jobs should not run in gate.
    
    Remove name from project-stanza, this is not needed anymore.
    
    Rename designate grenade job to follow
    https://docs.openstack.org/infra/manual/drivers.html#naming-with-zuul-v3
    
    Change-Id: I794bd13bf74d2218e64b9f9922ea8abd6c9b33a0
    
  - Updated from global requirements
    
    Change-Id: I3dc494146cdc3b98c75ee81efed6f4cf756df9a1
    
  - Updated from global requirements
    
    Change-Id: I7c7cbd361f0b69ae3c6d6da3476f9a2b59784362
    
  - Remove the deprecated "giturl" option
    
    From openstackdocstheme 1.18.0, valid Git URLs can be retrieved by
    openstackdocstheme[1], we do not need giturl option anymore.
    
    [1] https://review.openstack.org/532163
    
    Change-Id: Ic7ad09aaebc5951fe8e3a254ba1cee2d61b486f8
    
  - Remove v1 API
    
    This completes the long awaited removal of the V1 API.
    
    Change-Id: I30c8a5e8569b1b86286c5e3cb07856c06ebe5803
openstack-gerrit pushed a commit to openstack/openstack that referenced this issue Jan 5, 2019
* Update nova from branch 'master'
  - Merge "libvirt: Add workaround to cleanup instance dir when using rbd"
  - Merge "Add functional regression recreate test for bug 1790204"
  - libvirt: Add workaround to cleanup instance dir when using rbd
    
    At present all virt drivers provide a cleanup method that takes a single
    destroy_disks boolean to indicate when the underlying storage of an
    instance should be destroyed.
    
    When cleaning up after an evacuation or revert resize the value of
    destroy_disks is determined by the compute layer calling down both into
    the check_instance_shared_storage_local method of the local virt driver
    and remote check_instance_shared_storage method of the virt driver on
    the host now running the instance.
    
    For the Libvirt driver the initial local call will return None when
    using the shared block RBD imagebackend as it is assumed all instance
    storage is shared resulting in destroy_disks always being False when
    cleaning up. This behaviour is wrong as the instance disks are stored
    separately to the instance directory that still needs to be cleaned up
    on the host. Additionally this directory could also be shared
    independently of the disks on a NFS share for example and would need to
    also be checked before removal.
    
    This change introduces a backportable workaround configurable for the
    Libvirt driver with which operators can ensure that the instance
    directory is always removed during cleanup when using the RBD
    imagebackend. When enabling this workaround operators will need to
    ensure that the instance directories are not shared between computes.
    
    Future work will allow for the removal of this workaround by separating
    the shared storage checks from the compute to virt layers between the
    actual instance disks and any additional storage required by the
    specific virt backend.
    
    Related-Bug: #1761062
    Partial-Bug: #1414895
    Change-Id: I8fd6b9f857a1c4919c3365951e2652d2d477df77
    
  - Merge "Move bridge creation to privsep."
  - Merge "Fix up force live migration completion docs"
  - Merge "Remove useless test samples for v2.66"
  - Merge "Fix rfc3986.is_valid_uri deprecation warnings"
  - Remove useless test samples for v2.66
    
    These samples were unused and incorrect. We don't actually need the
    sample, since v2.66 is about listing servers and filtering with
    'changes-before', so responses to show a server are unnecessary. Simply
    remove the sample.
    
    Closes-Bug: #1800936
    Change-Id: I12cf3ffd75098677cf5de1a5f40d783bb661fd74
    
  - Fix rfc3986.is_valid_uri deprecation warnings
    
    The rfc3986.is_valid_uri has been deprecated in 1.1.0.
    It generates the following warnings.
    
    DeprecationWarning: Please use rfc3986.validators.Validator instead.
    This method will be eventually removed.
    
    So this patch replaces rfc3986.is_valid_uri with
    rfc3986.validators.Validator.
    
    Even after applying this patch, the warnings are still output
    because it is caused by oslo.config.
    The fix for oslo.config will be done in another patch.
    
    Change-Id: I70aebad6c6bd384dbd11ef732226356922bf1913
    Closes-Bug: #1809755
    
  - Merge "Fix jsonutils.to_primitive UserWarning"
  - Merge "Redirect user/placement to placement docs"
  - Merge "Use oslo_db.sqlalchemy.test_fixtures"
  - Merge "libvirt: generalize rbd volume fallback removal statement"
  - Merge "Ensure rbd auth fallback uses matching credentials"
  - Merge "Properly log request headers in metadata API"
  - Use oslo_db.sqlalchemy.test_fixtures
    
    Make use of the newer fixtures in oslo_db.sqlalchemy.test_fixtures
    which is what was intended to supersede fixtures
    in oslo_db.sqlalchemy.test_base.
    
    Change-Id: Icb88c13336fffb499083197ed864b8e4e45dc241
    Closes-Bug: #1797102
    
  - Merge "Final release note for versioned notification transformation"
  - Merge "Remove mox in libvirt/test_driver.py (8)"
  - Merge "Remove mox in libvirt/test_driver.py (7)"
  - Merge "Clean up header encoding handling in compute API"
  - Merge "Drop old service version check compat from _delete_while_booting"
  - Merge "Remove "API Service Version" upgrade check"
  - Merge "Remove "Resource Providers" upgrade check"
  - Merge "Remove NovaException logging from scatter_gather_cells"
  - Merge "Add descriptions about microversions"
  - Merge "Convert exception messages to strings"
  - Merge "Fix the link to the Placement API Version History"
  - Merge "Use renamed template 'integrated-gate-py3'"
  - Merge "Add links to summit videos in user/cells.rst"
  - libvirt: generalize rbd volume fallback removal statement
    
    The warning being modified here was added in Pike:
    
      I6fc7108817fcd9df4a342c9dabbf14ab7911d06a
    
    And then updated to say we would remove the fallback in
    Queens:
    
      I006f41383dcef68d63a646665a56cbd4c3f93c4b
    
    And here we're long past Queens and still have this old
    warning with no immediate plans to do data migrations to
    drop the fallback code, so this change simply makes the
    warning message more generic.
    
    Change-Id: Icdc02d0bbd023e916bd39945fe7afc52b7a3942c
    
  - Ensure rbd auth fallback uses matching credentials
    
    As of Ocata, cinder config is preferred for rbd auth values with a
    fallback to nova values [1]. The fallback path, for the case when
    rbd_user is configured in cinder.conf and rbd_secret_uuid is not
    configured in cinder.conf, results in the mismatched use of cinder
    rbd_user with nova rbd_secret_uuid.
    
    This fixes that fallback path to use nova rbd_user from nova.conf
    with rbd_secret_uuid from nova.conf.
    
    [1] See commit f2d27f6a8afb62815fb6a885bd4f8ae4ed287fd3
    
    Thanks to David Ames for this fix.
    
    Change-Id: Ieba216275c07ab16414065ee47e66915e9e9477d
    Co-Authored-By: David Ames <david.ames@canonical.com>
    Closes-Bug: #1809454
    
  - Merge "Fix best_match() deprecation warning"
  - Merge "Fix destination_type attribute in the bdm_v2 documentation"
  - Merge "nit: Add space to feature support docs"
  - Merge "Add irrelevant-files for grenade-py3 jobs"
  - Add links to summit videos in user/cells.rst
    
    This patch is a follow-up for
    I66a2adb3ff75da6e267536f25c2eda5925f2fa87.
    
    Add links to videos recorded at Rocky or Stein summit
    in doc/source/user/cells.rst.
    
    Change-Id: Idcc77cf2eee809f3ca99f952f0635213f3bb78eb
    
  - Merge "Fix a broken link"
  - Add functional regression recreate test for bug 1790204
    
    Since Pike, the FilterScheduler "claims" resources in
    placement via allocations based on the flavor during
    scheduling. For a same-host resize, the old and new flavor
    are summed to get the overall allocation against the single
    compute node resource provider, which can cause NoValidHost
    failures during scheduling because the sum is over capacity
    for the resource provider even though the new flavor alone
    may be OK.
    
    This adds a functional regression test to recreate the bug.
    
    Change-Id: I036a5ceabe88dcc1fd85c09472481de7d02edf5f
    Related-Bug: #1790204
    
  - Merge "Remove legacy RequestSpec compat from conductor rebuild_instance"
  - Merge "Remove legacy RequestSpec compat from conductor unshelve_instance"
  - Merge "doc: Rework 'resize' user doc"
  - Merge "conf: Convert 'live_migration_inbound_addr' to HostAddressOpt"
  - Merge "Document using service user tokens for long running operations"
  - nit: Add space to feature support docs
    
    Change-Id: I13c5f9c053f848facbcbd663fc677f4f991d7105
    
  - Merge "Fix an inaccurate link in nova doc"
  - Merge "Exclude build request marker from server listing"
  - Fix a broken link
    
    Fix broken links in doc/source/user/cells.rst.
    In addition, fix a format of a console code block
    in doc/source/admin/pci-passthrough.rst.
    
    Change-Id: I66a2adb3ff75da6e267536f25c2eda5925f2fa87
    Closes-Bug: #1808906
    
  - Drop old service version check compat from _delete_while_booting
    
    Like change I11083aa3c78bd8b6201558561457f3d65007a177 the API
    should not need to have compatibility code for mitaka-era
    services, so this drops the service version check from the
    _delete_while_booting method.
    
    Change-Id: I26d58e8156b209c26d01da0baf7137d33eda4307
    
  - Remove "API Service Version" upgrade check
    
    With change I11083aa3c78bd8b6201558561457f3d65007a177
    the code for the API Service Version upgrade check no
    longer exists and therefore the upgrade check itself
    is meaningless now.
    
    Change-Id: I68b13002bc745c2c9ca7209b806f08c30272550e
    
  - Remove "Resource Providers" upgrade check
    
    With placement being extracted from nova, the
    "Resource Providers" nova-status upgrade check no
    longer works as intended since the placement data
    will no longer be in the nova_api database. As a
    result the check can fail on otherwise properly
    deployed setups with placement extracted.
    
    This check was originally intended to ease the upgrade
    to Ocata when placement was required for nova to work,
    as can be seen from the newton/ocata/pike references
    in the code.
    
    Note that one could argue the check itself as a concept
    is still useful for fresh installs to make sure everything
    is deployed correctly and nova-compute is properly
    reporting into placement, but for it to be maintained
    we would have to change it to no longer rely on the
    nova_api database and instead use the placement REST API,
    which while possible, might not be worth the effort or
    maintenance cost.
    
    For simplicity and expediency, the check is simply removed
    in this change.
    
    Related mailing list discussion can be found here [1].
    
    [1] http://lists.openstack.org/pipermail/openstack-discuss/2018-December/000454.html
    
    Change-Id: I630a518d449a64160c81410245a22ed3d985fb01
    Closes-Bug: #1808956
    
  - Fix an inaccurate link in nova doc
    
    Fix an inaccurate link in nova doc for pci-passthrough
    
    Change-Id: Ia003dea1bb0ec5c6cd6928ace5a632747efba852
    Closes-Bug: 1805902
    
  - Merge "Update port device_owner when unshelving"
  - Merge "Handle unbound vif plug errors on compute restart"
  - Merge "Move a generic bridge helper to a linux_net privsep file."
  - Exclude build request marker from server listing
    
    When listing "real" (already in cell) instances e.g. from
    nova_cell1.instances table, a marker option means "start after the
    instance with marker".
    
    For VMs:
    
    | uuid | name |
    | 1    | vm1  |
    | 2    | vm2  |
    
    "openstack server list --marker 1" returns vm2 only.
    
    But for VMs from nova_api.build_requests table it's different.
    
    For VMs:
    
    | uuid | name |
    | 1    | vm1  |
    | 2    | vm2  |
    
    "openstack server list --marker 1" returns both vm1 and vm2.
    
    This patch excludes instance with marker from listing for
    instances from build_requests table.
    
    Closes-Bug: #1808286
    Change-Id: I5165b69f956fbf1904112a742698b2739f747e72
    
  - Document using service user tokens for long running operations
    
    A recent thread in the mailing list [1] reminded me that we
    don't have any documentation for the service user token feature
    added back in ocata under blueprint use-service-tokens.
    
    This change adds a troubleshooting entry for when using service
    user tokens would be useful, and links to it from two known
    trouble spots: live migration timeouts and creating images.
    
    [1] http://lists.openstack.org/pipermail/openstack-discuss/2018-December/001130.html
    
    Change-Id: I1dda889038ffe67d53ceb35049aa1f2a9da39ae8
    Closes-Bug: #1809165
    
  - Merge "Remove legacy RequestSpec compat code from live migrate task"
  - Redirect user/placement to placement docs
    
    The placement api-ref had a link to user/placement.html in nova. That is
    being fixed in Ibfe016f25a29b6810ea09c5d03a01dbf3c53371f but the link
    is now loose in the internets, using the 'latest' prefix, so we want to
    make sure that what is currently showing as a 404 goes somewhere useful,
    in this case the top of the placement docs.
    
    Change-Id: Ib75547ac655e614441dec5e1bcc7784c2b6a070c
    
  - Merge "Fix a broken-link in nova doc"
  - Merge "Address nits on I1f1fa1d0f79bec5a4101e03bc2d43ba581dd35a0"
  - Merge "Address nits on I08991796aaced2abc824f608108c0c786181eb65"
  - Handle unbound vif plug errors on compute restart
    
    As with change Ia963a093a1b26d90b4de2e8fc623031cf175aece, we can
    sometimes cache failed port binding information which we'll see on
    startup. Long term, the fix for both issues is to figure out how this is
    being cached and stop that happening but for now we simply need to allow
    the service to start up.
    
    To this end, we copy the approach in the aforementioned change and
    implement a translation function in os_vif_util for unbound which
    will make the plug_vifs code raise VirtualInterfacePlugException which
    is what the _init_instance code in ComputeManager is already handling.
    
    This has the same caveats as that change, namely that there may be
    smarter ways to do this that we should explore. However, that change
    also included a note which goes someway to explaining this.
    
    Change-Id: Iaec1f6fd12dba8b11991b7a7595593d5c8b1db50
    Signed-off-by: Stephen Finucane <sfinucan@redhat.com>
    Related-bug: #1784579
    Closes-bug: #1809136
    
  - Fix a broken-link in nova doc
    
    Fix a broken-link in nova doc for pci-passthrough
    
    Change-Id: I350ee26710125f87d2e71df604ec87a38d6e997b
    Related-Bug: 1805901
    
  - Merge "Fix a broken-link in nova doc"
  - Merge "Remove legacy request spec compat code from API"
  - Fix a broken-link in nova doc
    
    Fix a broken-link in nova doc for pci-passthrough
    
    Change-Id: I27648eb2594874036a8850fce63ff2c4f7f8abc2
    Closes-Bug: 1805901
    
  - Use renamed template 'integrated-gate-py3'
    
    'integrated-gate-py35' template is going to be
    renamed to 'integrated-gate-py3' in https://review.openstack.org/#/c/626078/
    
    Integrated jobs are running on Bionic now where python 3.6 is available.
    Which means gate jobs in 'integrated-gate-py35' template are
    running on python 3.6 not on 3.5 which makes this template name confusing.
    
    depends on commit rename the 'integrated-gate-py35' to 'integrated-gate-py3'
    so that it can convey that template will use available python 3 version
    in used distro. For example: 3.5 in xenial and 3.6 in bionic and so on.
    
    This commit starts using the new template name so that old
    template name can be removed.
    
    Depends-On: https://review.openstack.org/#/c/626078/
    Change-Id: I7f2bc476d0be7994feef781cb254c8b0c53b8b5b
    
  - Merge "Make [cinder]/catalog_info no longer require a service_name"
  - Merge "Drop request spec migration code"
  - Merge "allow tcp-based consoles in get_console_output"
  - Remove legacy RequestSpec compat from conductor rebuild_instance
    
    Change I34ffaf285718059b55f90e812b57f1e11d566c6f made the
    RequestSpec lookup required in the API, so we should not get
    to conductor's rebuild_instance() method without a request spec
    so this change removes the compat code from that method.
    
    Related to blueprint request-spec-use-by-compute
    
    Change-Id: I0a8c18df7ef060647e822e81064d4c663166db8f
    
  - Remove legacy RequestSpec compat from conductor unshelve_instance
    
    Change I34ffaf285718059b55f90e812b57f1e11d566c6f made the
    RequestSpec lookup required in the API, so we should not get
    to conductor's unshelve_instance() method without a request spec
    so this change removes the compat code from that method.
    
    Related to blueprint request-spec-use-by-compute
    
    Change-Id: Ib2b9fb728b92ba3dbefe0a2eb7a9f04035758735
    
  - Remove legacy RequestSpec compat code from live migrate task
    
    Change I34ffaf285718059b55f90e812b57f1e11d566c6f made the
    RequestSpec lookup required in the API, so we should not get
    to conductor during a live migration without a request spec.
    This change removes the old compat code from the conductor
    live migration task.
    
    Related to blueprint request-spec-use-by-compute
    
    Change-Id: I88e175ed4e6d509029aef256d69686d1876374bb
    
  - Remove legacy request spec compat code from API
    
    For operations which require a request spec, we now require that
    the request spec exists when we look it up in the API or we fail.
    All instances created since Newton should have a request spec, and
    instances created before Newton should have been migrated to have
    a request spec as part of an online data migration. Failing to find
    a request spec will now result in a 500 internal server error.
    
    As a result, the RequestSpec.get_by_instance_uuid query is moved
    to before updating the instance.task_state in the various API methods
    since we want to do all we can before updating the instance in case
    we fail.
    
    Related to blueprint request-spec-use-by-compute
    
    Change-Id: I34ffaf285718059b55f90e812b57f1e11d566c6f
    
  - Merge "Migrate "reboot an instance" user guide docs"
  - Address nits on I1f1fa1d0f79bec5a4101e03bc2d43ba581dd35a0
    
    Change-Id: I3e88a1449aca4feedb3d40b238cbeeca3dbcfd69
    Signed-off-by: Stephen Finucane <sfinucan@redhat.com>
    
  - Address nits on I08991796aaced2abc824f608108c0c786181eb65
    
    - Move deprecated services to the end of the document
    - Update incorrect information regarding nova-consoleauth
    - Move configuration options that were specified for the wrong service
    - Don't give the impression that the serial console is libvirt-only
    
    Change-Id: Ie0fd987a1e5c130b8e31c84910814d5d051f2b31
    
  - doc: Rework 'resize' user doc
    
    Remove a lot of noise and make things more generic through use of
    variables rather than hardcoded values.
    
    Change-Id: Ief498f902f24e5991cf463323db78729ae6f8d89
    Signed-off-by: Stephen Finucane <sfinucan@redhat.com>
    
  - Migrate "reboot an instance" user guide docs
    
    This imports the cli-reboot-an-instance end user guide docs from
    the openstack-manuals repo [1]. As part of the docs migration
    in Pike, these were forgotten. The copied contents come from
    the stable/ocata branch of openstack-manuals [2].
    
    There are two minor content changes from the original:
    
    1. The "shutdown_timeout" config option is linked to the docs.
    
    2. The "nova rescue" command usage is replaced with
       "openstack server rescue".
    
    [1] https://docs.openstack.org/ocata/user-guide/cli-reboot-an-instance.html
    [2] https://github.com/openstack/openstack-manuals/blob/stable/ocata/doc/user-guide/source/cli-reboot-an-instance.rst
    
    Change-Id: I6701e43fd80fb17df5cc703df766390ab838289a
    Partial-Bug: #1714017
    
  - Fix jsonutils.to_primitive UserWarning
    
    The CheatingSerializer fixture used in nova tests keeps
    the RequestContext.db_connection set on the context object
    which otherwise wouldn't normally happen. The context object
    can show up in error notification payloads because of how
    nova.exception_wrapper.wrap_exception works. That payload
    is eventually serialized for notifications and since the
    cheated RequestContext.db_connection is set and cannot be
    serialized, it results in a UserWarning from the
    jsonutils.to_primitive method (called via JsonPayloadSerializer).
    
    This will eventually result in failures when that UserWarning
    is made into an error.
    
    To fix this, we can pass a fallback method to to_primitive()
    which will serialize a RequestContext object the same way that
    RequestContextSerializer serializes a context - by simply
    converting it to dict form.
    
    Since this only affects test runs, because of using the
    CheatingSerializer fixture, it should have no impact on
    runtime serializations.
    
    Error logging is added to the FakeNotifier since it's hard
    to know what is wrong in the payload unless it is logged.
    
    Also, the WarningsFixture is updated to make sure we don't
    introduce new UserWarnings for the serialization issue.
    
    The jsonutils.to_primitive() fallback method was added to
    oslo.serialization via commit cdb2f60d26e3b65b6370f87b2e9864045651c117
    in 2.21.1 so we have to bump our minimum required version
    of that library as well.
    
    Change-Id: Id9f960a0c7c8897dbb9edf53b4723154341412d6
    Closes-Bug: #1799249
    
  - Move bridge creation to privsep.
    
    Change-Id: I4b34e8ff2f43f2d94762202c20501209862bc1d5
    
  - Move a generic bridge helper to a linux_net privsep file.
    
    This is more generic than libvirt, and in fact libvirt isn't
    calling it any more. Move it to a better location and have
    linux_net call it as well.
    
    Change-Id: I74f9922f789c974b052b5ee0ebb002200b0a7061
    
  - Merge "Fail to live migration if instance has a NUMA topology"
  - Merge "Migrate upgrade checks to oslo.upgradecheck"
  - Properly log request headers in metadata API
    
    Currently we log the request headers in the metadata
    API in a useless form:
    
      DEBUG nova.api.metadata.handler [None \
      req-4b5eab00-e132-4551-b7f8-c80a238727a2 None None] \
      Metadata request headers: <webob.headers.EnvironHeaders object \
      at 0x7f2d6fdb5e90> {{(pid=9311) __call__ \
      /opt/stack/nova/nova/api/metadata/handler.py:99}}
    
    This change builds a dict from the headers and then
    also masks any sensitive information before logging it,
    but only does this if debug logging is enabled.
    
    Closes-Bug: #1808879
    
    Change-Id: I609d96293f7e77f59df3f33240f5fc4bb72470d0
    
  - Merge "Remove utils.execute() from virt.disk.api."
  - Merge "Remove utils.execute() from the hyperv driver."
  - Drop request spec migration code
    
    This removes the request spec online data migration
    routine added via change I61b9b50436d8bdb8ff06259cc2f876502d688b91
    in Newton.
    
    A nova-status upgrade check was added for this in Rocky with
    change I1fb63765f0b0e8f35d6a66dccf9d12cc20e9c661 so operators should
    be able to tell, either from the results of the nova-status upgrade
    check command or "nova-manage db online_data_migrations" command,
    whether or not they have completed the migration and can upgrade to
    Stein.
    
    This also allows us to start removing the various compat checks
    in the API and conductor services for old instances that predated
    having a request spec since those should have a request spec now
    via the online data migration.
    
    Related to blueprint request-spec-use-by-compute
    
    Change-Id: Ib0de49b3c0d6b3d807c4eb321976848773c1a9e8
    
  - Merge "Add py36/py37 functional jobs to the experimental queue"
  - Merge "Restore nova-consoleauth to install docs"
  - Merge "Mention size limit on user data in docs"
  - Merge "api-ref: sort parameters for limits, quotas and quota classes"
  - Merge "Add python 3.7 unit and functional tox jobs"
  - Merge "Replace ThreadPoolExecutor with GreenThreadPoolExecutor"
  - Fix best_match() deprecation warning
    
    wsgi call to best_match() generates the following warning:
    
    DeprecationWarning: The behavior of .best_match for the Accept classes
    is currently being maintained for backward compatibility,
    but the method will be deprecated in the future,
    as its behavior is not specified in
    (and currently does not conform to) RFC 7231.
    
    See the following URL for more information about deprecation.
    
    https://docs.pylonsproject.org/projects/webob/en/stable/api/webob.html#webob.acceptparse.AcceptValidHeader.best_match
    
    Simlar changes in the wsgi best language code as well,
    except new call is to lookup().
    
    Change-Id: Ib93ffffd3f28aa6d53a0a4eed5aeee94900cb073
    Closes-Bug: #1798224
    
  - Remove mox in libvirt/test_driver.py (8)
    
    Replace mox with mock or stub_out in the following methods of
    the LibvirtVolumeSnapshotTestCase class
    in nova/tests/unit/virt/libvirt/test_driver.py.
    
    * test_volume_snapshot_delete_relative_2
    * test_volume_snapshot_delete_outer_success
    * test_volume_snapshot_delete_outer_failure
    * test_volume_snapshot_delete_invalid_type
    * test_volume_snapshot_delete_netdisk_1
    * test_volume_snapshot_delete_netdisk_relative_1
    * test_volume_snapshot_delete_netdisk_relative_2
    
    This patch completes replacing mox in the file.
    
    Change-Id: Id9184c4ef301ef48534e4c104b073a2d3731133b
    Implements: blueprint mox-removal-stein
    
  - Remove mox in libvirt/test_driver.py (7)
    
    Replace mox with mock or stub_out in the following methods of
    the following classes
    in nova/tests/unit/virt/libvirt/test_driver.py.
    
    * LibvirtVolumeUsageTestCase
      - test_get_all_volume_usage
      - test_get_all_volume_usage_device_not_found
    
    * LibvirtNonblockingTestCase
      - test_tpool_execute_calls_libvirt
    
    * LibvirtVolumeSnapshotTestCase
      - _test_volume_snapshot_create
      - test_volume_snapshot_create_libgfapi
      - test_volume_snapshot_create_outer_failure
      - test_volume_snapshot_delete_1
      - test_volume_snapshot_delete_relative_1
    
    Subsequent patches will replace mox in other test cases.
    
    Change-Id: I8f0deb4fcd1ef063752e8250c6b13bf9275e5204
    Implements: blueprint mox-removal-stein
    
  - Fix the link to the Placement API Version History
    
    The Placement REST API Version History page has been
    created by splitting the Placement doc top page (index.html)
    since I66e0c7d18b253b0a5a8fdac65e30b5b3cef37db2.
    
    So the link to the Placement REST API Version History
    is updated in the nova doc.
    
    Change-Id: I60701b09ade203b35d4d1281eb32b177543c064a
    
  - Merge "Remove the final user of utils.execute() from virt.images"
  - Add descriptions about microversions
    
    This patch is a follow-up patch
    for I3e1ca88cac3a52a8b44e26f051a51a6db77a3231.
    
    Add descriptions about microversions in the parameter section
    in the API reference guideline.
    
    Change-Id: I266d44cf96945445115b843aacbc29083e21bd8e
    
  - Merge "libvirt: remove live_migration_progress_timeout config"
  - Merge "libvirt: add live migration timeout action"
  - Merge "Add API ref guideline for body text"
  - Merge "Remove final users of utils.execute() in libvirt."
  - Merge "Imagebackend should call processutils.execute directly."
  - Merge "Remove GROUP BY clause from CellMapping.get_by_project_id"
  - Migrate upgrade checks to oslo.upgradecheck
    
    The common upgrade check code has been moved to oslo.upgradecheck.
    This change switches the Nova upgrade checks to use the common code
    and removes the tests for functionality that is now the responsibility
    of the library.
    
    Change-Id: I0dc2044286dbe78314c650a92c4654f7f50642d2
    
  - Merge "Remove lock on SchedulerReportClient._create_client"
  - Fix up force live migration completion docs
    
    This change does a few things:
    
    * Links live_migration_completion_timeout to the config
      option guide.
    
    * Links the force complete API reference to the feature support
      matrix to see which drivers support the operation.
    
    * Fixes the server status mentioned in the troubleshooting for
      the force complete API reference (a live migrating server
      status is MIGRATING, not ACTIVE). The same text is copied to the
      abort live migration API reference troubleshooting for
      consistency (and since using the server status is more natural than
      the task_state).
    
    * Links to the admin guide for troubleshooting live migration
      timeouts.
    
    Change-Id: I496d3f4b99e3d7e978c7ecb13ab3b67023fcb919
    Closes-Bug: #1808579
    
  - libvirt: remove live_migration_progress_timeout config
    
    Config option ``libvirt.live_migration_progress_timeout`` was
    deprecated in Ocata, and can now be removed.
    
    This patch remove live_migration_progress_timeout and also remove
    the migration progress timeout related logic.
    
    Change-Id: Ife89a705892ad96de6d5f8e68b6e4b99063a7512
    blueprint: live-migration-force-after-timeout
    
  - libvirt: add live migration timeout action
    
    This patch remove the auto trigger post-copy, and add a new libvirt
    configuration 'live_migration_completion_action'.
    
    This option determines what actions will be taken against a VM after
    ``live_migration_completion_timeout`` expires. This option is set to
    'abort' action by default, that means the live migrate operation will
    be aborted after completion timeout expires. If option is set to
    'force_complete', that means will either pause the VM or trigger
    post_copy depending on if post copy is enabled and available.
    
    Note that the progress based post-copy triggering from the libvirt
    driver will be removed in next patch [1].
    
    [1] Ife89a705892ad96de6d5f8e68b6e4b99063a7512
    
    Change-Id: I0d286d12e588b431df3d94cf2e65d636bcdea2f8
    blueprint: live-migration-force-after-timeout
    
  - Fail to live migration if instance has a NUMA topology
    
    Live migration is currently totally broken if a NUMA topology is
    present. This affects everything that's been regrettably stuffed in with
    NUMA topology including CPU pinning, hugepage support and emulator
    thread support. Side effects can range from simple unexpected
    performance hits (due to instances running on the same cores) to
    complete failures (due to instance cores or huge pages being mapped to
    CPUs/NUMA nodes that don't exist on the destination host).
    
    Until such a time as we resolve these issues, we should alert users to
    the fact that such issues exist. A workaround option is provided for
    operators that _really_ need the broken behavior, but it's defaulted to
    False to highlight the brokenness of this feature to unsuspecting
    operators.
    
    Change-Id: I217fba9138132b107e9d62895d699d238392e761
    Signed-off-by: Stephen Finucane <sfinucan@redhat.com>
    Related-bug: #1289064
    
  - Add DownCellFixture
    
    This adds a new testing fixture which allows controlling
    when nova.context.scatter_gather_cells returns exception
    results for down cells. This will be useful in functional
    tests for the down-cell support API microversion to show
    the API returning minimal construct results for resources
    in down cells like instances and services.
    
    Part of blueprint handling-down-cell
    
    Change-Id: Iabc1e55550e8d9d82e20facfaf84316892c5564a
    
  - Merge "DRY up SchedulerReportClient init"
  - Merge "Only construct SchedulerReportClient on first access from API"
  - Merge "Use external placement in functional tests"
  - Remove GROUP BY clause from CellMapping.get_by_project_id
    
    Under postgresql, the GROUP BY clause in this query fails with:
    
      DBError: (psycopg2.ProgrammingError) column "instance_mappings.created_at"
      must appear in the GROUP BY clause or be used in an aggregate function
    
    And we're getting lucky with using this under mysql because we don't
    have the ONLY_FULL_GROUP_BY mode set (but we probably should).
    
    This change removes the GROUP BY clause and re-writes the query
    to avoid the joinedload() from the instance_mappings table and
    simply do a subquery to get the cell_ids and then do a simple
    IN query with the cell_mappings table. This fixes the GROUP BY
    issue and should also make the query more efficient since we
    won't have to load InstanceMappings ORM objects.
    
    Change-Id: Idc9b5ad019205f447c82a702dd3391fa5dd20228
    Closes-Bug: #1804271
    
  - Add py36/py37 functional jobs to the experimental queue
    
    Change-Id: I2afc65ea0f19a416a878139e238d54287b4b51c4
    
  - Add python 3.7 unit and functional tox jobs
    
    Without these, if you try to run tox -epy37,functional-py37 you'll
    get a successful tox run, but no actual tests are run, which is
    rather misleading. Given the generaly availability of python 3.7
    this is a bad thing.
    
    Running the tests under python 3.7 identified a few minor tests
    failures, also fixed here. Each is a result of a change in behavior in
    python 3.7:
    
    * printable unicode changes with a new Unicode 11-based unicodedata
      package
    * intentionally raising StopIteration in a generator is now considered a
      RuntimeError, 'return' should be used instead
    * an exception message is different beween python 3 and python 2, and the
      guard for it was mapping python 3.5 and 3.6 but not 3.7.
    
    zuul configuration is adjusted to add an experimental job for python 3.7
    unit. A functional test job is not added, because we don't have 3.6 yet,
    and we probably want to get through that first.
    
    Closes-Bug: #1807976
    Closes-Bug: #1807970
    Change-Id: I37779a12d3b36eb3dc7e2733d07fe0ed23ab3da6
    
  - Replace ThreadPoolExecutor with GreenThreadPoolExecutor
    
    Based on eventlet issue [1] ThreadPoolExecutor doesn't play nice with
    eventlet in python 3.7. We saw deadlocks in the functional-py37
    execution in live migration tests due to live migration using
    ThreadPoolExecutor.
    
    The [1] suggests to replaces ThreadPoolExecutor with
    futurist.GreenThreadPoolExecutor to avoid deadlocks. So this patch does
    the replacement and adjusts the unit tests accordingly.
    
    As the ThreadPoolExecutor was the last used class from the futures
    module we remove that from the requirements and add the futurist module
    instead.
    
    [1] https://github.com/eventlet/eventlet/issues/508
    
    Change-Id: Ia56ab43be739e677760bbad5c40caad924425fa5
    
  - Fix destination_type attribute in the bdm_v2 documentation
    
    All the clients using block device mapping are using the attribute
    destination_type and the documentation points to dest_type instead.
    
    Change-Id: Iba6e698e826d1a1898fde5cc999592f5821e3ebc
    Co-Authored-By: David Moreno Garcia <david.mogar@gmail.com>
    Closes-Bug: #1808358
    
  - Add irrelevant-files for grenade-py3 jobs
    
    grenade-py3 job is part of integrated-gate-py35
    template now[1]
    
    Adding corresponding irrelevant-files for grenade-py3
    also same as for other integrated jobs to avoid
    running it on test etc only changes
    Example- https://review.openstack.org/#/c/576712/
    
    [1] http://git.openstack.org/cgit/openstack-infra/openstack-zuul-jobs/tree/zuul.d/project-templates.yaml#n1397
    
    Change-Id: I80580449198698edb9a90f2e3df42f225d7deb51
    
  - allow tcp-based consoles in get_console_output
    
    Tcp based consoles already offer a logfile but the information
    resides in a different path in the hosts XML. This change adds
    an additional xpath for tcp-based consoles.
    
    Closes-Bug: #1776481
    Change-Id: I9bfd14c72b1e891cb67562f6a07ceea916c3ed65
    
  - Merge "refactor get_console_output() for console logfiles"
  - Merge "Remove allocations before setting vm_status to SHELVED_OFFLOADED"
  - Merge "Make compute rpcapi version calculation check all cells"
  - Use external placement in functional tests
    
    Adjust the fixtures used by the functional tests so they
    use placement database and web fixtures defined by placement
    code. To avoid making redundant changes, the solely placement-
    related unit and functional tests are removed, but the placement
    code itself is not (yet).
    
    openstack-placement is required by the functional tests. It is not
    added to test-requirements as we do not want unit tests to depend
    on placement in any way, and we enforce this by not having placement
    in the test env.
    
    The concept of tox-siblings is used to ensure that the
    placement requirement will be satisfied correctly if there is a
    depends-on. To make this happen, the functional jobs defined in
    .zuul.yaml are updated to require openstack/placement.
    
    tox.ini has to be updated to use a envdir that is the same
    name as job. Otherwise the tox siblings role in ansible cannot work.
    
    The handling of the placement fixtures is moved out of nova/test.py
    into the functional tests that actually use it because we do not
    want unit tests (which get the base test class out of test.py) to
    have anything to do with placement. This requires adjusting some
    test files to use absolute import.
    
    Similarly, a test of the comparison function for the api samples tests
    is moved into functional, because it depends on placement functionality,
    
    TestUpgradeCheckResourceProviders in unit.cmd.test_status is moved into
    a new test file: nova/tests/functional/test_nova_status.py. This is done
    because it requires the PlacementFixture, which is only available to
    functional tests. A MonkeyPatch is required in the test to make sure that
    the right context managers are used at the right time in the command
    itself (otherwise some tables do no exist). In the test itself, to avoid
    speaking directly to the placement database, which would require
    manipulating the RequestContext objects, resource providers are now
    created over the API.
    
    Co-Authored-By: Balazs Gibizer <balazs.gibizer@ericsson.com>
    Change-Id: Idaed39629095f86d24a54334c699a26c218c6593
    
  - Remove lock on SchedulerReportClient._create_client
    
    This is a follow up to change Idf6e548d725db0181629a451f46b6a3a5850d186
    where the compute API started lazy-loading the SchedulerReportClient
    because of slow startup times, presumably because of the locking
    when creating SchedulerReportClient.
    
    The lock on SchedulerReportClient._create_client is removed
    since there is no clear indication that it is necessary. It was
    added in change I02ac615dc26a4a0d1fd28a638f622777e41d14e4 as a
    precaution:
    
      "I've made the _client method synchronized so that in the unlikely event
       that the resource tracker is trying to do its update job while some
       other thing is happening, we won't waste the client. This may not be
       necessary, but probably doesn't harm anything."
    
    Long-term we could consider making SchedulerReportClient a global
    singleton so a TODO is left for that since it would require inspecting
    cache-sensitive methods to see if a lock is necessary.
    
    Change-Id: I127e8b78c0dfd5c42a1e1f509dc4fca1af3d5f89
    Related-Bug: #1807219
    Related-Bug: #1806912
    
  - DRY up SchedulerReportClient init
    
    The _provider_tree and _association_refresh_time
    variables were being initialized and then overwritten
    in _create_client, so rather than do that, this change
    just makes _create_client call clear_provider_cache
    to do the same thing. A flag is passed to clear_provider_cache
    to avoid logging something useful on construction of the
    class instance.
    
    Change-Id: Ib342fa48351cd86b34434e07e81e1f3818ec109d
    
  - Only construct SchedulerReportClient on first access from API
    
    With commit 5d1a50018510b2b281ad33895ae2d9555f5d5b05 each
    API/AggregateAPI class instance constructs a SchedulerReportClient
    which holds an in-memory lock during its initialization.
    
    With at least 34 API extensions constructing at least
    one of those two API classes, the accumulated affect of the
    SchedulerReportClient construction can slow down nova-api startup
    times, especially when running with multiple API workers, like
    in our tempest-full CI job (there are 2 workers, so 68 inits).
    
    This change simply defers constructing the SchedulerReportClient
    until it is used, which is only in a few spots in the API code,
    which should help with nova-api start times.
    
    The AggregateAPI also has to construct the SchedulerQueryClient
    separately because SchedulerClient creates both the query and
    report clients.
    
    Long-term we could consider making it a singleton in nova.compute.api
    if that is safe (the aggregate code might be relying on some caching
    aspects in the SchedulerReportClient).
    
    Change-Id: Idf6e548d725db0181629a451f46b6a3a5850d186
    Closes-Bug: #1807219
    
  - Merge "Drop pre-cellsv2 compat in compute API.get()"
  - Merge "Handle tags in _bury_in_cell0"
  - Merge "Only warn about not having computes nodes once in rpcapi"
  - Merge "Fix typo"
  - Remove utils.execute() from virt.disk.api.
    
    Change-Id: I359a412fcabe9e59c99167b35bb3be6553e5f41b
    
  - Remove utils.execute() from the hyperv driver.
    
    Change-Id: I2e47b214baec4dbe6657976d1807c0d0710f8f62
    
  - Remove the final user of utils.execute() from virt.images
    
    Change-Id: Ic2ff70c73c4528d9d92b5b0aa225558e451cb819
    
  - Remove final users of utils.execute() in libvirt.
    
    Let us never speak of these things again.
    
    Change-Id: I9bcc66b0dc203e08222276bced77d4409c3adcea
    
  - Imagebackend should call processutils.execute directly.
    
    What it says on the tin.
    
    Change-Id: I43de49851d435e2eb62f6806507f0e68cd690d2c
    
  - Handle tags in _bury_in_cell0
    
    We allowed add instance tags when booting in
    Iac54b9627cb4398e45f1f15a2f4e7d6f86242093, conductor
    will create tags for us in the selected cell, but
    we forgot to consider the case that no valid host
    was found.
    
    So we will be unable to filter those instances in
    cell0 with tags.
    
    Change-Id: Idfe37d356b349024dfe963c934728111e1a1d314
    closes-bug: #1806515
    
  - Make compute rpcapi version calculation check all cells
    
    For top-level services, the compute rpcapi module needs to check for the
    minimum version of nova-compute in all cells in order to function
    properly during an upgrade. This moves that module to use the all-cells
    variant of this routine in the case where [api_database]/connection is
    set.
    
    Change-Id: Icddbe4760eaff30e4e13c1e8d3d5d3f489dac3c4
    Closes-Bug: #1807044
    
  - Only warn about not having computes nodes once in rpcapi
    
    When we instantiate the compute rpcapi, with upgrade_levels=auto,
    we determine the minimum service version of nova-compute. If we
    find no computes, we log a message. This may be known, if we are
    starting at zero day and no computes have started, but may also
    indicate a more serious problem. In either case, logging this once
    per process (especially in the case of multi-worker, multi-module
    services) is more than enough.
    
    Change-Id: I3350026c872a548839b857c53529c1dbbb88091c
    Related-Bug: #1807044
    
  - Fix typo
    
    Change-Id: Ie698db56dfab5cdc03826c8ca0e8c60ad5f2cdc9
    Signed-off-by: Stephen Finucane <sfinucan@redhat.com>
    
  - Merge "Move nova.libvirt.utils away from using nova.utils.execute()."
  - Merge "Remove utils.execute() from quobyte libvirt storage driver."
  - Merge "Move nova-cells-v1 to experimental queue"
  - Move nova.libvirt.utils away from using nova.utils.execute().
    
    We require it not.
    
    Change-Id: I1509fd4225d7ac7e5da35f6f643222df5b73835c
    
  - Remove utils.execute() from quobyte libvirt storage driver.
    
    Choppy choppy.
    
    Change-Id: I21b7b14be8064211bfe9699ec9a9ad2bedd73519
    
  - refactor get_console_output() for console logfiles
    
    Refactor/simplify libvirt get_console_output() to allow integration
    of other console types from the hosts XML description
    
    completely restructure get_console_output():
    - make common code flow visible,
      including output and exceptions
    - simplify selection of console sources with one extensible struct
    - common checks for each error type (console not found/file not found)
    - extract pty-specific code
    
    functional changes:
    - none
    
    side effects:
    - Existence of pty-type consoles is now explicitly checked by the code and
      returns the same 'console logfile for instance does not exist' message
      as the  filebased console. Before, this case most likely triggered some
      obscure logmessage from readpty(). API-functionality is unchanged by
      this, both old and new code return an empty string.
    
    Closes-Bug: #1776481
    Change-Id: I3eac592f938a8d4ba813df535070e99b3130e863
    
  - Merge "Add docs for (initial) allocation ratio configuration"
  - Merge "Note the aggregate allocation ratio restriction in scheduler docs"
  - Merge "Add compute_node ratio online data migration script"
  - Merge "Add ratio online data migration when load compute node"
  - Final release note for versioned notification transformation
    
    As the last versioned notification transformation patch
    I019e88fabd1d386c0d6395a7b1969315873485fd has been merged
    this patch adds a release note that the versioned interface is
    complete.
    
    Change-Id: I22586e470356cca5238b94faf257d8886742618f
    Implements: bp versioned-notification-transformation-stein
    
  - Merge "Transform scheduler.select_destinations notification"
  - Add API ref guideline for body text
    
    Add guideline for body text in the API reference.
    
    Change-Id: Ib03b562ffe189f24293eb77dd0c0ed5ec679172a
    Partial-Bug: #1793034
    
  - Merge "Transform compute_task notifications"
  - Merge "Remove Placement API reference"
  - Merge "Ignore MoxStubout deprecation warnings"
  - Merge "Create BDMs/tags in cell with instance when over-quota"
  - Merge "Drop cruft code for all_tenants behaviour"
  - Merge "Use new ``initial_xxx_allocation_ratio`` CONF"
  - Merge "Remove utils.execute() from libvirt remotefs calls."
  - Merge "Use links to placement docs in nova docs"
  - Merge "Fixed concurrent access to direct io test file"
  - Merge "Remove placement perf check"
  - Merge "Add secret=true to fixed_key configuration parameter"
  - Merge "Add functional regression test for bug 1806064"
  - Remove allocations before setting vm_status to SHELVED_OFFLOADED
    
    Tempest is intermittently failing a test which does the
    following:
    
    1. Create a server.
    2. Shelve offload it.
    3. Unshelve it.
    
    Tempest waits for the server status to be SHELVED_OFFLOADED
    before unshelving the server, which goes through the
    scheduler to pick a compute node and claim resources on it.
    
    When shelve offloading a server, the resource allocations
    for the instance and compute node it was on are cleared, which
    will also delete the internal consumer record in the placement
    service.
    
    The race is that the allocations are removed during shelve
    offload *after* the server status changes to SHELVED_OFFLOADED.
    This leaves a window where unshelve is going through the
    scheduler and gets the existing allocations for the instance,
    which are non-empty and have a consumer generation. The
    claim_resources method in the scheduler then uses that
    consumer generation when PUTing the allocations. That PUT
    fails because in between the GET and PUT of the allocations,
    placement has deleted the internal consumer record. When
    PUTing the new allocations with a non-null consumer generation,
    placement returns a 409 conflict error because for a new
    consumer it expects the "consumer_generation" parameter to be
    None.
    
    This change handles the race by simply making sure the allocations
    are deleted (along with the related consumer record in placement)
    *before* the instance.vm_status is changed.
    
    Change-Id: I2a6ccaff904c1f0759d55feeeef0ec1da32c65df
    Closes-Bug: #1798688
    
  - Drop pre-cellsv2 compat in compute API.get()
    
    This removes the nova-osapi_compute service version
    compatibility check for cells v2 which was added in
    Newton.
    
    A "nova-status upgrade check" was added for that
    in Rocky:
    
      Ie2bc4616439352850cf29a9de7d33a06c8f7c2b8
    
    And it is also causing issues with functional tests
    where instances are buried in cell0 and because we
    don't use the instance mapping, we fail to find the
    instance.
    
    As a result of this, compute API tests that rely on
    retrieving a real instance out of the database will
    also need to make sure an associated instance mapping
    record exists.
    
    Change-Id: I11083aa3c78bd8b6201558561457f3d65007a177
    Closes-Bug: #1800472
    
  - Move nova-cells-v1 to experimental queue
    
    Cells v1 has been deprecated since Pike. CERN
    has been running with cells v2 since Queens.
    The cells v1 job used to be the only thing that
    ran with nova-network, but we switched the job
    to use neutron in Rocky:
    
      I9de6b710baffdffcd1d7ab19897d5776ef27ae7e
    
    The cells v1 job also suffers from intermittent
    test failures, like with snapshot tests.
    
    Given the deprecated nature of cells v1 we should
    just move it to the experimental queue so that it
    can be run on-demand if desired but does not gate
    on all nova changes, thus further moving along its
    eventual removal.
    
    This change also updates the cells v1 status doc
    and adds some documentation about the different
    job queues that nova uses for integration testing.
    
    Change-Id: I74985f1946fffd0ae4d38604696d0d4656b6bf4e
    Closes-Bug: #1807407
    
  - Merge "Update compute API.get() stubs in test_access_ips"
  - Merge "Update compute API.get() stubs for test_disk_config"
  - Merge "Update compute API.get() stubs for test_*security_groups"
  - Merge "Use tempest [compute]/build_timeout in evacuate tests"
  - Ignore MoxStubout deprecation warnings
    
    Like how we ignore mox3 usage warnings, we can ignore
    MoxStubout deprecation warnings as well.
    
    In a py35 unit test run, these warnings show up over
    1000 times (probably closer to 17K+ based on the number
    of unit tests we run) and bloat the console logs.
    
    Change-Id: I598999303c8e91f448e48dea1049a24332ba2f53
    Closes-Bug: #1778784
    
  - Merge "libvirt: Refactor handling of PCIe root ports"
  - Fixed concurrent access to direct io test file
    
    When instances are deployed concurrently on multiple
    compute nodes, nova-compute may fail on checking
    direct io capabilities when instance_path is shared
    across nodes. This fails on shared storage, that
    doesn't support concurrent write access to the
    same file, i.e. Virtuozzo Storage. To fix that we add
    random string at the end of test file name.
    
    Closes-Bug: #1727369
    Change-Id: I085ade355fba0e9727a38d2dcbc9cffa735a62d1
    Signed-off-by: Pavel Glushchak <pglushchak@virtuozzo.com>
    
  - Merge "Change the default values of XXX_allocation_ratio"
  - Merge "Remove ironic/pike note from *_allocation_ratio help"
  - Merge "Delete NeutronLinuxBridgeInterfaceDriver"
  - Merge "Clean up cpu_shared_set config docs"
  - Merge "modify the avaliable link"
  - Merge "Update mailinglist from dev to discuss"
  - Merge "Add a bug tag for nova doc"
  - Add docs for (initial) allocation ratio configuration
    
    This adds a new section to the admin scheduler configuration
    docs devoted to allocation ratios to call out the differences
    between the override config options and the initial ratio
    options, and how they interplay with the resource provider
    inventory allocation ratio override that can be performed
    via the placement REST API directly.
    
    This moves the note about bug 1804125 into the new section
    and also links to the docs from the initial allocation ratio
    config option help text.
    
    Part of blueprint initial-allocation-ratios
    Related-Bug: #1804125
    
    Change-Id: I7d8e822cd40dccaf5244e2cd95fa1af43fa9ed87
    
  - Note the aggregate allocation ratio restriction in scheduler docs
    
    This borrows from the release note in change
    I01f20f275bbd5451ace5c1e6f41ab38d488dae4e to document the
    regression, introduced in Ocata, where allocation ratio settings
    in the aggregate core/ram/disk filters are not honored because
    of placement being used by the FilterScheduler.
    
    While there is related work going on around this in
    blueprint initial-allocation-ratios and
    blueprint placement-aggregate-allocation-ratios, it is still
    a limitation in the current code base and needs to be called
    out in the docs.
    
    Change-Id: Ifaf596a8572637f843f47daf5adce394b0365676
    Related-Bug: #1804125
    
  - Add compute_node ratio online data migration script
    
    This patch adds an online data migration script to process the
    ratio with 0.0 or None value.
    
    If it's an existing record with 0.0 values, we'd want to do what
    the compute does, which is use the configure ``xxx_allocation_ratio``
    config if it's not None, and fallback to using the
    ``initial_xxx_allocation_ratio`` otherwise.
    
    Change-Id: I3a6d4d3012b3fffe94f15a724dd78707966bb522
    blueprint: initial-allocation-ratios
    
  - Add ratio online data migration when load compute node
    
    This patch adds an online data migrations for any compute_nodes
    with existing ``0.0`` and ``None`` allocation ratio. If it's an
    existing record with 0.0 values, we will replace it with the
    configure ``xxx_allocation_ratio`` config if it's not None, and
    fallback to using the ``initial_xxx_allocation_ratio`` otherwise.
    
    Change-Id: Ic137d837c7b1d29f56a45a01b3b104d6d2c698df
    blueprint: initial-allocation-ratios
    
  - Use tempest [compute]/build_timeout in evacuate tests
    
    Waiting 30 seconds for an evacuate to complete is not enough
    time on some slower CI test nodes. This change uses the
    same build timeout configuration from tempest to determine
    the overall evacuate timeout in our evacuate tests.
    
    Change-Id: Ie5935ae54d2cbf1a4272e93815ee5f67d3ffe2eb
    Closes-Bug: #1806925
    
  - Merge "Deprecate the nova-xvpvncproxy service"
  - Merge "Deprecate the nova-console service"
  - Merge "Always read-deleted=yes on lazy-load"
  - Merge "Remove utils.execute() calls from xenapi."
  - Update mailinglist from dev to discuss
    
    openstack-dev was decomissioned this night in https://review.openstack.org/621258
    Update openstack-dev to openstack-discuss
    
    Change-Id: If51f5d5eb710e06216f6d6981a70d70b6b5783cc
    
  - Clean up header encoding handling in compute API
    
    PEP 3333[1] says request and response headers (within the application)
    should be treated as native `str` (whatever the Python version). It's
    the job of the WSGI server to translate from `str` to reasonable output
    on the outgoing socket connection.
    
    This was already mostly correct but two issues were discovered while
    trying to create integration tests that use the value of the location
    response header when POSTing to create a server. In python2 it was
    working. In Python3 the header had a value of
    
    location: http://192.168.1.76/compute/v2.1/b'http:/192.168.1.76/compute/v2.1/servers/fad04042-850b-443a-9e48-773111cbc981'
    
    (note the b'...' bounding the full url on the end).
    
    This was happening for two reasons:
    
    * nova/api/openstack/compute/servers.py independently encodes the
      location header to utf-8, instead of using the centralized handling
      in nova/api/openstack/wsgi.py
    
      This meant that the value of the location header would arrive, in
      Python 3, at the centralized handling as a bytestring.
    
    * The centralized handling in nova/api/openstack/wsgi.py was incorrectly
      using the six.text_type() method. That is simply an alias to unicode
      in python 2 and str in python3. In python3 when given a bytestring
      as the only argument object.__str()__ is called on the argument.
      Which yields b'whatever'.
    
    At that stage, the handling in the web server which processes a location
    header to check for the presence of a host and prefix already at the
    start of the provided location will find b'...' and do a concatenation
    without any replace.
    
    So, because of all that, this patch includes three changes:
    
    * The server creation location header code does no encoding and relies
      on the centralized handling.
    
    * The centralized handling removes the use of text_type() as a function
      because that is redundant with the safe_encode and safe_decode changes
      in the same loop.
    
    * Doc strings and comments in the ResponseObject are clarified with
      regard to this encoding topic.
    
    Also, comments in Resource._process_stack are updated to correspond with
    the changes above. The code is not changed, as they are already doing
    the right thing: The comment was misrepresenting what was going on.
    There is some duplication of code between these two areas, but the code
    is too inscrutable for me to be willing to change a part that isn't
    presenting an explicit bug.
    
    Tests for the internal production of the location header are adjusted
    to reflect these changes.
    
    [1] https://www.python.org/dev/peps/pep-3333/#a-note-on-string-types
    
    Change-Id: I163c417375678b428ac77aac87ccafaf1f6186ab
    Closes-Bug: #1795425
    
  - Merge "Refactor TestEvacuateDeleteServerRestartOriginalCompute"
  - Remove utils.execute() from libvirt remotefs calls.
    
    Someone should consider if paramiko is a better route for these
    long term.
    
    Change-Id: I0ad6ffa20f7658b917f5235217493c69c688b1e0
    
  - Remove utils.execute() calls from xenapi.
    
    They do not please me.
    
    Change-Id: Ibe2f478288db42f8168b52dfc14d85ab92ace74b
    
  - Merge "Fix InstanceNotFound during _destroy_evacuated_instances"
  - Merge "SIGHUP n-cpu to clear provider tree cache"
  - Create BDMs/tags in cell with instance when over-quota
    
    If the server create build request fails the quota check
    after the instance record has been created in a cell, we also
    need to create the BDMs and tags in that cell so that users
    can still see the tags on the server and so the API can
    properly cleanup volume attachments when the server is deleted.
    
    This change updates _cleanup_build_artifacts to create BDMs
    and tags in the same cell as the instance prior to deleting the
    build request and request spec and adjusts the assertions in the
    related functional test to show the bug is fixed.
    
    As for instances that get buried in cell0 due to scheduling
    failures, the tags are not created there so comments are left
    in those code paths to fix that issue as well, but that can be
    done separately from this patch.
    
    Change-Id: I1a9bdb596f74605ab4613c9cb2574e976aebbd8c
    Closes-Bug: #1806064
    
  - Add secret=true to fixed_key configuration parameter
    
    Add secret=true to fixed_key configuration parameter as that value
    shouldn't be logged.
    
    Change-Id: Ie6da21e8680b2deb6b1da3add31cd725ba855c1c
    Closes-Bug: #1806471
    
  - Add functional regression test for bug 1806064
    
    Change I9269ffa2b80e48db96c622d0dc0817738854f602 in Pike
    introduced a race condition where creating multiple
    servers concurrently can fail the second instances quota
    check which happens in conductor after the instance record
    is created in the cell database but its related BDMs and
    tags are not stored in the cell DB. When deleting the
    server from the API, since the BDMs are not in the cell
    database with the instance, they are not "seen" and thus
    the volume attachments are not deleted and the volume is
    orphaned. As for tags, you should be able to see the tags
    on the server in ERROR status from the API before deleting
    it.
    
    This change adds a functional regression test to show both
    the volume attachment and tag issue when we fail the quota
    check in conductor.
    
    Change-Id: I21c2189cc1de6b8e4857de77acd9f1ef8b6ea9f6
    Related-Bug: #1806064
    
  - Fix sloppy initialization of the new disk ops semaphore.
    
    Some tests weren't calling init_host, so the semaphore was None.
    This caused the smoke to come out of nova's tests in ways that
    would be less confusing if they'd failed during the testing of
    the implementing patch.
    
    Instead, set the semaphore to being unbounded, and then override
    that later if the user has in fact specified a limit. This relies
    on init_host being called very early, but that should be true
    already.
    
    Change-Id: If144be253f78b14cef60200a46aefc02c0e19ced
    Closes-Bug: #1806123
    
  - Merge "Revert "Add regression test for bug 1550919""
  - Merge "Fix misuse of assertTrue"
  - Revert "Add regression test for bug 1550919"
    
    This reverts commit bbe88786fc90c2106f9fae0156ee7b09ece9a83b.
    
    The new tests are racy and causing a modest amount of
    failures in the gate since the change merged, so it is
    probably best to just revert the tests so they can be
    robustified.
    
    Change-Id: I18bd68ba6e59aba4c450eb85e6f4450d7044b1e9
    Related-Bug: #1806126
    
  - Use new ``initial_xxx_allocation_ratio`` CONF
    
    This patch adds new ``initial_xxx_allocation_ratio`` CONF options
    and modifies the resource tracker's initial compute node creation to
    use these values.
    
    During the update_available_resource periodic task, the allocation
    ratios reported to inventory for VCPU, MEMORY_MB and DISK_GB will
    be based on:
    
    * If CONF.*_allocation_ratio is set, use it. This overrides everything
      including externally set allocation ratios via the placement API.
    * If reporting inventory for the first time, the
      CONF.initial_*_allocation_ratio value is used.
    * For everything else, the inventory reported remains unchanged which
      allows operators to set the allocation ratios on the inventory records
      in placement directly without worrying about nova-compute overwriting
      those changes.
    
    As a result, several TODOs are removed from the virt drivers that
    implement the update_provider_tree interface and a TODO in the resource
    tracker about unset-ing allocation ratios to get back to initial values.
    
    Change-Id: I14a310b20bd9892e7b34464e6baad49bf5928ece
    blueprint: initial-allocation-ratios
    
  - Remove placement perf check
    
    gate/post_test_perf_check.sh did some simplistic performance testing of
    placement. With the extraction of placement we want it to happen during
    openstack/placement CI changes so we remove it here.
    
    The depends-on is to the placement change that turns it on there, using
    an independent (and very small) job.
    
    Depends-On: I93875e3ce1f77fdb237e339b7b3e38abe3dad8f7
    Change-Id: I30a7bc9a0148fd3ed15ddd997d8dab11e4fb1fe1
    
  - Mention size limit on user data in docs
    
    The API reference for the "user_data" parameter to server
    create and rebuild mentions the size restriction but the
    user docs did not, so this adds that note. While doing this,
    several other user-facing docs that mention user data link back
    to the overall user-data doc so that we can centralize any
    further documentation about that topic in a single location.
    
    Change-Id: Id4a61d58150337e0dec223d4d2741336ed6d5387
    Closes-Bug: #1804653
    
  - Transform scheduler.select_destinations notification
    
    Transform the scheduler.select_destinations.start and
    scheduler.select_destinations.end notifications to the
    versioned notification framework.
    
    Change-Id: I019e88fabd1d386c0d6395a7b1969315873485fd
    Implements: bp versioned-notification-transformation-stein
    
  - Merge "Add I/O Semaphore to limit concurrent disk ops"
  - SIGHUP n-cpu to clear provider tree cache
    
    An earlier change [1] allowed
    [compute]resource_provider_association_refresh to be set to zero to
    disable the resource tracker's periodic refresh of its local copy of
    provider traits and aggregates. To allow for out-of-band changes to
    placement (e.g. via the CLI) to be picked up by the resource tracker in
    this configuration (or a configuration where the timer is set to a high
    value) this change clears the provider tree cache when SIGHUP is sent to
    the compute service. The next periodic will repopulate it afresh from
    placement.
    
    [1] Iec33e656491848b26686fbf6fb5db4a4c94b9ea8
    
    Change-Id: I65a7ee565ca5b3ec6c33a2fd9e39d461f7d90ed2
    
  - libvirt: Refactor handling of PCIe root ports
    
    Add a separate method, _guest_needs_pcie(), to check for the
    prerequisites for adding PCIe root port entries.  And simplify the
    monster 'if' conditional into multiple readable ones.
    
    While at it, add a TODO note about an assumption (which can become
    invalid in the future) we're making about QEMU machine types.
    
    Change-Id: I05c9168569c4c3eeeb83695a053b2fd94240157c
    Suggested-by: Andrea Bolog…
@untitaker
Copy link

untitaker commented Jul 13, 2019

I found this issue because I saw that eventlet does not patch SimpleQueue at all, which seems to be the cause of this. Why does it (not) do that?

Akrog added a commit to Akrog/eventlet that referenced this issue Feb 12, 2020
Python 3.7 and later implement queue.SimpleQueue in C, causing a
deadlock when using ThreadPoolExecutor with eventlet.

To avoid this deadlock we now replace the C implementation with the
Python implementation on monkey_patch for Python versions 3.7 and
higher.
Akrog added a commit to Akrog/grpc that referenced this issue Feb 18, 2020
Trying to use the gRPC library in a Python program that uses the
Eventlet library doesn't work as expected, and we end up with deadlocks
and blocked threads.

This patch adds a custom eventlet IO manager to provide compatibility
between the Eventlet and gRPC libraries.

The code includes 2 workarounds for existing eventlet bugs, but this
code is compatible with the proposed PRs to solve them, so there should
be no problem if/when implements a fix for them:

 - eventlet/eventlet#508
 - eventlet/eventlet#599

An extra import and call is necessary for applications to use gRPC with
eventlets.  This call must be done after eventlet has monkey patched the
Python libraries.

The code would look something like this:

    import eventlet
    eventlet.monkey_patch()  # noqa

    import grpc
    from grpc.experimental import eventlet as grpc_eventlet

    if __name__ == '__main__':
        grpc_eventlet.init_eventlet()

Resolve grpc#15923
Akrog added a commit to Akrog/grpc that referenced this issue Feb 19, 2020
Trying to use the gRPC library in a Python program that uses the
Eventlet library doesn't work as expected, and we end up with deadlocks
and blocked threads.

This patch adds a custom eventlet IO manager to provide compatibility
between the Eventlet and gRPC libraries.

The code includes 2 workarounds for existing eventlet bugs, but this
code is compatible with the proposed PRs to solve them, so there should
be no problem if/when implements a fix for them:

 - eventlet/eventlet#508
 - eventlet/eventlet#599

An extra import and call is necessary for applications to use gRPC with
eventlets.  This call must be done after eventlet has monkey patched the
Python libraries.

The code would look something like this:

    import eventlet
    eventlet.monkey_patch()  # noqa

    import grpc
    from grpc.experimental import eventlet as grpc_eventlet

    if __name__ == '__main__':
        grpc_eventlet.init_eventlet()

Resolve grpc#15923
Akrog added a commit to Akrog/grpc that referenced this issue Feb 26, 2020
Trying to use the gRPC library in a Python program that uses the
Eventlet library doesn't work as expected, and we end up with deadlocks
and blocked threads.

This patch adds a custom eventlet IO manager to provide compatibility
between the Eventlet and gRPC libraries.

The code includes 2 workarounds for existing eventlet bugs, but this
code is compatible with the proposed PRs to solve them, so there should
be no problem if/when implements a fix for them:

 - eventlet/eventlet#508
 - eventlet/eventlet#599

An extra import and call is necessary for applications to use gRPC with
eventlets.  This call must be done after eventlet has monkey patched the
Python libraries.

The code would look something like this:

    import eventlet
    eventlet.monkey_patch()  # noqa

    import grpc
    from grpc.experimental import eventlet as grpc_eventlet

    if __name__ == '__main__':
        grpc_eventlet.init_eventlet()

Resolve grpc#15923
openstack-gerrit pushed a commit to openstack/cyborg that referenced this issue Mar 5, 2020
py3.7 deadlock with monkey patch of stdlib thread modules + use of
ThreadPoolExecutor

3.7, ThreadPoolExecuter was changed to use queue.SimpleQueue; on 3.6 it
uses queue.Queue. No issue in 3.6

The python37 default SimpleQueue was implemented with C code, which will
cause hang the main thread.

Commit 2a71b8e introduce eventlet for unittest, but I did not find
why we need it.
Check other project they also use ThreadPoolExecutor, but not all
of them introduce eventlet.

Maybe GreenThreadPoolExecutor is another solution.

Ref:
ThreadPoolExecutor
https://docs.python.org/3.7/library/concurrent.futures.html#threadpoolexecutor

Same isses about ThreadPoolExecutor and eventlet
https://bugs.launchpad.net/designate/+bug/1782647
eventlet/eventlet#508
gevent/gevent#1253
ClericPy/torequests#10
https://bugs.python.org/issue34173
gevent/gevent#1248
gevent/gevent#1251
http://lists.openstack.org/pipermail/openstack-dev/2018-July/132473.html
https://www.gitmemory.com/issue/eventlet/eventlet/508/511101004

Change-Id: I263f7222119d8d0c89cfc2a4758fe376ce1afd60
openstack-gerrit pushed a commit to openstack/openstack that referenced this issue Mar 5, 2020
* Update cyborg from branch 'master'
  - Merge "change default SimpleQueue to _PySimpleQueue for queue"
  - change default SimpleQueue to _PySimpleQueue for queue
    
    py3.7 deadlock with monkey patch of stdlib thread modules + use of
    ThreadPoolExecutor
    
    3.7, ThreadPoolExecuter was changed to use queue.SimpleQueue; on 3.6 it
    uses queue.Queue. No issue in 3.6
    
    The python37 default SimpleQueue was implemented with C code, which will
    cause hang the main thread.
    
    Commit 2a71b8e introduce eventlet for unittest, but I did not find
    why we need it.
    Check other project they also use ThreadPoolExecutor, but not all
    of them introduce eventlet.
    
    Maybe GreenThreadPoolExecutor is another solution.
    
    Ref:
    ThreadPoolExecutor
    https://docs.python.org/3.7/library/concurrent.futures.html#threadpoolexecutor
    
    Same isses about ThreadPoolExecutor and eventlet
    https://bugs.launchpad.net/designate/+bug/1782647
    eventlet/eventlet#508
    gevent/gevent#1253
    ClericPy/torequests#10
    https://bugs.python.org/issue34173
    gevent/gevent#1248
    gevent/gevent#1251
    http://lists.openstack.org/pipermail/openstack-dev/2018-July/132473.html
    https://www.gitmemory.com/issue/eventlet/eventlet/508/511101004
    
    Change-Id: I263f7222119d8d0c89cfc2a4758fe376ce1afd60
Akrog added a commit to Akrog/grpc that referenced this issue Mar 9, 2020
Trying to use the gRPC library in a Python program that uses the
Eventlet library doesn't work as expected, and we end up with deadlocks
and blocked threads.

This patch adds a custom eventlet IO manager to provide compatibility
between the Eventlet and gRPC libraries.

The code includes 2 workarounds for existing eventlet bugs, but this
code is compatible with the proposed PRs to solve them, so there should
be no problem if/when implements a fix for them:

 - eventlet/eventlet#508
 - eventlet/eventlet#599

An extra import and call is necessary for applications to use gRPC with
eventlets.  This call must be done after eventlet has monkey patched the
Python libraries.

The code would look something like this:

    import eventlet
    eventlet.monkey_patch()  # noqa

    import grpc
    from grpc.experimental import eventlet as grpc_eventlet

    if __name__ == '__main__':
        grpc_eventlet.init_eventlet()

Resolve grpc#15923
tipabu pushed a commit that referenced this issue May 15, 2020
Python 3.7 and later implement queue.SimpleQueue in C, causing a
deadlock when using ThreadPoolExecutor with eventlet.

To avoid this deadlock we now replace the C implementation with the
Python implementation on monkey_patch for Python versions 3.7 and
higher.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
4 participants