While nova has many entrypoints and other places in the code that allow for wiring in out of tree code, upstream doesn’t actively make any guarantees about these extensibility points; we don’t support them, make any guarantees about compatibility, stability, etc.
Although nova has many internal APIs, they are not all public contractual APIs. Below is a list of our public contractual APIs:
Anything not in this list is considered private, not to be used outside of nova, and should not be considered stable.
Follow the guidelines set in: https://wiki.openstack.org/wiki/APIChangeGuidelines
The canonical source for REST API behavior is the code not documentation. Documentation is manually generated after the code by folks looking at the code and writing up what they think it does, and it is very easy to get this wrong.
This policy is in place to prevent us from making backwards incompatible changes to REST APIs.
Merging a patch requires a non-trivial amount of reviewer resources. As a patch author, you should try to offset the reviewer resources spent on your patch by reviewing other patches. If no one does this, the review team (cores and otherwise) become spread too thin.
For review guidelines see: http://docs.openstack.org/infra/manual/developers.html#peer-review
Sometimes our simple “2 +2s” approval policy will result in errors. These errors might be a bug that was missed, or equally importantly, it might be that other cores feel that there is a need for more discussion on the implementation of a given piece of code.
Rather than an enforced time-based solution - for example, a patch couldn’t be merged until it has been up for review for 3 days - we have chosen an honor-based system where core reviewers would not approve potentially contentious patches until the proposal had been sufficiently socialized and everyone had a chance to raise any concerns.
Recognising that mistakes can happen, we also have a policy where contentious patches which were quickly approved should be reverted so that the discussion around the proposal can continue as if the patch had never been merged in the first place. In such a situation, the procedure is: