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

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


The following commit(s) were added to refs/heads/master by this push:
     new fe27feb2ab5 [Dataflow Streaming] Enable state tag encoding v2 (#38705)
fe27feb2ab5 is described below

commit fe27feb2ab5fa2af9330747fb0fb86d3c40a071c
Author: Arun Pandian <[email protected]>
AuthorDate: Mon Jun 1 02:04:18 2026 -0700

    [Dataflow Streaming] Enable state tag encoding v2 (#38705)
    
    * Enable state tag encoding v2 by default for new Dataflow Streaming Engine 
jobs
    Also added CHANGES.md entry detailing the change, how to disable it, and 
job update/downgrade limitations.
    * Respect UpdateCompatibility for tag encoding v2
---
 CHANGES.md                                         |  2 +-
 .../beam/runners/dataflow/DataflowRunner.java      |  6 +++
 .../beam/runners/dataflow/DataflowRunnerTest.java  | 44 ++++++++++++++++++++++
 3 files changed, 51 insertions(+), 1 deletion(-)

diff --git a/CHANGES.md b/CHANGES.md
index 3b4af42daf8..669cabd7c5a 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -69,7 +69,7 @@
 
 ## New Features / Improvements
 
-* X feature added (Java/Python) 
([#X](https://github.com/apache/beam/issues/X)).
+* (Java) Enabled state tag encoding v2 by default for new Dataflow Streaming 
Engine jobs. It can be disabled by passing 
`--experiments=disable_streaming_engine_state_tag_encoding_v2` or 
`--updateCompatibilityVersion=2.74.0` pipeline option. Note that the tag 
encoding version cannot change during a job update. Jobs using tag encoding v2 
(enabled by default for new jobs on 2.75.0+) cannot be downgraded to Beam 
versions prior to 2.73.0, as only versions 2.73.0 and later support tag 
encoding [...]
 
 ## Breaking Changes
 
diff --git 
a/runners/google-cloud-dataflow-java/src/main/java/org/apache/beam/runners/dataflow/DataflowRunner.java
 
b/runners/google-cloud-dataflow-java/src/main/java/org/apache/beam/runners/dataflow/DataflowRunner.java
index d04afb351e4..4864f2cf453 100644
--- 
a/runners/google-cloud-dataflow-java/src/main/java/org/apache/beam/runners/dataflow/DataflowRunner.java
+++ 
b/runners/google-cloud-dataflow-java/src/main/java/org/apache/beam/runners/dataflow/DataflowRunner.java
@@ -101,6 +101,7 @@ import org.apache.beam.sdk.options.ExperimentalOptions;
 import org.apache.beam.sdk.options.PipelineOptions;
 import org.apache.beam.sdk.options.PipelineOptionsValidator;
 import org.apache.beam.sdk.options.SdkHarnessOptions;
+import org.apache.beam.sdk.options.StreamingOptions;
 import org.apache.beam.sdk.options.ValueProvider.NestedValueProvider;
 import org.apache.beam.sdk.runners.AppliedPTransform;
 import org.apache.beam.sdk.runners.PTransformOverride;
@@ -1310,6 +1311,11 @@ public class DataflowRunner extends 
PipelineRunner<DataflowPipelineJob> {
         // Experiment marking that the harness supports tag encoding v2
         // Backend will enable tag encoding v2 only if the harness supports it.
         experiments.add("streaming_engine_state_tag_encoding_v2_supported");
+        // Experiment requesting tag encoding v2 on new jobs starting with 
2.75.0. During job
+        // updates old job's tag encoding version is carried over by the 
backend.
+        if (!StreamingOptions.updateCompatibilityVersionLessThan(options, 
"2.75.0")) {
+          experiments.add("enable_streaming_engine_state_tag_encoding_v2");
+        }
         options.setExperiments(ImmutableList.copyOf(experiments));
       }
 
diff --git 
a/runners/google-cloud-dataflow-java/src/test/java/org/apache/beam/runners/dataflow/DataflowRunnerTest.java
 
b/runners/google-cloud-dataflow-java/src/test/java/org/apache/beam/runners/dataflow/DataflowRunnerTest.java
index 122c4aeee34..073b30f928d 100644
--- 
a/runners/google-cloud-dataflow-java/src/test/java/org/apache/beam/runners/dataflow/DataflowRunnerTest.java
+++ 
b/runners/google-cloud-dataflow-java/src/test/java/org/apache/beam/runners/dataflow/DataflowRunnerTest.java
@@ -2923,4 +2923,48 @@ public class DataflowRunnerTest implements Serializable {
     PAssert.that(output).containsInAnyOrder("value:UPDATE_BEFORE");
     pipeline.run();
   }
+
+  @Test
+  public void testStreamingStateTagEncodingV2PreCompatibility() throws 
Exception {
+    DataflowPipelineOptions options = buildPipelineOptions();
+    options.as(StreamingOptions.class).setStreaming(true);
+    options.as(StreamingOptions.class).setUpdateCompatibilityVersion("2.74.0");
+    Pipeline p = Pipeline.create(options);
+
+    p.run();
+
+    List<String> experiments = options.getExperiments();
+    assertNotNull(experiments);
+    
assertTrue(experiments.contains("streaming_engine_state_tag_encoding_v2_supported"));
+    
assertFalse(experiments.contains("enable_streaming_engine_state_tag_encoding_v2"));
+  }
+
+  @Test
+  public void testStreamingStateTagEncodingV2PostCompatibility() throws 
Exception {
+    DataflowPipelineOptions options = buildPipelineOptions();
+    options.as(StreamingOptions.class).setStreaming(true);
+    options.as(StreamingOptions.class).setUpdateCompatibilityVersion("2.75.0");
+    Pipeline p = Pipeline.create(options);
+
+    p.run();
+
+    List<String> experiments = options.getExperiments();
+    assertNotNull(experiments);
+    
assertTrue(experiments.contains("streaming_engine_state_tag_encoding_v2_supported"));
+    
assertTrue(experiments.contains("enable_streaming_engine_state_tag_encoding_v2"));
+  }
+
+  @Test
+  public void testStreamingStateTagEncodingV2NoCompatibility() throws 
Exception {
+    DataflowPipelineOptions options = buildPipelineOptions();
+    options.as(StreamingOptions.class).setStreaming(true);
+    Pipeline p = Pipeline.create(options);
+
+    p.run();
+
+    List<String> experiments = options.getExperiments();
+    assertNotNull(experiments);
+    
assertTrue(experiments.contains("streaming_engine_state_tag_encoding_v2_supported"));
+    
assertTrue(experiments.contains("enable_streaming_engine_state_tag_encoding_v2"));
+  }
 }

Reply via email to