oslo-specs/specs/template.rst
Ben Nemec 612232fd72 Add commit message prefix to instructions.
As was discussed in the Oslo meeting 2014-10-24, we're going to
ask committers to prefix commit messages with the name of the lib
their spec relates to.  See the discussion starting around 16:20
in the meeting minutes from that day:
http://eavesdrop.openstack.org/meetings/oslo/2014/oslo.2014-10-24-16.07.log.html

Change-Id: I944a3006850d518cff1497d2de213d1584471ef1
2014-10-27 16:33:28 -05:00

10 KiB

The title of your blueprint

Include the URL of your launchpad blueprint:

https://blueprints.launchpad.net/oslo?searchtext=awesome-thing

Introduction paragraph -- why are we doing anything?

Problem description

A detailed description of the problem.

  • For a new feature this might be use cases. Ensure you are clear about the actors in each use case: End User vs Deployer
  • For a major reworking of something existing it would describe the problems in that feature that are being addressed.

Proposed change

Here is where you cover the change you propose to make in detail. How do you propose to solve this problem?

If this is one part of a larger effort make it clear where this piece ends. In other words, what's the scope of this effort?

Include information about which oslo repository will receive the change, including creating new repositories for libraries being graduated and backports to the incubator if necessary. List the files to be updated or added.

Alternatives

What other ways could we do this thing? Why aren't we using those? This doesn't have to be a full literature review, but it should demonstrate that thought has been put into why the proposed solution is an appropriate one.

If this is a new module or library, what other similar libraries were considered why were they rejected as unsuitable?

If this is a new feature, why does it belong in an Oslo module or library instead of an existing third-party library?

Impact on Existing APIs

If the change requires modifying the API of an existing oslo module or library, summarize those changes ("add foo argument to Blah constructor"). Describe how the changes can be made in a backwards-compatible way (required for libraries) or why that is not needed (desired but not required for incubated code).

Security impact

Describe any potential security impact on the system. Some of the items to consider include:

  • Does this change touch sensitive data such as tokens, keys, or user data?
  • Does this change alter the API in a way that may impact security, such as a new way to access sensitive information or a new way to login?
  • Does this change involve cryptography or hashing?
  • Does this change require the use of sudo or any elevated privileges?
  • Does this change involve using or parsing user-provided data? This could be directly at the API level or indirectly such as changes to a cache layer.
  • Can this change enable a resource exhaustion attack, such as allowing a single API interaction to consume significant server resources? Some examples of this include launching subprocesses for each connection, or entity expansion attacks in XML.

For more detailed guidance, please see the OpenStack Security Guidelines as a reference (https://wiki.openstack.org/wiki/Security/Guidelines). These guidelines are a work in progress and are designed to help you identify security best practices. For further information, feel free to reach out to the OpenStack Security Group at openstack-security@lists.openstack.org.

Performance Impact

Describe any potential performance impact on the system, for example how often will new code be called, and is there a major change to the calling pattern of existing code.

Examples of things to consider here include:

  • A periodic task might look like a small addition but if it calls conductor or another service the load is multiplied by the number of nodes in the system.
  • Scheduler filters get called once per host for every instance being created, so any latency they introduce is linear with the size of the system.
  • A small change in a utility function or a commonly used decorator can have a large impacts on performance.
  • Calls which result in database queries (whether direct or via conductor) can have a profound impact on performance when called in critical sections of the code.
  • Will the change include any locking, and if so what considerations are there on holding the lock?

Configuration Impact

Does this change introduce any new configuration options? Describe the possible valid settings.

Will the default values work well in real deployments?

Should the new options be more generic than proposed (for example a flag that other drivers might want to implement as well)?

Why is a new configuration option needed, instead of choosing a single behavior?

If a configuration option is being renamed, or moved into an option group, describe those changes.

Describe plans to deprecate configuration options, including the upgrade/migration path for anyone doing continuous deployment.

Developer Impact

Discuss things that will affect other developers working on OpenStack, such as:

  • If the blueprint proposes a change to a driver API within a library like oslo.messaging, discuss how other drivers would implement the feature.
  • If the blueprint proposes modifying an existing module being used by one or more apps, what will need to change in those apps to accommodate the change here? For example, when graduating a module from the incubator, does the app need a new "interface module" to hold global values previously held in the incubated module? Have the semantics of the module changed enough to require significant modifications to the consuming applications? API changes described above can be referenced here without repeating the details.

Testing Impact

Please discuss how the change will be tested. It is assumed that unit test coverage will be added so that doesn't need to be mentioned explicitly, but if you think unit tests are sufficient and we don't need to add more integration tests, please explain here. If we do need integration tests, especially if the change introduces a dependency on a service or new library for which we might need to support multiple versions, describe the testing strategy.

Is this untestable in gate given current limitations (specific hardware / software configurations available)? If so, are there mitigation plans (3rd party testing, gate enhancements, etc).

Implementation

Assignee(s)

Who is leading the writing of the code? Or is this a blueprint where you're throwing it out there to see who picks it up?

If more than one person is working on the implementation, please designate the primary author and contact.

Primary assignee:

<launchpad-id or None>

Other contributors:

<launchpad-id or None>

Milestones

Target Milestone for completion:

Work Items

Work items or tasks -- break the feature up into the things that need to be done to implement it. Those parts might end up being done by different people, but we're mostly trying to understand the timeline for implementation.

For graduation blueprints, start with https://wiki.openstack.org/wiki/Oslo/CreatingANewLibrary#Checklist and add any additional steps necessary at the appropriate place in the sequence. If no extra work is needed, referencing the checklist without reproducing it is sufficient.

Incubation

If this work reflects the addition of a new module through the incubator process, we want to ensure that the full life-cycle for the module has been thought out.

Adoption

Which applications would like to share the modules? We usually prefer at least 2 applications, but if too many applications share the incubated version graduation becomes more difficult.

Library

Which library will the new module eventually graduate into? If this is a new library, explain why no existing library is suitable (circular dependencies, no existing related library, etc.) and give a brief description of the new library.

Remember to consider the dependencies of the library. Will it depend on other oslo libraries that it does not already use? Will those dependencies introduce a cycle?

Anticipated API Stabilization

What API changes are anticipated before the code will be stable enough to graduate? How many release cycles are needed for that API to prove itself?

Documentation Impact

What is the impact on the docs team of this change? Some changes might require donating resources to the docs team to have the documentation updated. Don't repeat details discussed above, but please reference them here.

Dependencies

  • Include specific references to specs and/or blueprints in oslo, or in other projects, that this one either depends on or is related to.
  • Does this feature require any new library dependencies or code otherwise not included in OpenStack? Or does it depend on a specific version of library?

References

Please add any useful references here. You are not required to have any reference. Moreover, this specification should still make sense when your references are unavailable. Examples of what you could include are:

  • Links to mailing list or IRC discussions
  • Links to notes from a summit session
  • Links to relevant research, if appropriate
  • Related specifications as appropriate (e.g. if it's an EC2 thing, link the EC2 docs)
  • Anything else you feel it is worthwhile to refer to

Note

This work is licensed under a Creative Commons Attribution 3.0 Unported License. http://creativecommons.org/licenses/by/3.0/legalcode