Some of the biggers features requires well defined plans before the implementation. Until now it was managed by uploading PDF design docs to selected JIRA. There are multiple problems with the current practice.
We propose to follow the same process what we have now, but instead of uploading a PDF to the JIRA, create a PR to merge the proposal document to the documentation project.
HDDS-*
but with specific component)hadoop-hdds/docs/content/design
(will be part of the docs)As a result all the design docs can be listed under the documentation page.
A good design doc has the following properties:
The easiest way to create a design doc is to create a new markdown file in a PR and merge it to hadoop-hdds/docs/content/design
.
A very common practice of today is to create design doc on google docs and upload it to the JIRA.
While the first version (markdown files) are the most powerful, the second version (the existing practice) is also acceptable. In this case we propose to create a PR with adding a reference page without the content but including the link.
For example:
---
title: Ozone Security Design
summary: A comprehensive description of the security flow between server and client components.
date: 2018-02-22
jira: HDDS-4
status: implemented
author: Sanjay Radia, Jitendra Pandey, Xiaoyu Yao, Anu Engineer
## Summary
Ozone security model is based on Kerberos and similar to the Hadoop security but some of the parts are improved: for example the SCM works as a Certificate Authority and PKI based solutions are wildely used.
## Reference
For more details please check the (uploaded design doc)[https://issues.apache.org/jira/secure/attachment/12911638/HadoopStorageLayerSecurity.pdf].
Obviously with the first approach the design doc itself can be included in this markdown file.
It’s not a hard requirement to migrate all the design doc. But process is always open:
This the proposed template to document any proposal. It’s recommended but not required the use exactly the some structure. Some proposal may require different structure, but we need the following information.
Give a one sentence summary, like the jira title. It will be displayed on the documentation page. Should be enough to understand
Defined in the markdown header. Proposed statuses:
accepted
: (Use this as by default. If not accepted, won’t be merged)
implemented
: The discussed technical solution is implemented (maybe with some minor implementation difference)
replaced
: Replaced by a new design doc
outdated
: Code has been changed and design doc doesn’t reflect any more the state of the current code.
Note: the accepted design docs won’t be visible as part of the documentation or only under a dedicated section to clearly communicate that it’s not ready, yet.
What is the problem and how would you solve it? Think about an abstract of a paper: one paragraph overview. Why will the world better with this change?
Very important to define what is outside of the scope of this proposal
Explain the problem in more details. How can it be reproduced? What is the current solution? What is the limitation of the current solution?
How the new proposed solution would solve the problem? Architectural design.
Implementation details. What should be changed in the code. Is it a huge change? Do we need to change wire protocol? Backward compatibility?
What are the other alternatives you considered and why do yoy prefer the proposed solution The goal of this section is to help people understand why this is the best solution now, and also to prevent churn in the future when old alternatives are reconsidered.
Note: In some cases 4/5 can be combined. For example if you have multiple proposals, the first version may include multiple solutions. At the end ot the discussion we can move the alternatives to 5. and explain why the community is decided to use the selected option.
Planning to implement the feature. Estimated size of the work? Do we need feature branch? Any migration plan, dependency? If it’s not a big new feature it can be one sentence or optional.
There are similar process in other open source projects. This document and the template is inspired by the following projects:
Short summary of the processes:
Kafka process:
Spark process:
Kubernetes: