Manage Your Deprecations
************************

Libraries or applications may have specific features who are strongly
related to Eventlet, like the "heartbeat_in_pthread" feature in the
Opentack oslo.messaging deliverable.

Migrating off of Eventlet would make these features obsolete. As this
kind of feature expose configuration endpoints people would have to
deprecate them to allow your users to update their config files
accordingly. However, the deprecation process would take several
months or even numerous versions before hoping to see these features
removed. Hence blocking the migration.

The proposed solution is to mock these features with empty entrypoints
who will only raise deprecation warnings to inform your users that
they have to update their config files. After 1 or 2 new versions
these empty mocks could be safely removed without impacting anybody.

In other words, these feature will remain in the code, but they will
do nothing. They will be empty feature allowing us to migrate
properly.

Example with the "heartbeat_in_pthread" feature, by using Asyncio we
wouldn't have to run heartbeats in a separated threads. This feature,
the RabbitMQ heartbeat, would be run in a coroutine. A coroutine who
is ran in the main native thread. The config option will remain
available but it will only show a deprecation warning like the
following one:

   __main__:1: DeprecationWarning: Using heartbeat_in_pthread is
   deprecated and will be removed in {SERIES}. Enabling that feature
   have no functional effects due to recent changes applied in the
   networking model used by oslo.messaging. Please plan an update of your
   configuration.
