Create table publishing middleware¶
https://blueprints.launchpad.net/congress/+spec/table-publishing-middleware
To lower the barrier to entry for other projects to publish data to Congress on the (extended) DSE, create middleware that automates as much of the process as possible.
Problem description¶
Currently Congress periodically polls the services it is managing to get their data. It would be preferable if services sent data to Congress only when that data changes. For example, instead of Congress pulling the list of Nova’s servers every minute, Nova would send its servers to Congress whenever a new server is created, an existing server is deleted, or an existing server is updated.
oslo.messaging already makes it possible for projects to publish data to other projects, but that mechanism is underutilized today.
Proposed change¶
Solving this problem means making it even easier for other projects to send their data to Congress than oslo.messaging does. This change will include middleware, perhaps made available via oslo, that publishes all changes to the underlying database tables on the bus. Moreover, it will send not the entire table but rather the delta on the table that occurred. It will be tightly integrated into existing oslo.db so that existing projects need make no code changes; they need only include and configure the code.
There will need to be a synchronization mechanism: Congress pulls all the data once and then needs deltas published on the bus from that point on. The deltas sent on the bus will include timestamps that allow Congress to synchronize the initial pull of data with the deltas.
Alternatives¶
Another option is to have a separate effort, say oslo.publish_tables, that is not so tightly integrated with oslo.db. The upside to this approach is that projects not using oslo.db (even those outside of OpenStack) could leverage the code. The downside to this approach is that projects already using oslo.db would need to write and maintain a bunch of special-purpose code for publishing their data–an approach that has seen little success til now.
Perhaps we will find that we can implement both approaches with little extra effort, but the primary goal of this spec is the tight integration with oslo.db.
Policy¶
None
Policy Actions¶
None
Data Sources¶
None
Data model impact¶
None
REST API impact¶
None
Security impact¶
None
Notifications impact¶
The goal of this spec is to improve the ability of other projects to utilize the notifications mechanism provided by oslo.messaging.
Other end user impact¶
None
Performance impact¶
There will be minimal performance impact on the projects that utilize this code because only the deltas that hit the database will be published on the bus. Moreover, because each project can configure which tables are published on the bus, the project owner can tune any possible performance impact.
Other deployer impact¶
When configuring the middleware, we propose one key configuration option: which tables should be published on the bus.
Developer impact¶
None
Implementation¶
Assignee(s)¶
- Primary assignee:
<launchpad-id or None>
- Other contributors:
<launchpad-id or None>
Work items¶
Write basic middleware functionality
Integrate it into oslo.db
Install it into an existing service, say Nova.
Standalone documentation
Dependencies¶
enable-delta-driven-datasources: enable the datasources/DatasourceDriver class to connect to datasources that send deltas.
Testing¶
Unit testing the basic functionality
Tempest tests o Verify that changes to tables configured to be published actually get published o Verify that changes to tables configured NOT to be published do not get published
Documentation impact¶
Need documentation in oslo for the basic middleware. Need documentation update to oslo.db
References¶
None