Skip to content

IGNITE-29201 Add RFC on public API changes - #13740

Closed
anton-vinogradov wants to merge 4 commits into
apache:masterfrom
anton-vinogradov:ignite-29201-rfc-process
Closed

anton-vinogradov wants to merge 4 commits into
apache:masterfrom
anton-vinogradov:ignite-29201-rfc-process

Conversation

@anton-vinogradov

@anton-vinogradov anton-vinogradov commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Adds the first RFC defining public API scope and the review process for API, protocol, and storage changes. The RFC needs approval from three Ignite committers; the RFC and implementation are then merged together in one PR and one commit per ticket.

One RFC can cover several implementation tickets. It is merged with the first implementation PR, and linked tickets track the remaining work. The document also explains why protocol and storage changes need review and uses IEPs as a guide for the level of detail.

CONTRIBUTING links to the RFC directory and the review process; no manual index needs updating.

Jira: https://issues.apache.org/jira/browse/IGNITE-29201

Validation: documentation-only change; checked the diff, process consistency, links, and Apache license header. No code tests run.

- User-facing configuration, including defaults.
- Supported metrics, JMX interfaces, and system views.

The same review requirement covers client and internode protocols and persistent data formats, including metadata, WAL, and snapshots.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

plz clarify - why we need such a requirement ?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Because it's a public API too.
Discussable, but seems to be the truth.

For example, we expect that the next version will be able to use previous versions' data.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Are you mean ABi compatibility ? If so - seems we not discuss it. What 'data' is mean here ?
If you describe thw case when someone implement his own (for example) client and it need to work in times ... I don`t know, it`s questionable as for me and probably beyond this scope?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Why beyond this scope?
It's what makes the product stable and useful. And that's what we desire.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

@zstan Thank you for your valuable question.

We want to reach several goals when define network protocol as public API:

  1. Have an ability to easily implement RU process when nodes of different version works in one cluster. Nodes of different version must talk to each other in compatible way, so communication, discovery, idto protocols becomes public API.
  2. Make thoughtful decisions on changes protocols as it very core part of Ignite. And paying less attention that required leads to huge tech debt that we was paying in pas year by refactoring that subsystem from very root.

## Ticket → RFC PR → implementation

1. Open a ticket describing the problem and proposed change.
2. Open a PR adding `rfcs/IGNITE-<ticket>-<short-title>.md`. Link the ticket and PR to each other; use the ticket number instead of maintaining a separate RFC counter.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Do you mean in that case where a ticket fits the requirement to create an RFC, it would be implemented in two commits in the main branch (RFT + code implementation)?
Please clarify if it needs to modify other triggers, because before we always intended that we have one commit for a JIAR ticket.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

It will be one PR for each Issue.
It will include the RFC and implementation.

2. Open a PR adding `rfcs/IGNITE-<ticket>-<short-title>.md`. Link the ticket and PR to each other; use the ticket number instead of maintaining a separate RFC counter.
3. Review the document in the PR. When ready for approval, share the proposed revision on the dev list and allow at least 72 hours for feedback. Keep the list informed of significant changes and concerns.
4. Collect explicit approval of that revision from at least three different Ignite committers in the PR. Resolve outstanding technical objections and post the approval summary and outcome on the dev list before merging. Material revisions need renewed approval and review time.
5. Merge the RFC before merging the public API changes. Implementation PRs link to it and follow normal code review and testing.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

How could we distinguish the implemented RFTC from the one that only approved and merged?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Let's change to merge the RFC and implementation together?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Implementation can contain more that one issue

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Should each extend the previous RFC if it changes the public behavior?

@vldpyatkov

Copy link
Copy Markdown
Contributor

Could we clarify the expected level of implementation detail in an RFC?

Should it describe the public contract, including observable behavior and guarantees, or also the internal algorithms used to implement it? For example, a timeout proposal should specify what happens to an operation after the timeout expires, but must it also describe how timeouts are tracked internally?

@anton-vinogradov

Copy link
Copy Markdown
Contributor Author

Could we clarify the expected level of implementation detail in an RFC?

Should it describe the public contract, including observable behavior and guarantees, or also the internal algorithms used to implement it? For example, a timeout proposal should specify what happens to an operation after the timeout expires, but must it also describe how timeouts are tracked internally?

RFC should be similar to the IEP. Let's do it this way and define explicit rules when we face issues.
Deal?

@anton-vinogradov

Copy link
Copy Markdown
Contributor Author

Updated the PR according to the questions.

@zstan

zstan commented Oct 27, 2026

Copy link
Copy Markdown
Contributor

Just a bit joke: did you know that IgniteSQLException is internal - thus no need to discuss it`s changes )

@anton-vinogradov

Copy link
Copy Markdown
Contributor Author

Just a bit joke: did you know that IgniteSQLException is internal - thus no need to discuss it`s changes )

Currently, we have a huge gap in defining what is public and what is private.
So, common sense is our friend for the moment.
Let's start with some vision and tune it.


## Why

We should agree on changes to public API before merging them. Use a ticket to describe the problem and a PR to review an RFC stored alongside the code.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

public API has rules on how to change it, already.
But, we don't have clear definition of what public API are.

So, we have two goals that must be adressed in different RFCs in my optinion:

  1. Give clear definition of public API and public behavior in Apache Ignite.
  2. Define (change) process of creation, changes or removal public API.

@anton-vinogradov anton-vinogradov Oct 27, 2026 •

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

public API has rules on how to change it, already.

Can you point to the rules?

So, we have two goals

Could you make an initial proposal for discussion?

@anton-vinogradov

Copy link
Copy Markdown
Contributor Author

Split into two focused discussions:

Please review the API definitions first, then the process. Closing this PR in favor of those two; the discussion here remains available for context.

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.

4 participants