3.2.1-SNAPSHOT
Developer Documentation
This document contains information for TinkerPop developers, contributors, and community members. It focuses on technical information and other internal processes related to the project.
Contributing
Contributions via GitHub pull requests are gladly accepted from their original author. By submitting any copyrighted material via pull request, email, or other means you agree to license the material under the project’s open source license and warrant that you have the legal authority to do so.
Ways to Contribute
While the concept of an open source contribution can refer to doing development work on the code base, there are many other ways outside of coding to contribute to Apache TinkerPop. Participating on the various mailing lists, offering ideas, reporting bugs, writing documentation are all welcome contributions to the project that help improve the The TinkerPop. This section of the document is designed to help provide some structure for potential contributors and to give them ideas for how they could get started becoming more involved in the TinkerPop community.
Note
|
As a quick acknowledgement, this section was influenced by Apache Spark’s well organized "Contributing to Spark" document. |
Mailing List Participation
TinkerPop has two mailing lists: gremlin-users and dev. Subscribing to and participating on one or both of these mailing lists is a great way to contribute to TinkerPop. Helping users with their problems by answering their questions on gremlin-users is a great help to the community and an easy way for the community to become familiar with the contributor.
The dev@tinkerpop.apache.org mailing list is where all design discussion, early feature announcements, release discussions and other similar communication takes place. Having insight into the project at this level, will yield a lot of information about the day-to-day course of TinkerPop and many of the other ways contributors can be involved require a subscription to this list.
Testing Releases
Proposed TinkerPop releases are not official until after they are evaluated by the community. The process of evaluation occurs on the dev@tinkerpop.apache.org mailing list where the community is invited to review release artifacts and vote if they should be released or not. Anyone is free to comment and provide a vote (+1/+0/-1) on a release. Note that votes of non-PMC members are considered non-binding, but are certainly considered in the review process.
Reviewing Changes
Virtually all changes to TinkerPop’s source code are performed via GitHub pull requests. When a pull request is issue it undergoes a review process prior to be merged to a release branch. Anyone is free to comment and provide a vote (+1/+0/-1) on a pull request. Note that votes of non-commiters are considered non-binding, but are certainly considered in the review process.
Writing Documentation
TinkerPop has a robust documentation system that is based on asciidoc. Proposing a documentation change is quite similar to providing a source code change, which is described below in more detail. Note that there is a difference between project documentation and the TinkerPop web site. Changes to project documentation can be performed via pull request, but only TinkerPop committers can make web site changes. Feel free to propose web site changes on the dev@tinkerpop.apache.org mailing list.
Reporting Bugs
Well formed bug reports (especially when accompanied by a pull request that fixes the problem) are welcome contributions that ultimately help improve the quality of TinkerPop. Of course, a bug report is only as good as its reproduction steps and the surrounding details of the issue. When a bug is encountered, it should be documented in JIRA, where it will likely trigger some discussion and ultimately a resolution.
TinkerPop Libraries
TinkerPop is more than just the core source code repository. It is a rich ecosystem of libraries developed by providers, who look to use or extend upon the TinkerPop interfaces. TinkerPop is highly focused on its interfaces and a small set of reference implementations of those interfaces as part of its core code base. As such, large and independent new functionality is often rejected from inclusion in TinkerPop itself, however, it is very much encouraged that such a project stand on its own as separate repository. Projects like this that meet the TinkerPop listing policy can be added to the TinkerPop web site and promoted there. Please see the current listing of such libraries on the TinkerPop home page to get an idea as to what kinds of libraries are available from the community.
Considering Code Changes
Code changes can take a fair bit of effort from both the contributor doing the work, as well as the people who will be reviewing and testing that work. It is beneficial to all involved that some basic considerations be made by the contributor to ensure the best use is made of everyone’s time.
Note
|
For those who are trying to find a place to start to contribute, consider looking at unresolved issues that have the "trivial" priority as these issues are specifically set aside as low-hanging fruit for newcomers. |
Before proceeding, contributors should evaluate if the proposed change is likely to be relevant, new and actionable:
-
Is it clear that code must change? Proposing a JIRA issue and pull request is appropriate only when a clear problem or change has been identified. When in doubt, email dev@tinkerpop.apache.org first about the possible change.
-
Search the the mailing list archives for related discussions. Often, the problem has been discussed before, with a resolution that doesn’t require a code change, or recording what kinds of changes will not be accepted as a resolution.
-
Search JIRA for existing issues.
-
Is the scope of the change matched to the contributor’s level of experience? Anyone is qualified to suggest a typo fix, but refactoring a core feature in serialization or OLAP requires much more understanding of TinkerPop. Some changes require building up experience first.
Before considering how to contribute code, it is useful to understand how code is reviewed, and why changes may be rejected. Simply put, changes that have many or large positives, and few negative effects or risks, are much more likely to be merged, and merged quickly. Risky and less valuable changes are very unlikely to be merged, and may be rejected outright rather than receive iterations of review.
Positives
-
Change has already been discussed and is known to committers
-
Fixes the root cause of a bug in existing functionality
-
Adds functionality or fixes a problem needed by a large number of users
-
Simple, targeted
-
Easily tested; has tests
-
Reduces complexity and lines of code
Negatives, Risks
-
Band-aids a symptom of a bug only
-
Introduces complex new functionality, especially an API that needs to be supported
-
Adds complexity that only helps a niche use case
-
Adds user-space functionality that does not need to be maintained in TinkerPop, but could be hosted externally and promoted in provider listings
-
Changes a public API or semantics thus introducing a breaking change
-
Adds large dependencies
-
Changes versions of existing dependencies
-
Adds a large amount of code
-
Makes lots of modifications in one "big bang" change
Contributing Code Changes
Generally, TinkerPop uses JIRA to track logical issues, including bugs and improvements, and uses GitHub pull requests to manage the review and merge of specific code changes. That is, JIRA issues are used to describe what should be fixed or changed, and high-level approaches, and pull requests describe how to implement that change in the project’s source code.
As a first step to making a contribution, consider JIRA:
-
Find the existing JIRA ticket that the change pertains to.
-
Do not create a new ticket if creating a change to address an existing issue in JIRA; add to the existing discussion and work instead.
-
Look for existing pull requests that are linked from the ticket, to understand if someone is already working on the JIRA.
-
-
If the change is new, then it usually needs a new ticket. However, trivial changes, where the change is virtually the same as the how it should change do not require a JIRA (e.g. "Fix typos in Foo javadoc").
-
If required, create a new ticket:
-
Provide a descriptive Title and a detailed Description. For bug reports, this should ideally include a short reproduction of the problem.
-
Set required fields - these are detailed later in this document in the Issue Tracker Conventions section.
-
-
If the change is a large change, consider inviting discussion on the issue at dev@tinkerpop.apache.org first before proceeding to implement the change.
Next, make changes and prepare a pull request:
-
Fork and then clone the Apache TinkerPop GitHub repository if not already done.
-
Make changes in the fork
-
It is typically best to create a branch for the changes. Consider naming that branch after the JIRA issue number to easily track what that branch is for.
-
Consider which branch to create the branch from in the first place. In other words, is the change to be targetted at a specific TinkerPop version (e.g. a patch to an older version)? When in doubt, please ask on dev@tinkerpop.apache.org.
-
-
Bulid the project and run tests.
-
A simple build can be accomplished with maven:
mvn clean install
. -
Often, a "simple build" isn’t sufficient and integration tests are required:
mvn clean install -DskipIntegrationTests=false -DincludeNeo4j
. Note that Hadoop must be running for the integration tests to execute. -
Docker can help simplify building and testing:
docker/build.sh -t -i -n
-
Please see the Building and Testing section for more building and testing options.
-
-
Consider whether documentation or tests need to be added or updated as part of the change, and add them as needed.
-
Nearly all changes should include a modification to the
CHANGELOG.asciidoc
file - one more entries to help summarize the change. -
Some changes will require updates to the "upgrade documentation" - usually reserved for major new features and breaking changes.
-
Docker can help simplify documentation generation:
docker/build.sh -d
-
Please see the Building and Testing section for more documentation generation options.
-
-
Open the pull request against the appropriate branch on the Apache TinkerPop repository.
-
Target the pull request at the appropriate branch in TinkerPop’s repository
-
Prefix the name of the pull request with the JIRA issue number (include a brief description after that).
-
Include a link to the ticket in JIRA in the pull request description.
-
Include a rough synopsis of how the changes were tested. This might be as simple as "Ran mvn clean install to success and performed manual testing in the Gremlin Console".
-
Include other descriptive elements about the change if they are not already included in the JIRA ticket.
-
Automated builds will occur with Travis and AppVeyor. Please be sure that the pull request passes those builds and correct them if there are problems.
-
Once the pull request has been placed it will go into review:
-
Other reviewers, including committers, may comment on the changes and suggest modifications. Changes can be added by simply pushing more commits to the same branch.
-
Lively, polite, rapid technical debate is encouraged from everyone in the community. The outcome may be a rejection of the entire change.
-
Reviewers can indicate that a change looks suitable for merging with by providing a "+1". Please see the Review then Commit process for more details.
-
Sometimes, other changes will be merged which conflict with your pull request’s changes. The PR can’t be merged until the conflict is resolved. This can be resolved with "git fetch origin" followed by "git merge origin/master" and resolving the conflicts by hand, then pushing the result to your branch. Or more nicely, consider rebasing changes and force pushing the branch.
-
Try to be responsive to the discussion rather than let days pass between replies
On successful review, the pull request will be merged to the main repository and the JIRA issue will be closed.
Development Environment
Building and Testing
TinkerPop requires Java 1.8.0_40+
for proper building and proper operations.
-
Build Project:
mvn clean install
-
Specify specific tests in a TinkerPop Suite to run with the
GREMLIN_TESTS
environment variable, along with the Maven project list argument, e.g.:export GREMLIN_TESTS='org.apache.tinkerpop.gremlin.process.traversal.step.map.PathTest$Traversals,org.apache.tinkerpop.gremlin.process.traversal.PathTest' mvn -Dmaven.javadoc.skip=true --projects tinkergraph-gremlin test
-
Clean the
.groovy/grapes/org.apache.tinkerpop
directory on build:mvn clean install -DcleanGrapes
-
Turn off "heavy" logging in the "process" tests:
mvn clean install -DargLine="-DmuteTestLogs=true"
-
The test suite for
neo4j-gremlin
is disabled by default - to turn it on:mvn clean install -DincludeNeo4j
-
-
Regenerate test data (only necessary given changes to IO classes):
mvn clean install -Dio
fromtinkergraph-gremlin
directory-
If there are changes to the Gryo format, it may be necessary to generate the Grateful Dead dataset from GraphSON (see
IoDataGenerationTest.shouldWriteGratefulDead
)
-
-
Check license headers are present:
mvn apache-rat:check
-
Build AsciiDocs (Hadoop must be running and awk version
4.0.1
is required):bin/process-docs.sh
-
Build AsciiDocs (but don’t evaluate code blocks):
bin/process-docs.sh --dryRun
-
Build AsciiDocs (but don’t evaluate code blocks in specific files):
bin/process-docs.sh --dryRun docs/src/reference/the-graph.asciidoc,docs/src/tutorial/getting-started,...
-
Build AsciiDocs (but evaluate code blocks only in specific files):
bin/process-docs.sh --fullRun docs/src/reference/the-graph.asciidoc,docs/src/tutorial/getting-started,...
-
Process a single AsciiDoc file:
docs/preprocessor/preprocess-file.sh `pwd`/gremlin-console/target/apache-gremlin-console-*-standalone "" "*" `pwd`/docs/src/xyz.asciidoc
-
-
Build JavaDocs:
mvn process-resources -Djavadoc
-
Check for Apache License headers:
mvn apache-rat:check
-
Check for newer dependencies:
mvn versions:display-dependency-updates
ormvn versions:display-plugin-updates
-
Deploy JavaDocs/AsciiDocs:
bin/publish-docs.sh svn-username
-
Integration Tests:
mvn verify -DskipIntegrationTests=false
-
Execute with the
-DincludeNeo4j
option to include transactional tests. -
Execute with the
-DuseEpoll
option to try to use Netty native transport (works on Linux, but will fallback to Java NIO on other OS).
-
-
Performance Tests:
mvn verify -DskipPerformanceTests=false
-
Benchmarks:
mvn verify -DskipBenchmarks=false
Docker Integration
TinkerPop provides a shell script, that can start several build tasks within a Docker container. The required Docker images will be built automatically if they don’t exist yet. Thus the first invokation of the Docker script is expected to take some time.
The script can be found under PROJECT_HOME/docker/build.sh
. The following tasks are currently
supported:
-
run standard test suite
-
run integration tests
-
build Java docs
-
build user docs
A list of command line options is provided by docker/build.sh --help
. The container will install,
configure and start all required dependencies, such as Hadoop.
If the container is used to generate the user docs, it will start a web server and show the URL that is used to host the HTML docs.
After finishing all tasks, the script will immediately destroy the container.
IDE Setup with Intellij
This section refers specifically to setup within Intellij. TinkerPop has a module called gremlin-shaded
which
contains shaded dependencies for some libraries that are widely used and tend to introduce conflicts. To ensure
that Intellij properly interprets this module after importing the Maven pom.xml
perform the following steps:
-
Build
gremlin-shaded
from the command line withmvn clean install
. -
Right-click on the
gremlin-shaded
module in the project viewer of Intellij and select "Remove module". -
In the "Maven Projects" Tool window and click the tool button for "Reimport All Maven projects" (go to
View | Tool Windows | Maven Projects
on the main menu if this panel is not activated). -
At this point it should be possible to compile and run the tests within Intellij, but in the worst case, use
File | Invalidate Caches/Restart
to ensure that indices properly rebuild.
Note that it maybe be necessary to re-execute these steps if the gremlin-shaded
pom.xml
is ever updated.
Developers working on the neo4j-gremlin
module should enabled the include-neo4j
Maven profile in Intellij.
This will ensure that tests will properly execute within the IDE.
If Intellij complains about "duplicate sources" for the Groovy files when attempting to compile/run tests, then install the GMavenPlus Intellij plugin.
For Committers
The guidelines that follow apply to those with commit access to the main repository:
Communication
TinkerPop has a user mailing list and a developer mailing list. As a committer, it is a good idea to join both.
It would also be helpful to join the public TinkerPop HipChat room for developer discussion. This helps contributors to communicate in a more real-time way. Anyone can join as a guest, but for regular contributors it may be best to request that an Apache HipChat account be created.
Occasionally, online meetings via video conference are held. These meetings are schedule via the dev mailing list about a week before they are to occur to find a day and time that is available for those interested in attending. On the day of the meeting, the meeting organizer will create a Google Hangout (or similar video conferencing link) to post to the TinkerPop room in HipChat. At that point, all who are interested can attend. Meeting minutes should be taken and added to the Meetings section of this document using the pattern already established.
Release Notes
There is a two-pronged approach to maintaining the change log and preparing the release notes.
-
For work that is documented in JIRA, run the release notes report to include all of the tickets targeted for a specific release. This report can be included in the release announcement.
-
The manual change log (
CHANGELOG.asciidoc
) can be used to highlight large changes, describe themes (e.g. "We focused on performance improvements") or to give voice to undocumented changes.
Given the dependence on the JIRA report for generating additions to the CHANGELOG.asciidoc
,
which uses the title of the issue as the line presented in the release note report, titles should
be edited prior to release to be useful in that context. In other words, an issue title should
be understandable as a change in the fewest words possible while still conveying the gist of the
change.
Changes that break the public APIs should be marked with a "breaking" label and should be distinguished from other changes in the release notes.
Branches
The "master" branch is used for the main line of development and release branches are constructed as needed for ongoing maintenance work. If new to the project or are returning to it after some time away, it may be good to send an email to the developer mailing list (or ask on HipChat) to find out what the current operating branches are.
Other branches may be created for collaborating on features or for RFC’s that other developers may want to inspect. It is suggested that the JIRA issue ID be used as the prefix, since that triggers certain automation, and it provides a way to account for the branch lifecycle, i.e. "Who’s branch is this, and can I delete it?"
For branches that are NOT associated with JIRA issues, developers should utilize their Apache ID as a branch name prefix. This provides a unique namespace, and also a way to account for the branch lifecycle.
Developers should remove their own branches when they are no longer needed.
Tags
Tags are used for milestones, release candidates, and approved releases. Please refrain from creating arbitrary tags, as they produce permanent clutter.
Issue Tracker Conventions
TinkerPop uses Apache JIRA as its issue tracker. JIRA is a very robust piece of software with many options and configurations. To simplify usage and ensure consistency across issues, the following conventions should be adhered to:
-
An issue’s "status" should generally be in one of two states:
open
orclosed
(reopened
is equivalent toopen
for our purposes).-
An
open
issue is newly created, under consideration or otherwise in progress. -
A
closed
issue is completed for purposes of release (i.e. code, testing, and documentation complete). -
Issues in a
resolved
state should immediately be evaluated for movement toclosed
- issue becomeresolved
by those who don’t have the permissions toclose
.
-
-
An issue’s "type" should be one of two options:
bug
orimprovement
.-
A
bug
has a very specific meaning, referring to an error that prevents usage of TinkerPop AND does not have a reasonable workaround. Given that definition, abug
should generally have very high priority for a fix. -
Everything else is an
improvement
in the sense that any other work is an enhancement to the current codebase.
-
-
The "component" should be representative of the primary area of code that it applies to and all issues should have this property set.
-
Issues are not assigned "labels" with two exceptions:
-
The "breaking" label which marks an issue as one that is representative of a change in the API that might affect users or providers. This label is important when organizing release notes.
-
The "deprecation" label which is assigned to an issue that is about removing a deprecated portion of the API.
-
-
The "affects/fix version(s)" fields should be appropriately set, where the "fix version" implies the version on which that particular issue will completed. This is a field usually only set by committers.
-
The "priority" field can be arbitrarily applied with one exception. The "trivial" option should be reserved for tasks that are "easy" for a potential new contributor to jump into and do not have significant impact to urgently required improvements.
Code Style
Contributors should examine the current code base to determine what the code style patterns are and should match their style to what is already present. Of specific note however, TinkerPop does not use "import wildcards" - IDEs should be adjusted accordingly to not auto-wildcard the imports.
Build Server
TinkerPop uses both Travis and AppVeyor for CI services. Travis validates builds on Ubuntu, while AppVeyor validates builds on Windows. The build statuses can be found here:
Note that the CI process does not run integration tests or include Neo4j-related tests as those tests would likely exceed the allowable times for builds on these servers.
Deprecation
When possible, committers should avoid direct "breaking" change (e.g. removing a method from a class) and favor deprecation. Deprecation should come with sufficient documentation and notice especially when the change involves public APIs that might be utilized by users or implemented by providers:
-
Mark the code with the
@Deprecated
annotation. -
Use javadoc to further document the change with the following content:
-
@deprecated As of release 3.2.1-SNAPSHOT, replaced by {@link SomeOtherClass#someNewMethod()}
- if the method is not replaced then the comment can simply read "not replaced". Additional comments that provide more context are encouraged. -
@see <a href="https://issues.apache.org/jira/browse/TINKERPOP-XXX">TINKERPOP-XXX</a>
- supply a link to the JIRA issue for reference.
-
-
Be sure that deprecated methods are still under test - consider using javadoc/comments in the tests themselves to call out this fact.
-
Create a new JIRA issue to track removal of the deprecation for future evaluation - this issue should have the "breaking" label as well as a "deprecation" label.
-
Update the "upgrade documentation" to reflect the API change and how the reader should resolve it.
The JIRA issues that track removal of deprecated methods should be periodically evaluated to determine if it is prudent to schedule them into a release.
Developing Tests
TinkerPop has a wide variety of test types that help validate its internal code as well as external provider code.
There are "unit tests" and "integration tests". Unit tests execute on standard runs of mvn clean install
. These
tests tend to run quickly and provide a reasonable level of coverage and confidence in the code base. Integration
tests are disabled by default and must be explicitly turned on with a special build property by adding
-DskipIntegrationTests=false
to the mvn
execution. Integration tests run slower and may require external
components to be running when they are executed. They are "marked" as separate from unit tests by inclusion of the
suffix "IntegrateTest".
Here are some other points to consider when developing tests:
-
Avoid use of
println
in tests and prefer use of a SLF4jLogger
instance so that outputs can be controlled in a standard way. -
If it is necessary to create files on the filesystem, do not hardcode directories - instead, use the
TestHelper
to create directory structures.TestHelper
will properly create file system structure in the appropriate build directory thus allowing proper clean-up between test runs. -
If writing tests in one of the test suites, like
gremlin-test
, it is important to remember that if a newGraph
instance is constructed within the test manually, that it be closed on exit of that test. Failing to do this cleanup can cause problems for some graph providers. -
Tests that are designed to use a
GraphProvider
implementation in conjunction withAbstractGremlinTest
and are in the/test
directory should not be named withTest
as the suffix, as this will cause them to execute in some environments without aGraphProvider
being initialized by a suite. These types of tests should be suffixed withCheck
instead. Please see NativeNeo4jStructureCheck for an example.
Gremlin Language Test Cases
When writing a test case for a Gremlin step, be sure to use the following conventions.
-
The name of the traversal generator should start with
get
, useX
for brackets,_
for space, and the Gremlin-Groovy sugar syntax.-
get_g_V_hasLabelXpersonX_groupXaX_byXageX_byXsumX_name()
-
-
When creating a test for a step that has both a barrier and sideEffect form (e.g.
group()
,groupCount()
, etc.), test both representations.-
get_g_V_groupCount_byXnameX()
-
get_g_V_groupCountXaX_byXnameX_capXaX()
-
-
The name of the actual test case should be the name of the traversal generator minus the
get_
prefix. -
The Gremlin-Groovy version of the test should use the sugar syntax in order to test sugar (as Gremlin-Java8 tests test standard syntax).
-
g.V.age.sum
-
-
Avoid using lambdas in the test case unless that is explicitly what is being tested as OLAP systems will typically not be able to execute those tests.
-
AbstractGremlinProcessTest
has various static methods to make writing a test case easy.-
checkResults(Arrays.asList("marko","josh"), traversal)
-
checkMap(new HashMap<String,Long>() {{ put("marko",1l); }}, traversal.next())
-
Developing Benchmarks
Benchmarks are a useful tool to track performance between TinkerPop versions and also as tools to aid development decision making. TinkerPop uses OpenJDK JMH for benchmark development. The JMH framework provides tools for writing robust benchmarking code that avoid many of the pitfalls inherent in benchmarking JIT compiled code on the JVM. Example JMH benchmarks can be found here.
TinkerPop benchmarks live in the gremlin-benchmark
module and can either be run from within your IDE or as a standalone
uber-jar. The uber-jar is the JMH recommended approach and also makes it easy to distribute artifacts to various environments
to gather benchmarking numbers. Having said that, in most cases it should be sufficient to run it from within the IDE.
Benchmarks will not run by default because they are time consuming. To enable benchmarks during the test phase do
-DskipBenchmarks=false
. To change the number of warmup iterations, measurement iterations, and forks you can do
mvn clean test -DskipBenchmarks=false -DdefaultForks=5 -DmeasureIterations=20 -DwarmupIterations=20
. Benchmark results
will be output by default to the benchmarks
directory in JSON format.
Benchmarks may also be run from the command line using the JMH runner. Build the uber-jar and simply run
java -jar gremlin-benchmark-TP-VERSION.jar
. To see a list of JMH runner options, add the -h
flag.
The JUnit/JMH integration was inspired by the Netty projects microbenchmarking suite. Please refer to the Netty
docs for more details. Presently there are 3 abstract benchmark classes
that may be used as building blocks for your benchmarks; AbstractBenchmarkBase
, AbstractGraphBenchmark
, and
AbstractGraphMutateBenchmark
.
-
AbstractBenchmarkBase
- extend when your benchmark does not require a graph instance -
AbstractGraphBenchmark
- extend when you are benchmarking read operations against a graph -
AbstractGraphMutateBenchmark
- extend when you are benchmarking graph mutation operations eg.g.addV()
,graph.addVertex()
Review then Commit
Code modifications must go through a review-then-committ (RTC) process before being merged into a release branch. All committers should follow the pattern below, where "you" refers to the committer wanting to put code into a release branch.
-
Make a JIRA ticket for the software problem you want to solve (i.e. a fix).
-
Fork the release branch that the fix will be put into.
-
The branch name should be the JIRA issue identifier (e.g.
TINKERPOP-XXX
).
-
-
Develop your fix in your branch.
-
When your fix is complete and ready to merge, issue a pull request.
-
Be certain that the test suite is passing.
-
If you updated documentation, be sure that the
process-docs.sh
is building the documentation correctly.
-
-
Before you can merge your branch into the release branch, you must have at least 3 +1 consensus votes.
-
Please see the Apache Software Foundations regulations regarding Voting on Code Modifications.
-
-
Votes are issued by TinkerPop committers as comments to the pull request.
-
Once 3 +1 votes are received, you are responsible for merging to the release branch and handling any merge conflicts.
-
If there is a higher version release branch that requires your fix (e.g.
3.y-1.z
fix going to a3.y.z
release), be sure to merge to that release branch as well.
-
-
Be conscious of deleting your branch if it is no longer going to be used so stale branches don’t pollute the repository.
Note
|
These steps also generally apply to external pull requests from those who are not official Apache committers. In this case, the person responsible for the merge after voting is typically the first person available who is knowledgeable in the area that the pull request affects. Any additional coordination on merging can be handled via the pull request comment system. |
The following exceptions to the RTC (review-then-commit) model presented above are itemized below. It is up to the committer to self-regulate as the itemization below is not complete and only hints at the types of commits that do not require a review.
-
You are responsible for a release and need to manipulate files accordingly for the release.
-
Gremlin.version()
, CHANGELOG dates,pom.xml
version bumps, etc.
-
-
You are doing an minor change and it is obvious that an RTC is not required (would be a pointless burden to the community).
-
The fix is under the commit-then-review (CTR) policy and lazy consensus is sufficient, where a single -1 vote requires you to revert your changes.
-
Adding a test case, fixing spelling/grammar mistakes in the documentation, fixing LICENSE/NOTICE/etc. files, fixing a minor issue in an already merged branch.
-
When the committer chooses CTR, it is considered good form to include something in the commit message that explains that CTR was invoked and the reason for doing so. For example, "Invoking CTR as this change encompasses minor adjustments to text formatting."
Pull Request Format
When you submit a pull request, be sure it uses the following style.
-
The title of the pull request is the JIRA ticket number + "colon" + the title of the JIRA ticket.
-
The first line of the pull request message should contain a link to the JIRA ticket.
-
Discuss what you did to solve the problem articulated in the JIRA ticket.
-
Discuss any "extra" work done that go beyond the assumed requirements of the JIRA ticket.
-
Be sure to explain what you did to prove that the issue is resolved.
-
Test cases written.
-
Integration tests run (if required for the work accomplished).
-
Documentation building (if required for the work accomplished).
-
Any manual testing (though this should be embodied in a test case).
-
-
Notes about what you will do when you merge to the respective release branch (e.g. update CHANGELOG).
-
These types of "on merge tweaks" are typically done to extremely dynamic files to combat and merge conflicts.
-
-
If you are a TinkerPop committer, you can VOTE on your own pull request, so please do so.
Dependencies
There are many dependencies on other open source libraries in TinkerPop modules. When adding dependencies or altering the version of a dependency, developers must consider the implications that may apply to the TinkerPop LICENSE and NOTICE files. There are two implications to consider:
-
Does the dependency fit an Apache approved license?
-
Given the addition or modification to a dependency, does it mean any change for TinkerPop LICENSE and NOTICE files?
Understanding these implications is important for insuring that TinkerPop stays compliant with the Apache 2 license that it releases under.
Regarding the first item, refer to the Apache Legal for a list of approved licenses that are compatible with the Apache 2 license.
The second item requires a bit more effort to follow. The Apache website offers a how-to guide on the approach to maintaining appropriate LICENSE and NOTICE files, but this guide is designed to offer some more specific guidance as it pertains to TinkerPop and its distribution.
To get started, TinkerPop has both "source" and "binary" LICENSE/NOTICE files:
Source LICENSE and NOTICE
As dependencies are not typically added to the source distribution (i.e. the source zip distribution), there is
typically no need to edit source LICENSE/NOTICE when editing a TinkerPop pom.xml
. These files only need to be edited
if the distribution has a file added to it. Such a situation may arise from several scenarios, but it would most
likely come from the addition of a source file from another library.
-
If the file being bundled is Apache licensed, then add an entry to NOTICE.
-
If the file being bundled is under a different approved license, then add an entry to LICENSE and include a copy of that LICENSE in the root
/licenses
directory of the code repository.
Binary LICENSE and NOTICE
The binary LICENSE/NOTICE is perhaps most impacted by changes to the various pom.xml
files. After altering the
pom.xml
file of any module, build both Gremlin Console and Gremlin Server and examine the contents of both binary
distributions, either:
-
target/apache-gremlin-console-3.2.1-SNAPSHOT-distribution.zip
-
target/apache-gremlin-server-3.2.1-SNAPSHOT-distribution.zip
Apache licensed software does not need to be included in LICENSE, but if the new dependency is an Apache-approved
license (e.g. BSD, MIT) then it should be added in the pattern already defined. A copy of the LICENSE should be
added to the <project>/static/licenses
directory of the code repository.
To determine if changes are required to the NOTICE, first check if the bundled jar has a NOTICE file in it (typically
found in /META-INF
directory of the jar).
-
If the bundled file does not have a NOTICE, then no changes to TinkerPop’s NOTICE are required.
-
If the NOTICE of the file being bundled is NOT Apache licensed, then there is no change to TinkerPop’s NOTICE.
-
If the NOTICE of the file being bundled is Apache licensed, then include the copyright notification in TinkerPop’s NOTICE.
-
If the NOTICE of the file being bundled is Apache licensed AND is an Apache Software Foundation project, then ONLY include the portion of that NOTICE in TinkerPop’s NOTICE that is unrelated to the Apache boilerplate NOTICE. If there is no such portion that is different than the boilerplate then this NOTICE can be excluded (i.e. don’t alter TinkerPop’s NOTICE at all).
Please refer to the Modifications to Notice section of the Apache "Licensing How-to" for more information.
Documentation
The documentation for TinkerPop is stored in the git repository in docs/src/
and are then split into several
subdirectories, each representing a "book" (or its own publishable body of work). If a new AsciiDoc file is added to
a book, then it should also be included in the index.asciidoc
file for that book, otherwise the preprocessor will
ignore it. Likewise, if a whole new book (subdirectory) is added, it must include an index.asciidoc
file to be
recognized by the AsciiDoc preprocessor.
Adding a book also requires a change to the root pom.xml
file. Find the "asciidoc" Maven profile and add a new
<execution>
to the asciidoctor-maven-plugin
configuration. For each book in docs/src/
, there should be a
related <execution>
that generates the HTML from the AsciiDoc. Follows the patterns already established by
the existing <execution>
entries, paying special attention to the pathing of the <sourceDirectory>,
<outputDirectory>
and <imagesdir>
. Note that the <outputDirectory>
represents where the book will exist when
uploaded to the server and should preserve the directory structure in git as referenced in <sourceDirectory>
.
Please see the Building and Testing section for more information on how to generate the documentation.
Logging
TinkerPop uses SLF4j for logging and typically leans back on Log4j as the implementation. Configuring log outputs
for debugging purposes within tests can be altered by editing the log4j-test.properties
file in each module’s test
resources. That file gets copied to the target/test-classes
on build and surefire and failsafe plugins in maven
are then configured to point at that area of the file system for those configuration files. The properties files
can be edited to fine tune control of the log output, but generally speaking the current configuration is likely
best for everyone’s general purposes, so if changes are made please revert them prior to commit.
For Providers
Graph Providers are those who develop third-party systems and libraries on top of the various TinkerPop APIs and protocols. They manage their projects independently of TinkerPop in separate repositories. Additional details for providers can be found in the Provider Documentation.
Release Process
This document describes the steps required to release a version of TinkerPop. The release is handled by a "release manager" (a committer fulfills this role), who ensures that the steps in this document are executed. The process is multi-phased and can therefore take several weeks to complete given the time needed for Apache voting and community feedback. Once a release point has been identified, the following phases represent the flow of "release":
-
Pre-flight check.
-
Optionally, produce a release candidate for community feedback.
-
Submit the official release for PMC vote.
-
Submit the official release for Incubator vote.
-
Release and promote.
Note
|
It might be helpful to use this document as generated from the currently release as opposed to one generate
from a previous version or from recent SNAPSHOT . When using one generated for release, all the "versions" in the
commands end up being set to the version that is being released, making cut and paste of those commands less labor
intensive and error prone.
|
Pre-flight Check
The "pre-flight check" is a list of things performed by the release manager during the weeks leading up to a scheduled day to release. These checks will help to ensure that that release day goes smoothly by identifying problems up early and communicating with other members of the community.
-
Fourteen days before release, issue an email to the dev mailing list to remind the community of the pending release.
-
Note any important issues open in JIRA in that post.
-
Request review and update of the "upgrade documentation" and CHANGELOG.
-
-
Seven days before release, announce the code freeze on the dev mailing list to remind the community that the branch under release is protected. Tweaks to documentation and other odds and ends related to release are still allowed during this period.
-
At some point during the week:
-
Run the full integration test suite:
mvn clean install -DskipIntegrationTests=false -DincludeNeo4j
-
Deploy a final SNAPSHOT to the snapshot repository.
-
Review LICENSE and NOTICE files to make sure that no changes are needed.
-
Review javadoc filters on the "Core API" docs to be sure nothing needs to change.
-
Review JIRA tickets in the release and ensure that:
-
All tickets categorized by having a "Component" assigned.
-
All tickets are either of type "Bug" or "Enhancement".
-
All tickets where work was completed are "Closed"
-
Search for "closed the pull request" in comments for hints on possible tickets that were left open by mistake).
-
Look for tickets marked as "Resolved" (some users might not have rights to mark as "Closed" - convert these to "Closed".
-
-
-
-
When all documentation changes are in place, use
bin/publish-docs.sh
to deploy a finalSNAPSHOT
representation of the docs and thus validate that there are no issues with the documentation generation process. Request review of the published documentation on the dev mailing list.
Release Candidate
A release candidate is an unofficial release that is represented by a tagged version in the Git repository. It is offered in cases where there is significant change in a particular version and the potential for upgrades and problems might be high.
-
mvn clean install -DincludeNeo4j
-
mvn verify -DskipIntegrationTests=false -DincludeNeo4j
-
mvn verify -DskipPerformanceTests=false
-
-
bin/publish-docs.sh <username>
- note that under a release candidate the documentation is published as SNAPSHOT -
mvn versions:set -DnewVersion=xx.yy.zz -DgenerateBackupPoms=false
to update the project files to reference a non-SNAPSHOT version -
git diff
and review the updated files (expect allpom.xml
files and this README) -
git commit -a -m "TinkerPop xx.yy.zz release"
andgit push
-
git tag -a -m "TinkerPop xx.yy.zz release" xx.yy.zz
andgit push --tags
-
mvn clean install
-
mvn versions:set -DnewVersion=xx.yy.zz-SNAPSHOT -DgenerateBackupPoms=false
to go back to SNAPSHOT -
git commit -a -m "Returned to xx.yy.zz-SNAPSHOT"
andgit push
-
Announce the release candidate to
dev
mailing list and await feedback -
Repeat as required or proceed to the next phase
PMC Vote
A positive vote for a particular release from the TinkerPop PMC is required to move to the following phase.
-
By this point, the testing performed during the code freeze should have validated the release. If however there are additional tests to perform that the release manager feels are relevant, they should be performed now. In other words, there is no need to rebuild the
SNAPSHOT
yet another time unless there are circumstances that would call its validity into question. -
Update the links in the
README.asciidoc
to point at the latest version. -
Update
CHANGELOG.asciidoc
:-
Update the release date
-
Generate the JIRA release notes report for the current version and append them to the
CHANGELOG.asciidoc
.-
Use an "advanced" search to filter out JIRA issues already released on other versions. For example:
fixVersion = 3.1.0-incubating AND fixVersion not in (3.0.2-incubating, 3.0.1-incubating)
. -
Consider use of an "Excel" export to organize, sort (by type and then id) and prepare the JIRA tickets to be pasted to
CHANGELOG.asciidoc
-
Be sure to include a link to other versions in the
CHANGELOG.asciidoc
that were previously released while the current release was under development as this new release will have those changes included within it. Please see 3.1.0-incubating or 3.2.0-incubating for an example.
-
-
Organize "breaking" changes to be clearly marked (use JIRA and the "breaking" label to identify those)
-
-
Update "upgrade documentation":
-
Update the release date.
-
Update the link to CHANGELOG.asciidoc
-
-
mvn versions:set -DnewVersion=xx.yy.zz -DgenerateBackupPoms=false
to update project files to reference the non-SNAPSHOT version -
git diff
and review the updated files (expect allpom.xml
files and this README) -
git commit -a -m "TinkerPop xx.yy.zz release"
and push -
mvn clean install
- need to build first so that the right version of the console is used withbin/publish-docs.sh
-
bin/process-docs.sh
and validate the generated documentation locally (don’t rely on "SUCCESS" - scroll up through logs to ensure there were no errors and view the HTML directly) -
bin/publish-docs.sh <username>
- Note that this step requires no additional processing as the previous step. handled document generation and this step now merely needs to upload what was generated. -
mvn deploy -Papache-release -DcreateChecksum=true -DskipTests
- deploy signed artifacts with checksums to Apache Nexus. Review (artifacts versions, file sizes, anything that might be out of place - request another committer to review as well). -
Review generated artifacts to be sure they have both javadocs and asciidocs present then "close" the repo - if the repo is left open it will be automatically dropped after five days and closing the repo will allow it to stay available for a full ninety days which is more than enough time to complete a vote. Do NOT "release" the repository at this time.
-
Upload artifacts to
https://dist.apache.org/repos/dist/dev/incubator/tinkerpop
for[VOTE]
review.-
svn co --depth empty https://dist.apache.org/repos/dist/dev/incubator/tinkerpop/ dev
andmkdir dev/xx.yy.zz
-
cp ~/.m2/repository/org/apache/tinkerpop/gremlin-console/xx.yy.zz/gremlin-console-xx.yy.zz-distribution.zip* dev/xx.yy.zz
-
cp ~/.m2/repository/org/apache/tinkerpop/gremlin-server/xx.yy.zz/gremlin-server-xx.yy.zz-distribution.zip* dev/xx.yy.zz
-
cp ~/.m2/repository/org/apache/tinkerpop/tinkerpop/xx.yy.zz/tinkerpop-xx.yy.zz-source-release.zip* dev/xx.yy.zz
-
cd dev/xx.yy.zz
-
ls * | xargs -n1 -I {} echo "mv apache-{} {}" | sed -e 's/distribution/bin/' -e 's/source-release/src/' -e s'/^\(.*\) \(.*\) \(.*\)$/\1 \3 \2/' | /bin/bash
-
cd ..; svn add xx.yy.zz/; svn ci -m "TinkerPop xx.yy.zz release"
-
-
Execute
bin/validate-distribution.sh
and any other relevant testing. -
git tag -a -m "TinkerPop xx.yy.zz release" xx.yy.zz
andgit push --tags
-
Perform JIRA administration tasks:
-
"Release" the current version and set the "release date"
-
If there is to be a follow on release in the current line of code, create that new version specifying the "start date"
-
-
Prepare Git administration tasks. Note that this work can be performed at the release manager’s discretion. It may be wise to wait until a successful VOTE is eminent before reopening development. Apply the following steps as needed per release branch:
-
Make the appropriate branching changes as required by the release and bump the version to
SNAPSHOT
withmvn versions:set -DnewVersion=xx.yy.zz-SNAPSHOT -DgenerateBackupPoms=false
. -
mvn clean install -DskipTests
- need to build first so that the right version of the console is used withbin/publish-docs.sh
-
mvn deploy
- deploy the newSNAPSHOT
-
bin/process-docs.sh
and validate the generatedSNAPSHOT
documentation locally -
bin/publish-docs.sh <username>
to publish theSNAPSHOT
docs which enables the README to work properly. -
Update the links in the
README.asciidoc
to point at theSNAPSHOT
version. -
Commit and push the
SNAPSHOT
changes to git -
Send email to advise that code freeze is lifted.
-
Generate a list of dead branches that will be automatically deleted and post them as a DISCUSS thread for review, then once consensus is reached removed those branches.
-
-
Submit for
[VOTE]
atdev@tinkerpop.apache.org
(see email template below) -
Wait for vote acceptance (72 hours)
Incubator Vote
A positive vote for a particular release from the Apache Incubator is required to move to the following phase.
-
Submit for
[VOTE]
atgeneral@incubator.apache.org
(see email template below)-
Include the vote tally: "Apache TinkerPop (http://tinkerpop.apache.org/) would like to release TinkerPop xx.yy.zz. We had a dev@ VOTE which resulted in a tally of +1 (3), 0 (0), and -1 (0). We now present our artifacts for vote by Incubator."
-
-
Wait for vote acceptance (72 hours)
Release & Promote
-
Login to Apache Nexus and release the previously closed repository.
-
svn co --depth empty https://dist.apache.org/repos/dist/dev/incubator/tinkerpop dev; svn up dev/xx.yy.zz
-
svn co --depth empty https://dist.apache.org/repos/dist/release/incubator/tinkerpop release; mkdir release/xx.yy.zz
-
Copy release files from
dev/xx.yy.zz
torelease/xx.yy.zz
. -
cd release; svn add xx.yy.zz/; svn ci -m "TinkerPop xx.yy.zz release"
-
Update homepage with references to latest distribution and to other internal links elsewhere on the page.
-
Wait for Apache Central to sync the jars and src (http://repo1.maven.org/maven2/org/apache/tinkerpop/tinkerpop/).
-
If there are releases present in SVN that represents lines of code that are no longer under development, then remove those releases. In other words, if
3.1.0-incubating
is present and3.1.1-incubating
is released then remove3.1.0-incubating
. However, if3.0.2-incubating
is present and that line of code is still under potential development, it may stay. -
Announce release on
dev@
/gremlin-users@
mailing lists and tweet from@apachetinkerpop
Email Templates
Release VOTE
Subject: [VOTE] TinkerPop xx.yy.zz Release
Hello,
We are happy to announce that TinkerPop xx.yy.zz is ready for release.
The release artifacts can be found at this location:
https://dist.apache.org/repos/dist/dev/incubator/tinkerpop/xx.yy.zz/
The source distribution is provided by:
apache-tinkerpop-xx.yy.zz-src.zip
Two binary distributions are provided for user convenience:
apache-gremlin-console-xx.yy.zz-bin.zip
apache-gremlin-server-xx.yy.zz-bin.zip
The GPG key used to sign the release artifacts is available at:
https://dist.apache.org/repos/dist/dev/incubator/tinkerpop/KEYS
The online docs can be found here:
http://tinkerpop.apache.org/docs/xx.yy.zz/reference/ (user docs)
http://tinkerpop.apache.org/docs/xx.yy.zz/upgrade/ (upgrade docs)
http://tinkerpop.apache.org/javadocs/xx.yy.zz/core/ (core javadoc)
http://tinkerpop.apache.org/javadocs/xx.yy.zz/full/ (full javadoc)
The tag in Apache Git can be found here:
https://git-wip-us.apache.org/repos/asf?p=incubator-tinkerpop.git;XXXXXXXXXXXXXXXXXX
The release notes are available here:
https://github.com/apache/incubator-tinkerpop/blob/master/CHANGELOG.asciidoc#XXXXXXXXXXXXXXXXXX
The [VOTE] will be open for the next 72 hours --- closing <DayOfTheWeek> (<Month> <Day> <Year>) at <Time> <TimeZone>.
My vote is +1.
Thank you very much,
<TinkerPop Committer Name>
If the above email template is used for the "Incubator Vote", then it should include the following just after the "release notes":
Finally, the dev@tinkerpop [VOTE] thread can be found at this location:
https://pony-poc.apache.org/thread.html/XXXXXXXXXXXXXXXXXX
Result summary: +X (Y binding, Z non-binding), 0 (0), -1 (0)
where this link should point to the result of the VOTE.
Dev Release RESULT VOTE
Subject: [RESULT][VOTE] TinkerPop xx.yy.zz Release
This vote is now closed with a total of X +1s, no +0s and no -1s. The results are:
BINDING VOTES:
+1 (X -- list of voters)
0 (0)
-1 (0)
NON-BINDING VOTES:
+1 (X -- list of voters)
0 (0)
-1 (0)
Thank you very much,
<TinkerPop Committer Name>
General Release Announcement
Subject: TinkerPop xx.yy.zz Released: [name of release line]
Hello,
TinkerPop xx.yy.zz has just been released. [some text to introduce the release - e.g. whether or not there is breaking change, an important game-changing feature or two, etc.]
The release artifacts can be found at this location:
https://www.apache.org/dyn/closer.lua/incubator/tinkerpop/xx.yy.zz/apache-gremlin-console-xx.yy.zz-bin.zip https://www.apache.org/dyn/closer.lua/incubator/tinkerpop/xx.yy.zz/apache-gremlin-server-xx.yy.zz-bin.zip
The online docs can be found here:
http://tinkerpop.apache.org/docs/xx.yy.zz/reference/ (user docs) http://tinkerpop.apache.org/docs/xx.yy.zz/upgrade.html#XXXXXXXXXXXXXXXXXX (upgrade docs) http://tinkerpop.apache.org/javadocs/xx.yy.zz/core/ (core javadoc) http://tinkerpop.apache.org/javadocs/xx.yy.zz/full/ (full javadoc) http://tinkerpop.apache.org/docs/xx.yy.zz/some-new-content/ (some new content) [NEW!]
The release notes are available here:
The Central Maven repo has sync’d as well:
Administration
New Committers
When a candidate is identified by a PPMC member as someone who might be a good official committer to TinkerPop, the PPMC member should open a DISCUSS thread on the private TinkerPop mailing list. The thread should provide some background and reasoning for why that member believes the candidate would be a good committer. Given enough time for feedback on the candidate and presuming there is still positive interest in doing so, a VOTE thread on the private TinkerPop mailing list is started to get the official stance. As per usual, the VOTE will be made open for no less than 72 hours.
If the VOTE closes with a successful positive vote to make the candidate a committer, then send the following email to the candidate and copy the private TinkerPop mailing list:
SUBJECT: Invitation to become TinkerPop committer: [candidate name]
Hello,
The TinkerPop Podling Project Management Committee (PPMC) hereby offers you committer privileges to the project.
These privileges are offered on the understanding that you'll use them reasonably and with common sense. We like to
work on trust rather than unnecessary constraints.
Being a committer enables you to more easily make changes without needing to go through the patch submission process.
Being a committer does not require you to participate any more than you already do. It does tend to make one even more
committed. You will probably find that you spend more time here.
Of course, you can decline and instead remain as a contributor, participating as you do now.
A. This personal invitation is a chance for you to accept or decline in private. Either way, please let us know in
reply to the private@tinkerpop.apache.org address only.
B. If you are accepting, the next step is to register an iCLA with the Apache Software Foundation:
1. Details of the iCLA and the forms are found through this link: http://www.apache.org/licenses/#clas.
2. The form (text or PDF version) provides instructions for its completion and return to the Secretary of the ASF
at secretary@apache.org.
3. When you transmit the completed iCLA, request to notify Apache TinkerPop and choose a unique Apache id.
Look to see if your preferred id is already taken at http://people.apache.org/committer-index.html This will
allow the Secretary to notify the PMC when your iCLA has been recorded.
When recording of your iCLA is noticed, you will receive a follow-up message with the next steps for establishing you
as a committer.
Assuming the individual accepts, the next step is to get their account created. As we are in incubation, we will need to contact a mentor for help with this step.
Upon confirming with the new committer that their account is established, send an announcement email to the developer and user mailing lists:
SUBJECT: New Committer: [committer name]
The Podling Project Management Committee (PPMC) for Apache TinkerPop has asked [committer name] to become a committer
and we are pleased to announce that he has accepted.
[describe the nature of the committers work in the community]
Being a committer enables easier contribution to the project since there is no need to work via the patch submission
process. This should enable better productivity.
Finally, update the TinkerPop incubator project status page by:
-
Adding to the "News" section
-
Adding to the "Committers" section
Meetings
November 23, 2015
The meeting was scheduled for 12:00pm EST, started at 12:05pm when sufficient attendance to constitute a quorum was reached and was held via Google Hangout hosted by Marko Rodriguez. Meeting adjourned at 2:35pm EST.
Committers/PPMC Members
-
Daniel Kuppitz
-
Stephen Mallette
-
Dylan Millikin
-
Jason Plurad
-
Marko Rodriguez
-
Ted Wilmes
Guests
None
Minutes
-
Performed a full review of the list of unresolved tickets in JIRA. The summary of the changes can be found below. Note that releases and assignments made today are not meant to be set in stone. The assignments could change given community discussion or unforeseen events.
-
Decided to add version
3.2.0-incubating
to JIRA. This version was added to help better categorize the available issues. It was explicitly decided that no development was expected to be performed on these issue at this time and that we would wait until3.1.1-incubating
was released before thinking too hard on that body of work. This decision means that themaster
branch will continue to be the current branch of development for the time being and be bound to3.1.x
line of code. -
Discussed use of JIRA dependency links to show "blockers" and dependencies among different JIRA tickets.
-
Discussed a target date for upcoming releases:
-
3.1.1-incubating
- February 1, 2016 -
3.2.0-incubating
- May, 1, 2016
-
The following tickets were assigned to 3.1.1-incubating
:
ID | Description | Type |
---|---|---|
TINKERPOP-379 |
MessageScope.Local.setStaticMessage(M msg) |
Improvement |
TINKERPOP-659 |
GraphConfiguration Class |
Improvement |
TINKERPOP-736 |
Automatic Traversal rewriting |
Improvement |
TINKERPOP-763 |
IsStep broken when profiling is enabled. |
Bug |
TINKERPOP-818 |
Consider a P.instanceOf() |
Improvement |
TINKERPOP-824 |
Do we need runtime BigDecimal in more places? |
Improvement |
TINKERPOP-842 |
MapReduceHelper should sort respective of the number of reduce tasks |
Improvement |
TINKERPOP-859 |
Provide a more general way to set log levels in plugins |
Improvement |
TINKERPOP-860 |
Bindings applied to the PluginAcceptor should appear to Gremlin Server |
Improvement |
TINKERPOP-882 |
Develop a less error prone way for rewriting strategies |
Improvement |
TINKERPOP-886 |
Allow any GraphReader/Writer to be persistence engine for TinkerGraph |
Improvement |
TINKERPOP-891 |
Re-examine Sandboxing Abstractions |
Improvement |
TINKERPOP-893 |
Validate dependency grabs that have TinkerPop dependencies |
Improvement |
TINKERPOP-912 |
Improve the ability to embed Gremlin Server with Channelizer injection |
Improvement |
TINKERPOP-920 |
Test case needed for ensuring same cardinality for key. |
Improvement |
TINKERPOP-927 |
bin/publish-docs.sh should only upload diffs. |
Improvement |
TINKERPOP-930 |
Tie Alias to Transaction Manager in Gremlin Server |
Improvement |
TINKERPOP-932 |
Add ability to cancel script execution associated with a Gremlin Server Session |
Improvement |
TINKERPOP-937 |
Move the implementations sections of the primary documentation to "provider tutorials." |
Improvement |
TINKERPOP-938 |
Add a "clear SNAPSHOT jars" section to the process-docs.sh. |
Improvement |
TINKERPOP-939 |
Neo4jGraph should support HighAvailability (Neo4jHA). |
Improvement |
TINKERPOP-941 |
Improve error message for wrong order().by() arguments |
Improvement |
TINKERPOP-943 |
Warn if Gremlin Server is running prior to generating docs |
Improvement |
TINKERPOP-951 |
Barrier steps provide unexpected results in Gremlin OLAP |
Bug |
TINKERPOP-954 |
Consistent test directory usage |
Improvement |
TINKERPOP-956 |
Connection errors tend to force a complete close of the channel |
Improvement |
TINKERPOP-958 |
Improve usability of .profile() step. |
Improvement |
TINKERPOP-964 |
Test XXXGraphComputer on a Hadoop2 cluster (non-pseudocluster). |
Improvement |
TINKERPOP-967 |
Support nested-repeat() structures |
Improvement |
TINKERPOP-973 |
BLVP shouldn’t clear configuration properties |
Bug |
TINKERPOP-976 |
Fail earlier if invalid version is supplied in validate-distribution.sh |
Bug |
TINKERPOP-978 |
Native TinkerGraph Serializers for GraphSON |
Improvement |
TINKERPOP-979 |
ComputerVerificationStrategy not picking up Order local traversal |
Bug |
TINKERPOP-980 |
Add a service script or daemon mode in the distribution |
Improvement |
TINKERPOP-981 |
Deprecate support for credentialsDbLocation in Gremlin Server Config |
Improvement |
TINKERPOP-983 |
Provide a way to track open Graph instances in tests |
Improvement |
TINKERPOP-984 |
Use GraphProvider for id conversion in Groovy Environment test suite |
Improvement |
TINKERPOP-986 |
Manage binary LICENSE/NOTICE files with bin/checkLicenseNotice.sh |
Improvement |
TINKERPOP-988 |
SparkGraphComputer.submit shouldn’t use ForkJoinPool.commonPool |
Improvement |
The following items were identified for 3.2.0-incubating
:
ID | Description | Type |
---|---|---|
TINKERPOP-331 |
TraverserConverterStep (proposal) |
Improvement |
TINKERPOP-620 |
Commutative Step Marker interface |
Improvement |
TINKERPOP-669 |
Consider Required TraversalStrategies |
Improvement |
TINKERPOP-691 |
TP3 is too prescriptive in exception |
Improvement |
TINKERPOP-740 |
Serializer Handshake |
Improvement |
TINKERPOP-743 |
Support "barrier syntax" in step labels. |
Improvement |
TINKERPOP-761 |
Some basic mathematical functions / steps |
Improvement |
TINKERPOP-786 |
Patterns for DSL Development |
Improvement |
TINKERPOP-789 |
Choose then Enforce Semantics for Graph.close() |
Improvement |
TINKERPOP-790 |
Implement AutoCloseable on TraversalSource |
Improvement |
TINKERPOP-800 |
[Proposal] Domain/Range checking during traversal construction. |
Improvement |
TINKERPOP-813 |
[Proposal] Make the Gremlin Graph Traversal Machine and Instruction Set Explicit |
Improvement |
TINKERPOP-819 |
Mapping Cardinality Interface |
Improvement |
TINKERPOP-831 |
How should OLAP treat Collection<Element> objects? No contract is specified. |
Bug |
TINKERPOP-844 |
PropertyMapStep should reuse PropertiesStep |
Improvement |
TINKERPOP-864 |
Operator.mean would be nice. |
Improvement |
TINKERPOP-871 |
RuntimeStrategy as the general model for all such execution time rewrites/re-orders |
Improvement |
TINKERPOP-872 |
Remove GroupCountStep in favor of new Reduce-based GroupStep |
Improvement |
TINKERPOP-873 |
FoldStep should default to using BulkSet for efficiency. |
Improvement |
TINKERPOP-878 |
Refactor Gremlin Server integration tests to be Client parameterized |
Improvement |
TINKERPOP-889 |
Support for partitioned vertices in GraphComputer |
Improvement |
TINKERPOP-890 |
Remove the concept of branch/ package. |
Improvement |
TINKERPOP-919 |
Features needs to specify whether 2 vertex properties with same key/value is allowed. |
Improvement |
TINKERPOP-940 |
Convert LocalTraversals to MatchSteps in OLAP and Solve the StarGraph Problem |
Improvement |
TINKERPOP-942 |
Use EventStrategy to solve OLAP bulk mutation of OLTP. |
Improvement |
TINKERPOP-944 |
Consider deprecating or better enforcing Graph.Exceptions.elementNotFound |
Improvement |
TINKERPOP-946 |
Traversal respecting Thread.interrupt() |
Improvement |
TINKERPOP-947 |
Enforce semantics of threaded transactions as manual |
Improvement |
TINKERPOP-960 |
Add a Bulk class which is used by Traverser |
Improvement |
TINKERPOP-962 |
Provide "vertex query" selectivity when importing data in OLAP. |
Improvement |
TINKERPOP-963 |
SubgraphTraversalAnalyzer to determine what is really required from a traversal. |
Improvement |
TINKERPOP-966 |
Support reversible traversals in MatchStep (and respective MatchAlgorithms) |
Improvement |
TINKERPOP-969 |
respawn |
Improvement |
TINKERPOP-971 |
TraversalSource should be fluent like GraphComputer |
Improvement |
TINKERPOP-974 |
Saving headless traversals for reuse (clone Iterator Fun) |
Improvement |
TINKERPOP-982 |
valuesDecr, valuesIncr, keysDecr, and valuesDecr is lame. |
Improvement |
The following issues were simply closed during review - the reasons for closing can be found in the comments of the issues themselves:
ID | Description | Type |
---|---|---|
TINKERPOP-375 |
Better Methods for Managing ClassPath for Plugins |
Improvement |
TINKERPOP-487 |
User Supplied Ids and IO |
Improvement |
TINKERPOP-509 |
Subgraph support for VertexProgram |
|
TINKERPOP-604 |
DetachedEdge.attach(Vertex) is too slow. |
Improvement |
TINKERPOP-795 |
Provide Traverser.setPath() |
Improvement |
TINKERPOP-862 |
Add a TraversalSourceStrategy that provides "locked" values. |
Improvement |
TINKERPOP-894 |
Shorthand for install of TinkerPop dependencies |
Improvement |
TINKERPOP-936 |
Check feature requirements before opening graph during tests |
Improvement |
October 29, 2015
The meeting was scheduled for 1:00pm EST, started on time and was held via Google Hangout hosted by Stephen Mallette. Meeting adjourned at 1:45pm EST.
Committers/PPMC Members
-
Daniel Kuppitz
-
Stephen Mallette
-
Marko Rodriguez
Guests
None
Minutes
-
Reviewed the scope of 3.1.0-incubating in JIRA in the context of the upcoming release date on November 16, 2015.
-
It was noted that with the new one week code freeze policy that the real cut-off date for work is November 9, 2015.
-
There was general consensus on the call that work should be accomplished in such a way that the code review process not drag into the code freeze time period. In other words, pull requests to the release branch should be completed well ahead of the 9th.
Upon review of the tickets in JIRA assigned to 3.1.0-incubating, the following were removed from the 3.1.0-incubating roadmap:
ID | Description | Removal Reasoning |
---|---|---|
TINKERPOP-891 |
Re-examine Sandboxing Abstractions |
Low priority and time limitations. |
TINKERPOP-890 |
Remove the concept of branch/ package. |
Awaiting step library definition in 3.2.0-incubating. |
TINKERPOP-873 |
FoldStep should default to using BulkSet for efficiency. |
Awaiting step library definition in 3.2.0-incubating. |
TINKERPOP-864 |
Operator.mean would be nice. |
Awaiting step library definition in 3.2.0-incubating. |
TINKERPOP-862 |
Add a TraversalSourceStrategy that provides "locked" values. |
Low priority and time limitations. |
TINKERPOP-854 |
Remove PropertyMapStep in favor of multi-instruction construction. |
Non-trivial given time limitations. |
TINKERPOP-789 |
Choose then Enforce Semantics for Graph.close() |
Non-trivial given time limitations. |
TINKERPOP-768 |
MatchStep in OLAP should be smart about current vertex. |
Non-trivial given time limitations. |
TINKERPOP-705 |
Make use of a MemoryRDD instead of Accumulators in SparkGraphComputer? |
Non-trivial given time limitations. |
TINKERPOP-659 |
GraphConfiguration Class |
Non-trivial given time limitations. |
TINKERPOP-623 |
More output for OLAP jobs |
Not clearly defined given time limitations. |
TINKERPOP-620 |
Commutative Step Marker interface |
Awaiting step library definition in 3.2.0-incubating |
TINKERPOP-550 |
Gremlin IO needs to support both OLTP and OLAP naturally. |
Not clearly defined given time limitations. |
TINKERPOP-479 |
Consider Providing "getOrCreate" Functionality |
Not clearly defined given time limitations. |