git clone http://git-wip-us.apache.org/repos/asf/cassandra.git cassandra
git checkout cassandra-3.0
git checkout -b 12345-3.0
git add <any new or modified file>
git commit -m '<message>'
git format-patch
mv <patch-file> <ticket-branchname.txt> (e.g. 12345-trunk.txt, 12345-3.0.txt)
git push --set-upstream origin 12345-3.0
There are two major sets of tests for Cassandra: unit tests and dtests. The unit tests are part of the Cassandra repository; dtests are functional tests that are available at https://github.com/riptano/cassandra-dtest.
Run ant test
from the top-level directory of your Cassandra checkout to run all unit tests. To run a specific test class, run ant -Dtest.name=<ClassName>
. In this case, ClassName should not be fully qualified. For example, it might be StorageProxyTest
. To run a specific test method, run ant testsome -Dtest.name=<ClassName> -Dtest.methods=<comma-separated list of method names>
. When using the testsome
command, ClassName should be a fully qualified name (like org.apache.cassandra.service.StorageProxyTest
).
You can also run tests in parallel: ant test -Dtest.runners=4
.
The dtests use CCM to test a local cluster. If the following instructions don't seem to work, you may find more current instructions in the dtest repository.
pip install ccm
.pip install nose
.pip install git+git://github.com/datastax/python-driver@cassandra-test
. This installs a dedicated test branch driver for new features. If you're working primarily on older versions, pip install cassandra-test
may be sufficient.git clone https://github.com/riptano/cassandra-dtest.git cassandra-dtest
.$CASSANDRA_DIR
to the location of your cassandra checkout. For example: export CASSANDRA_DIR=/home/joe/cassandra
. Make sure you've already built Cassandra in this directory. You can build Cassandra by running ant
.nosetests
from the dtest checkout. You can run a specific module like so: nosetests cql_tests.py
. You can run a specific test method like this: nosetests cql_tests.py:TestCQL.counters_test
.
known_failure
decorator. This decorator is documented inline in the dtests. If a test that is known to fail passes, or a test that is not known to fail succeeds, you should check the linked JIRA ticket to see if you've introduced any detrimental changes to that branch.
ant codecoverage
.ant jacoco-run -Dtaskname=some_test_taskname
. Run more test tasks in this fashion to push more coverage data onto the report in progress. Then manually build the report with ant jacoco-report
(the codecoverage
task shown above does this automatically).build/jacoco/index.html
.ant jacoco-cleanup
.
Jenkins runs the Cassandra tests continuously: http://cassci.datastax.com/. For frequent contributors, this Jenkins is set up to build branches from their GitHub repositories. It is likely that your reviewer will use this Jenkins instance to run tests for your patch.
Most Cassandra developers use an IDE. Instructions to use IntelliJ IDEA or Eclipse for Cassandra development are available.
Got commit access? Outstanding! Here are the conventions we follow.
Commit messages take the form of
<explanation> patch by <author>; reviewed by <committer> for CASSANDRA-<ticket> |
When committing to multiple branches, start with the most-stable and merge forwards. For instance, if you had a fix to apply to 1.1, 1.2, and trunk, you would first commit to 1.1, and push changes. Then, switch to your 1.2 branch by doing
git checkout cassandra-1.2 |
git merge cassandra-1.1 |
If there are conflicts, resolve them and commit, followed by a push. Finally, switch to trunk by doing
git checkout trunk |
and run
git merge cassandra-1.2 |
again resolve conflicts if the exist, and commit and push.
See http://www.youtube.com/watch?v=AJ-CpGsCpM0 for an in-depth explanation of why fixes should be merged forwards from more-stable branches, rather than backported from trunk.
This workflow also makes it so git knows what commits have been made to earlier branches but not to trunk: if you forget to merge a fix immediately, the next time someone goes to merge from the branch, git will incorporate the forgotten ones too.
A copy of the Python driver is included for use in cqlsh
. For instructions on how to package the bundled driver for the Cassandra project, see the instructions here.
https://c.statcounter.com/9397521/0/fe557aad/1/|stats