Skip to content

Conversation

@SiyaoIsHiding
Copy link
Contributor

No description provided.

but in no way discouraged: it's generally a good idea to have a class-level comment that explains
where the component fits in the architecture, and anything else that you feel is important.
- **API packages:** must be documented.
- **Internal packages:** optional but encouraged—add a short class-level comment explaining the component’s role.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

encouraged - add

Testing against an external process, using either of the tools:
- [Simulacron](https://github.com/datastax/simulacron): simulates Cassandra nodes on loopback. You “prime” it with expected query results.
*Example*: `NodeTargetingIT`.
- [CCM](https://github.com/pcmanus/ccm): launches actual Cassandra nodes locally. The `ccm` executable must be in the path. Pass variables like `-Dccm.version=5.0.0 -Dccm.dse=false` to specify the Cassandra version or distribution.
Copy link
Member

@lukasz-antoniak lukasz-antoniak Oct 16, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should be -ccm.distribution=dse, not -Dccm.dse=false.

1. Nullability: Please use the [Spotbugs annotations](https://spotbugs.github.io) to document nullability of new class or interface using the `@Nullable` and `@NonNull` annotations from the package `edu.umd.cs.findbugs.annotations`.
2. Concurrency annotations: Please use the [JCIP annotations](http://jcip.net/annotations/doc/index.html) to document thread-safety.
3. Static imports: Please only use static imports for AssertJ, Mockito, and Awaitility.
4. `toString()`: only for debug in development. Use `toCqlLiteral()` is applicable for logs.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shorten format does not tell the meaning of previous long description. Not all classes would have toCqlLiteral().

#### Integration Tests
1. Install Cassandra Cluster Manager (CCM) following its [README](https://github.com/apache/cassandra-ccm).
2. On macOS, enable loopback aliases:
Copy link
Member

@lukasz-antoniak lukasz-antoniak Oct 16, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe explicitly mention On MacOS only, ...

@absurdfarce
Copy link
Contributor

I feel like the current state of this PR loses a lot of good suggestions and guidance about how new code should be structured. I'm wondering if we can't make a smaller set of edits to update what needs to be changed while still keeping most of the guidance in the current doc.

@SiyaoIsHiding
Copy link
Contributor Author

I think realistically, no community contributor is gonna read 500+ lines before they submit a single PR. It makes sense for the onboarding of a full-time job, but it does not make sense for a community contributor, e.g., someone who maintains a library that uses the Java driver as a dependency and only plans to create one pull request. When they open such a long file, even if the file is nice and detailed, they are just gonna skip it.

If you agree ^ this is true, then we gotta make it shorter.

My 2 cents is that the following has lower priority and can be potentially removed:

  1. Examples to make a point stronger. E.g.
/**
* @return this {@link Builder} <-- completely unnecessary
*/
Builder withLimit(int limit) {
  1. Things that users can easily find out by themselves. E.g.

We use SLF4J; loggers are declared like this:
private static final Logger LOG = LoggerFactory.getLogger(TheEnclosingClass.class);

  1. Things that are very general or common sense, nothing specific to this Java driver project. E.g.

Like commits, pull requests should be focused on a single, clearly stated goal..
If you have to address feedback, avoid rewriting the history (e.g. squashing or amending commits): this makes the reviewers' job harder, because they have to re-read the full diff and figure out where your new changes are.

  1. Tips on a scenario that is unlikely to happen, and when it happens, we can easily fix it in the PR review. E.g.

Don't abuse the stream API
The java.util.stream API is often used (abused?) as a "functional API for collections"

It's rare that a community contributor submits a PR with this functional stream API. And when it happens, we can fix it in the PR review. Such things should be of low priority.

I think those points ^ are all good to have, but are less important than a short CONTRIBUTING.md so that people actually read.

But if you both think the longer version is better, I will rewrite it. Pls let me know what you think :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants