Become one of the contributors! We thrive to build a welcoming and open community for anyone who wants to use Mongoose or contribute to it. Here we describe how to contribute to any of the {code} projects.
Please, note that all contributors shall follow the Contributor Agreement guidelines provided here.
- Contributors
- Versions
2.1. Backward Compatibility
2.2. Numbers - Issues
3.1. States
3.2. Specific Properties - Continuous Integration
4.1. Build
4.2. Testing
4.3. Releasing - Code
5.1. Style
5.2. Performance
Alphabetically:
- Andrey Kurilov
- Alexander Aphonin
- Evgeny Timoshchuk
- Igor Konev
- Ivan Sysoev
- Pavel Vinogradov
- Veronika Kochugova
The following interfaces are mentioned as the subject of the backward compatibility:
- Input (item list files, scenario files, configuration options)
- Output files containing the metrics
- API
Mongoose uses the semantic versioning. This means that the X.Y.Z version notation is used:
- X
Major version number. Points to significant design and interfaces change. The backward compatibility is not guaranteed. - Y
Minor version number. The backward compatibility is guaranteed. - Z
Patch version number. Includes only the defect fixes.
Types:
- Defect
- Story
- Task
- Sub-task
Type | Description |
---|---|
Defect | The defect/bug which affects the released version (the type "Task" should be used if a defect/bug affects the version which is not released yet) |
Story | High-level use case or a long-term activity aspect (testing, performance, etc) |
Task | A task which couldn't be included into any defect/story |
Sub-task | A task which could be included into a defect/story |
Tracker link: https://mongoose-issues.atlassian.net/projects/KAFKA
State | Description |
---|---|
OPEN | All new issues should have this state. The issues are selected from the set of the OPEN issues for the proposal and review process. The task is updated w/ the corresponding comment but left in the OPEN state if it's considered incomplete/incorrect. Also incomplete/incorrect issue should be assigned back to the reporter. |
IN PROGRESS | The issue is in progress currently either initially done and the corresponding merge request to the master branch is created |
RESOLVED | Issue is done and the corresponding changes are merged into the master branch |
CLOSED | The new version is released containing the corresponding changes |
Note:
The corresponding impact probability/frequency is not taken into account in the process currently. For example, all defects are assumed to be equally frequently occurring and affecting same users, regardless the particular scenario/use case. This approach is used due to the lack of the sufficient statistical information about the Mongoose usage.
Name | Applicable Issue Types | Who is responsible to specify | Notes |
---|---|---|---|
Affected version | Defect | Reporter: user/developer/owner | Only the latest version may be used for the defect reporting. The issue should be rejected if the reported version is not latest. |
Branch | Defect, Task, Sub-task | Reviewer: developer/owner | |
Description | Task, Sub-task | Reporter: user/developer/owner | |
Expected behaviour | Defect | Reporter: user/developer/owner | The reference to the particular documentation part describing the expected behavior is preferable. |
Fix version | Defect, Task, Sub-task | Reviewer: developer/owner | |
Limitations | Story | Reviewer: developer/owner | |
Observed behaviour | Defect | Reporter: user/developer/owner | Error message, errors.log output file, etc. |
Pull request | Defect, Task, Sub-task | Reviewer: developer/owner | |
Resolution commit | Defect, Task, Sub-task | Reviewer: developer/owner | |
Root cause | Defect | Reviewer: developer/owner | |
Start command/request | Defect | Reporter: user/developer/owner | Leave only the essential things to reproduce: try to check if possible if the bug is reproducible w/o distributed mode, different concurrency level, item data size, etc. |
Scenario | Defect | Reporter: user/developer/owner | Don't clutter with large scenario files. Simplify the scenario leaving only the essential things. |
Steps | Defect | Reporter: user/developer/owner | |
Purpose | Story | Reporter: user/developer/owner | Which particular problem should be solved with Mongoose? The links to the related documents and literature are encouraged. |
Requirements | Story | Reporter: user/developer/owner | Both functional and performance requirements are mandatory. Optionally the additional requirements/possible enhancements may be specified. |
https://travis-ci.org/emc-mongoose/mongoose-storage-driver-kafka
./gradlew clean jar
The resulting jar file path is ./build/libs/mongoose-storage-driver-kafka.jar
.
TODO
- Ensure all tests are OK
- Ensure the new version documentation is ready
- Share the testing build with QE and repeat this step until the qualification is OK
- Create/replace the corresponding VCS tags:
git tag -d latest git push origin :refs/tags/latest git tag -a <X>.<Y>.<Z> -m <X>.<Y>.<Z> git tag -a latest -m <X>.<Y>.<Z> git push --tags --force
- Create the corresponding version branch
release-v<X>.<Y>.<Z>
and set the version in the configuration to .. - Deploy docker images, set the
<X>.<Y>.<Z>
andlatest
tags also for the Docker images. - Upload the artifacts to the Central Maven repo:
1.
./gradlew clean uploadArchives
- Go to the https://oss.sonatype.org/#stagingRepositories find the corresponding repository, close and then release it.
Google Java Style is used as default.
Git autoformatting hook reformats Java source code to comply with Google Java Style.
The hook script is in the root of the repository named pre-commit
.pre-commit
MUST be copied to the directory .git/hooks/
and you need to check that the script has the access permissions to execute:
ls -l pre-commit
If not, assign permissions for execution:
chmod +x pre-commit
This hook will work automatically with any commit and format the code in the same style.
- If interface is named
Foo
then:- Abstract implementation should be named as
FooBase
- Default concrete implementation should be names as
FooImpl
- Abstract implementation should be named as
- Any field/local variable should be final if possible
Take care about the performance in the critical places:
- Avoid frequent objects instantiation
- Avoid unnecessary frequent allocation
- Avoid frequent method calls if possible
- Avoid deep call stack if possible
- Avoid I/O threads blocking
- Avoid anonymous classes in the time-critical code
- Avoid non-static inner classes in the time-critical code
- Use thread locals (encryption, string builders)
- Use buffering, buffer everything
- Use batch processing if possible