This is an automated email from the ASF dual-hosted git repository.

jqin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink.git


The following commit(s) were added to refs/heads/master by this push:
     new d4a3687aacd [FLIP-321] Update the docs to add migration periods for 
deprecated APIs. (#23865)
d4a3687aacd is described below

commit d4a3687aacdea61920098dd7814776655fde19db
Author: Jiangjie (Becket) Qin <becket....@gmail.com>
AuthorDate: Fri Dec 15 16:11:42 2023 +0800

    [FLIP-321] Update the docs to add migration periods for deprecated APIs. 
(#23865)
---
 docs/content/docs/ops/upgrading.md | 38 +++++++++++++++++++++++++++++++++++---
 1 file changed, 35 insertions(+), 3 deletions(-)

diff --git a/docs/content/docs/ops/upgrading.md 
b/docs/content/docs/ops/upgrading.md
index ce58a7848e5..cc7d5e28cd8 100644
--- a/docs/content/docs/ops/upgrading.md
+++ b/docs/content/docs/ops/upgrading.md
@@ -55,11 +55,43 @@ This table lists the `source` / `binary` compatibility 
guarantees for each annot
 |  `Experimental`  |    {{< xmark >}}/{{< xmark >}}     |    {{< xmark >}}/{{< 
xmark >}}     |    {{< xmark >}}/{{< xmark >}}     |
 
 {{< hint info >}}
-{{< label Example >}}  
-Code written against a `PublicEvolving` API in 1.15.2 will continue to run in 
1.15.3, without having to recompile the code.  
-That same code would have to be recompiled when upgrading to 1.16.0 though.
+{{< label Example >}}
+Consider the code written against a `Public` API in 1.15.2:
+* The code can continue to run when upgrading to Flink 1.15.3 without 
recompiling, because patch version upgrades for `Public` APIs guarantee 
`binary` compatibility.
+* The same code may have to be recompiled when upgrading from 1.15.x to 
1.16.0, because minor version upgrades for `Public` APIs only provide `source` 
compatibility, not `binary` compatibility.
+* Code change may be required when upgrading from 1.x to 2.x because major 
version upgrades for `Public` APIs provide neither `source` nor `binary` 
compatibility.
+
+Consider the code written against a `PublicEvolving` API in 1.15.2:
+* The code can continue to run when upgrading to Flink 1.15.3 without 
recompiling, because patch version upgrades for `PublicEvolving` APIs guarantee 
`binary` compatibility.
+* A code change may be required when upgrading from 1.15.x to Flink 1.16.0, 
because minor version upgrades for `PublicEvolving` APIs provide neither 
`source` nor binary compatibility.
 {{< /hint >}}
 
+### Deprecated API Migration Period
+When an API is deprecated, it is marked with the `@Deprecated` annotation and 
a deprecation message is added to the Javadoc.
+According to 
[FLIP-321](https://cwiki.apache.org/confluence/display/FLINK/FLIP-321%3A+Introduce+an+API+deprecation+process),
 
+starting from release 1.18, each deprecated API will have a guaranteed 
migration period depending on the API stability level:
+
+|    Annotation    |          Guaranteed Migration Period           |Could be 
removed after the migration period|
+|:----------------:|:----------------------------------------------:|:-----------------------------------------:|
+|     `Public`     |                2 minor releases                |          
  Next major version             |
+| `PublicEvolving` |                1 minor release                 |          
  Next minor version             |
+|  `Experimental`  | 1 patch release for the affected minor release |          
  Next patch version             |
+
+The source code of a deprecated API will be kept for at least the guaranteed 
migration period, 
+and may be removed at any point after the migration period has passed.
+
+{{< hint info >}}
+{{< label Example >}}
+Assuming a release sequence of 1.18, 1.19, 1.20, 2.0, 2.1, ..., 3.0,
+- if a `Public` API is deprecated in 1.18, it will not be removed until 2.0.
+- if a `Public` API is deprecated in 1.20, the source code will be kept in 2.0 
because the migration period is 2 minor releases. Also, because a `Public` API 
must maintain source compatibility throughout a major version, the source code 
will be kept for all the 2.x versions and removed in 3.0 at the earliest.
+- if a `PublicEvolving` API is deprecated in 1.18, it will be removed in 1.20 
at the earliest. 
+- if a `PublicEvolving` API is deprecated in 1.20, the source code will be 
kept in 2.0 because the migration period is 1 minor releases. The source code 
may be removed in 2.1 at the earliest.
+- if an `Experimental` API is deprecated in 1.18.0, the source code will be 
kept for 1.18.1 and removed in 1.18.2 at the earliest. Also, the source code 
can be removed in 1.19.0.  
+{{< /hint >}}
+
+Please check the 
[FLIP-321](https://cwiki.apache.org/confluence/display/FLINK/FLIP-321%3A+Introduce+an+API+deprecation+process)
 wiki for more details.
+
 ## Restarting Streaming Applications
 
 The line of action for upgrading a streaming application or migrating an 
application to a different cluster is based on Flink's [Savepoint]({{< ref 
"docs/ops/state/savepoints" >}}) feature. A savepoint is a consistent snapshot 
of the state of an application at a specific point in time. 

Reply via email to