title: How To Contribute permalink: /how-to-contribute/ redirect_from: /contributor/

Contributions are welcome to all Apache Accumulo repositories. While most contributions are code, there are other ways to contribute to Accumulo:

Contributions are reviewed (via GitHub pull requests) by the community before being merged by a committer.

This document provides basic instructions for contributing to Accumulo. If you are looking for more information, check out the more comprehensive contributor guide.

Issues

Accumulo uses GitHub issues to track bugs and features. Each git repository has its own issues. In GitHub pull request are issues, therefore creating an issue before a pull request is optional. If unsure whether to start with an issue or pull request, then create an issue. If you need help finding an issue to work on, check out the open issues labeled ‘helpwanted’ or contact us.

Accumulo previously used [JIRA], but is now transitioning to GitHub issues. All new issues should be opened using GitHub. When working an existing JIRA issue, please do the following :

  • Open a new GitHub issue or pull request.
  • Link the GitHub issue to the JIRA issue.
  • Link the JIRA issue to the GitHub issue.
  • Close the JIRA issue as a duplicate.

Eventually JIRA will be transitioned to a read-only state for reference. For finding issues to work, there may still be open issues labeled for newbies in JIRA.

Labels

For pull request and issues, the following labels are used in the core repository. Consider an issue with labels v1.9.3, v2.0.2, and bug. If the issue is open, then its a bug that someone plans to fix in 1.9.3 and 2.0.2. If closed, then it was fixed in those versions.

LabelDescription
blockerIndicates a release blocker that must be fixed in labeled versions.
bug
duplicate
enhancement
vX.Y.ZFix version. The prefix v was chosen so that these labels sort last in the drop down list.

Currently only Accumulo committers can set labels. If you think a label should be set, comment on the issue and someone will help.

Repositories

Contributions can be made to the following repositories. While the general contribution workflow is described below, repositories have special instructions in their CONTRIBUTING.md file which can be viewed by clicking on contribute in the Links column below.

RepositoryLinksDescription
AccumuloContribute IssuesCore Project
Accumulo WebsiteContribute IssuesSource for this website
Accumulo ExamplesContribute IssuesAccumulo example code
Accumulo TestingContribute IssuesAccumulo test suites such as continuous ingest and random walk
Accumulo DockerContribute IssuesSource for Accumulo Docker image
Accumulo WikisearchContribute IssuesAccumulo example application that indexes and queries Wikipedia data

Contribution workflow

  1. Create a GitHub account for issues and pull requests.
  2. Find an issue to work on or optionally create one that describes the work that you want to do.
  3. [Fork] and [clone] the GitHub repository that you want to contribute to.
  4. Create a branch in the local clone of your fork.
    git checkout -b accumulo-4321
  1. Do work and commit to your branch. You can reference [this link][messages] for a guide on how to write good commit log messages.
  2. Ensure you works satisfies the guidelines laid out in the CONTRIBUTING.md file.
  3. If needed, squash to the minimum number of commits. For help on squashing commits, see this [tutorial][squash-tutorial] or [StackOverflow answer][squash-stack].
  4. [Push] your branch to your fork.
    git push origin accumulo-4321
  1. Create a [Pull Request] on GitHub to the appropriate repository. If the work is not complete and the Pull Request is for feedback, please put [WIP] in the subject.
  2. At least one committer (and others in the community) will review your pull request and add any comments to your code.
  3. Push any changes from the review to the branch as new commits so the reviewer only needs to review new changes. Please avoid squashing commits after the review starts. Squashing makes it hard for the reviewer to follow the changes.
  4. Repeat this process until a reviewer approves the pull request.
  5. When the review process is finished, all commits on the pull request may be squashed by a committer. Please avoid squashing as it makes it difficult for the committer to know if they are merging what was reviewed.

Coding Guidelines

  • If a change needs to go into multiple branches of Accumulo, it should be merged into earlier branches then later branches.
  • Accumulo follows [semver] for its public API.
  • Every file requires the ASF license header as described in [ASF Source Header][srcheaders].
  • Remove all trailing whitespaces. Eclipse users can use Source→Cleanup option to accomplish this.
  • Use 2 space indents and never use tabs!
  • Use 100-column line width for Java code and Javadoc.
  • Use a new line with single statement if/else blocks.
  • Do not use Author Tags. The code is developed and owned by the community.

Code Editors

Feel free to use any editor when contributing Accumulo. If you are looking for a recommendation, many Accumulo developers use [IntelliJ][intellij] or [Eclipse][eclipse]. Below are some basic instructions to help you get started.

IntelliJ

  1. Download and install [IntelliJ][intellij]
  2. Clone the Accumulo repository that you want to work on.
    git clone https://github.com/apache/accumulo.git
    
  3. [Import][intellij-import] the repository as a Maven project into IntelliJ
  4. (Optional) Download and import Eclipse-Accumulo-Codestyle.xml from Accumulo's [contrib][accumulo-contrib] directory
  • Import via File > Settings > Code Style and clicking on cog wheel

Eclipse

  1. Download and install [Eclipse][eclipse].
  2. Clone the Accumulo repository that you want to work on.
    git clone https://github.com/apache/accumulo.git
    
  3. [Import][eclipse-import] the repository as a Maven project into Eclipse
  4. (Optional) Download and import Eclipse formatting and style guides from Accumulo's [contrib][accumulo-contrib] directory
  • Import Formatter: Preferences > Java > Code Style > Formatter and import the Eclipse-Accumulo-Codestyle.xml downloaded in the previous step.
  • Import Template: Preferences > Java > Code Style > Code Templates and import the Eclipse-Accumulo-Template.xml. Make sure to check the “Automatically add comments” box. This template adds the ASF header and so on for new code.

Helpful Links

  • Build resources - [TravisCI] & [Jenkins][jenkins]
  • Releases - [Making a release][making], [Verifying a release][verifying]

For more details, see the contributor guide.

[manual]: {{ site.baseurl }}/{{ site.latest_minor_release }}/accumulo_user_manual.html [JIRA]: https://issues.apache.org/jira/browse/ACCUMULO [GitHub]: https://github.com/apache/accumulo/pulls [Jenkins]: https://builds.apache.org/view/A/view/Accumulo [TravisCI]: https://travis-ci.org/apache/accumulo [making]: {{ “/contributor/making-release” | relative_url }} [verifying]: {{ “/contributor/verifying-release” | relative_url }} [Fork]: https://help.github.com/articles/fork-a-repo/ [Pull Request]: https://help.github.com/articles/about-pull-requests/ [Push]: https://help.github.com/articles/pushing-to-a-remote/ [clone]: https://help.github.com/articles/cloning-a-repository/ [srcheaders]: https://www.apache.org/legal/src-headers [styles]: https://gitbox.apache.org/repos/asf?p=accumulo.git;a=tree;f=contrib;hb=HEAD [accumulo-readme]: https://github.com/apache/accumulo/blob/master/README.md#api [semver]: http://semver.org/spec/v2.0.0.html [eclipse]: https://www.eclipse.org/ [eclipse-import]: https://stackoverflow.com/questions/2061094/importing-maven-project-into-eclipse [intellij]: https://www.jetbrains.com/idea/ [intellij-import]: https://www.jetbrains.com/help/idea/maven.html#maven_import_project_start [accumulo-contrib]: https://github.com/apache/accumulo/tree/master/contrib [messages]: https://chris.beams.io/posts/git-commit/ [squash-tutorial]: http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html [squash-stack]: https://stackoverflow.com/questions/5189560/squash-my-last-x-commits-together-using-git