You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flink.apache.org by GitBox <gi...@apache.org> on 2020/05/03 18:27:26 UTC

[GitHub] [flink] sjwiesman opened a new pull request #11980: [FLINK-17499][state-processor-api] LazyTimerService used to register …

sjwiesman opened a new pull request #11980:
URL: https://github.com/apache/flink/pull/11980


   …timers via State Processing API incorectly mixes event time timers with processing time timers
   
   ## What is the purpose of the change
   
   Fix registration of timer service in state processor api
   
   ## Brief change log
   
   N/Z
   
   ## Verifying this change
   
   UT 
   
   ## Does this pull request potentially affect one of the following parts:
   
     - Dependencies (does it add or upgrade a dependency): (yes / **no**)
     - The public API, i.e., is any changed class annotated with `@Public(Evolving)`: (yes / **no**)
     - The serializers: (yes / no / don't know)
     - The runtime per-record code paths (performance sensitive): (yes / **no** / don't know)
     - Anything that affects deployment or recovery: JobManager (and its components), Checkpointing, Kubernetes/Yarn/Mesos, ZooKeeper: (yes / **no** / don't know)
     - The S3 file system connector: (yes / **no** / don't know)
   
   ## Documentation
   
     - Does this pull request introduce a new feature? no
     - If yes, how is the feature documented? not documented
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [flink] flinkbot edited a comment on pull request #11980: [FLINK-17499][state-processor-api] LazyTimerService used to register …

Posted by GitBox <gi...@apache.org>.
flinkbot edited a comment on pull request #11980:
URL: https://github.com/apache/flink/pull/11980#issuecomment-623160625


   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "67689c04b081510c3992d369a65735ec010aa468",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=545",
       "triggerID" : "67689c04b081510c3992d369a65735ec010aa468",
       "triggerType" : "PUSH"
     }, {
       "hash" : "8c01052c252c168099748fdb8c8438b9d963768b",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=561",
       "triggerID" : "8c01052c252c168099748fdb8c8438b9d963768b",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * 67689c04b081510c3992d369a65735ec010aa468 Azure: [PENDING](https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=545) 
   * 8c01052c252c168099748fdb8c8438b9d963768b Azure: [PENDING](https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=561) 
   
   <details>
   <summary>Bot commands</summary>
     The @flinkbot bot supports the following commands:
   
    - `@flinkbot run travis` re-run the last Travis build
    - `@flinkbot run azure` re-run the last Azure build
   </details>


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [flink] flinkbot commented on pull request #11980: [FLINK-17499][state-processor-api] LazyTimerService used to register …

Posted by GitBox <gi...@apache.org>.
flinkbot commented on pull request #11980:
URL: https://github.com/apache/flink/pull/11980#issuecomment-623160625


   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "67689c04b081510c3992d369a65735ec010aa468",
       "status" : "UNKNOWN",
       "url" : "TBD",
       "triggerID" : "67689c04b081510c3992d369a65735ec010aa468",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * 67689c04b081510c3992d369a65735ec010aa468 UNKNOWN
   
   <details>
   <summary>Bot commands</summary>
     The @flinkbot bot supports the following commands:
   
    - `@flinkbot run travis` re-run the last Travis build
    - `@flinkbot run azure` re-run the last Azure build
   </details>


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [flink] sjwiesman edited a comment on pull request #11980: [FLINK-17499][state-processor-api] LazyTimerService used to register …

Posted by GitBox <gi...@apache.org>.
sjwiesman edited a comment on pull request #11980:
URL: https://github.com/apache/flink/pull/11980#issuecomment-623436946


   > Ouch 😅
   
   Couldn't have said it better myself. 
   
   Just pushed an updated based on your feedback. Will merge on green. 


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [flink] sjwiesman commented on a change in pull request #11980: [FLINK-17499][state-processor-api] LazyTimerService used to register …

Posted by GitBox <gi...@apache.org>.
sjwiesman commented on a change in pull request #11980:
URL: https://github.com/apache/flink/pull/11980#discussion_r419393124



##########
File path: flink-libraries/flink-state-processing-api/src/test/java/org/apache/flink/state/api/output/KeyedStateBootstrapOperatorTest.java
##########
@@ -43,11 +48,53 @@
  */
 public class KeyedStateBootstrapOperatorTest {
 
-	private static final ValueStateDescriptor<Long> descriptor = new ValueStateDescriptor<Long>("state", Types.LONG);
+	private static final ValueStateDescriptor<Long> descriptor = new ValueStateDescriptor<>("state", Types.LONG);
+
+	private static final Long EVENT_TIMER = Long.MAX_VALUE - 1;
+
+	private static final Long PROC_TIMER = Long.MAX_VALUE - 2;
 
 	@Rule
 	public TemporaryFolder folder = new TemporaryFolder();
 
+	@Test
+	public void testTimerStateRestorable() throws Exception {
+		Path path = new Path(folder.newFolder().toURI());
+
+		OperatorSubtaskState state;
+		KeyedStateBootstrapOperator<Long, Long> bootstrapOperator = new KeyedStateBootstrapOperator<>(0L, path, new TimerBootstrapFunction());
+		try (KeyedOneInputStreamOperatorTestHarness<Long, Long, TaggedOperatorSubtaskState> harness = getHarness(bootstrapOperator)) {
+			harness.open();
+
+			harness.processElement(1L, 0L);
+			harness.processElement(2L, 0L);
+			harness.processElement(3L, 0L);
+			bootstrapOperator.endInput();
+
+			state = harness.extractOutputValues().get(0).state;
+		}
+
+		KeyedProcessOperator<Long, Long, Tuple3<Long, Long, TimeDomain>> procOperator = new KeyedProcessOperator<>(new SimpleProcessFunction());
+		try (KeyedOneInputStreamOperatorTestHarness<Long, Long, Tuple3<Long, Long, TimeDomain>> harness = getHarness(procOperator)) {
+
+			harness.initializeState(state);
+			harness.open();
+
+			harness.processWatermark(EVENT_TIMER);
+			harness.setProcessingTime(PROC_TIMER);
+
+			Assert.assertThat(harness.extractOutputValues(), Matchers.containsInAnyOrder(
+				Tuple3.of(1L, EVENT_TIMER, TimeDomain.EVENT_TIME),
+				Tuple3.of(2L, EVENT_TIMER, TimeDomain.EVENT_TIME),
+				Tuple3.of(3L, EVENT_TIMER, TimeDomain.EVENT_TIME),
+				Tuple3.of(1L, PROC_TIMER, TimeDomain.PROCESSING_TIME),
+				Tuple3.of(2L, PROC_TIMER, TimeDomain.PROCESSING_TIME),
+				Tuple3.of(3L, PROC_TIMER, TimeDomain.PROCESSING_TIME)));
+
+			harness.snapshot(0L, 0L);

Review comment:
       Nope, copy-paste error. 




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [flink] sjwiesman commented on pull request #11980: [FLINK-17499][state-processor-api] LazyTimerService used to register …

Posted by GitBox <gi...@apache.org>.
sjwiesman commented on pull request #11980:
URL: https://github.com/apache/flink/pull/11980#issuecomment-623436946


   > Ouch 😅
   Couldn't have said it better myself. 
   
   Just pushed an updated based on your feedback. Will merge on green. 


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [flink] sjwiesman edited a comment on pull request #11980: [FLINK-17499][state-processor-api] LazyTimerService used to register …

Posted by GitBox <gi...@apache.org>.
sjwiesman edited a comment on pull request #11980:
URL: https://github.com/apache/flink/pull/11980#issuecomment-623436946


   > Ouch 😅
   
   Couldn't have said it better myself. 
   
   Just pushed an updated based on your feedback. Feeling extra cautious today so will merge on green. 


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [flink] flinkbot commented on pull request #11980: [FLINK-17499][state-processor-api] LazyTimerService used to register …

Posted by GitBox <gi...@apache.org>.
flinkbot commented on pull request #11980:
URL: https://github.com/apache/flink/pull/11980#issuecomment-623158253


   Thanks a lot for your contribution to the Apache Flink project. I'm the @flinkbot. I help the community
   to review your pull request. We will use this comment to track the progress of the review.
   
   
   ## Automated Checks
   Last check on commit 67689c04b081510c3992d369a65735ec010aa468 (Sun May 03 18:30:26 UTC 2020)
   
   **Warnings:**
    * No documentation files were touched! Remember to keep the Flink docs up to date!
   
   
   <sub>Mention the bot in a comment to re-run the automated checks.</sub>
   ## Review Progress
   
   * ❓ 1. The [description] looks good.
   * ❓ 2. There is [consensus] that the contribution should go into to Flink.
   * ❓ 3. Needs [attention] from.
   * ❓ 4. The change fits into the overall [architecture].
   * ❓ 5. Overall code [quality] is good.
   
   Please see the [Pull Request Review Guide](https://flink.apache.org/contributing/reviewing-prs.html) for a full explanation of the review process.<details>
    The Bot is tracking the review progress through labels. Labels are applied according to the order of the review items. For consensus, approval by a Flink committer of PMC member is required <summary>Bot commands</summary>
     The @flinkbot bot supports the following commands:
   
    - `@flinkbot approve description` to approve one or more aspects (aspects: `description`, `consensus`, `architecture` and `quality`)
    - `@flinkbot approve all` to approve all aspects
    - `@flinkbot approve-until architecture` to approve everything until `architecture`
    - `@flinkbot attention @username1 [@username2 ..]` to require somebody's attention
    - `@flinkbot disapprove architecture` to remove an approval you gave earlier
   </details>


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [flink] flinkbot edited a comment on pull request #11980: [FLINK-17499][state-processor-api] LazyTimerService used to register …

Posted by GitBox <gi...@apache.org>.
flinkbot edited a comment on pull request #11980:
URL: https://github.com/apache/flink/pull/11980#issuecomment-623160625


   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "67689c04b081510c3992d369a65735ec010aa468",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=545",
       "triggerID" : "67689c04b081510c3992d369a65735ec010aa468",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * 67689c04b081510c3992d369a65735ec010aa468 Azure: [PENDING](https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=545) 
   
   <details>
   <summary>Bot commands</summary>
     The @flinkbot bot supports the following commands:
   
    - `@flinkbot run travis` re-run the last Travis build
    - `@flinkbot run azure` re-run the last Azure build
   </details>


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [flink] tzulitai commented on a change in pull request #11980: [FLINK-17499][state-processor-api] LazyTimerService used to register …

Posted by GitBox <gi...@apache.org>.
tzulitai commented on a change in pull request #11980:
URL: https://github.com/apache/flink/pull/11980#discussion_r419230440



##########
File path: flink-libraries/flink-state-processing-api/src/test/java/org/apache/flink/state/api/output/KeyedStateBootstrapOperatorTest.java
##########
@@ -43,11 +48,53 @@
  */
 public class KeyedStateBootstrapOperatorTest {
 
-	private static final ValueStateDescriptor<Long> descriptor = new ValueStateDescriptor<Long>("state", Types.LONG);
+	private static final ValueStateDescriptor<Long> descriptor = new ValueStateDescriptor<>("state", Types.LONG);
+
+	private static final Long EVENT_TIMER = Long.MAX_VALUE - 1;
+
+	private static final Long PROC_TIMER = Long.MAX_VALUE - 2;
 
 	@Rule
 	public TemporaryFolder folder = new TemporaryFolder();
 
+	@Test
+	public void testTimerStateRestorable() throws Exception {
+		Path path = new Path(folder.newFolder().toURI());
+
+		OperatorSubtaskState state;
+		KeyedStateBootstrapOperator<Long, Long> bootstrapOperator = new KeyedStateBootstrapOperator<>(0L, path, new TimerBootstrapFunction());
+		try (KeyedOneInputStreamOperatorTestHarness<Long, Long, TaggedOperatorSubtaskState> harness = getHarness(bootstrapOperator)) {
+			harness.open();
+
+			harness.processElement(1L, 0L);
+			harness.processElement(2L, 0L);
+			harness.processElement(3L, 0L);
+			bootstrapOperator.endInput();
+
+			state = harness.extractOutputValues().get(0).state;
+		}
+
+		KeyedProcessOperator<Long, Long, Tuple3<Long, Long, TimeDomain>> procOperator = new KeyedProcessOperator<>(new SimpleProcessFunction());
+		try (KeyedOneInputStreamOperatorTestHarness<Long, Long, Tuple3<Long, Long, TimeDomain>> harness = getHarness(procOperator)) {
+
+			harness.initializeState(state);
+			harness.open();
+
+			harness.processWatermark(EVENT_TIMER);
+			harness.setProcessingTime(PROC_TIMER);
+
+			Assert.assertThat(harness.extractOutputValues(), Matchers.containsInAnyOrder(
+				Tuple3.of(1L, EVENT_TIMER, TimeDomain.EVENT_TIME),
+				Tuple3.of(2L, EVENT_TIMER, TimeDomain.EVENT_TIME),
+				Tuple3.of(3L, EVENT_TIMER, TimeDomain.EVENT_TIME),
+				Tuple3.of(1L, PROC_TIMER, TimeDomain.PROCESSING_TIME),
+				Tuple3.of(2L, PROC_TIMER, TimeDomain.PROCESSING_TIME),
+				Tuple3.of(3L, PROC_TIMER, TimeDomain.PROCESSING_TIME)));
+
+			harness.snapshot(0L, 0L);

Review comment:
       Is this necessary for the test?

##########
File path: flink-libraries/flink-state-processing-api/src/test/java/org/apache/flink/state/api/output/KeyedStateBootstrapOperatorTest.java
##########
@@ -43,11 +48,53 @@
  */
 public class KeyedStateBootstrapOperatorTest {
 
-	private static final ValueStateDescriptor<Long> descriptor = new ValueStateDescriptor<Long>("state", Types.LONG);
+	private static final ValueStateDescriptor<Long> descriptor = new ValueStateDescriptor<>("state", Types.LONG);
+
+	private static final Long EVENT_TIMER = Long.MAX_VALUE - 1;
+
+	private static final Long PROC_TIMER = Long.MAX_VALUE - 2;
 
 	@Rule
 	public TemporaryFolder folder = new TemporaryFolder();
 
+	@Test
+	public void testTimerStateRestorable() throws Exception {
+		Path path = new Path(folder.newFolder().toURI());
+
+		OperatorSubtaskState state;
+		KeyedStateBootstrapOperator<Long, Long> bootstrapOperator = new KeyedStateBootstrapOperator<>(0L, path, new TimerBootstrapFunction());
+		try (KeyedOneInputStreamOperatorTestHarness<Long, Long, TaggedOperatorSubtaskState> harness = getHarness(bootstrapOperator)) {

Review comment:
       I know the other existing tests are doing this as well, but:
   
   for the sake of readability, could be nice to put this in a separate method, called say `processElements(Harness<IN>, IN... )`.

##########
File path: flink-libraries/flink-state-processing-api/src/test/java/org/apache/flink/state/api/output/KeyedStateBootstrapOperatorTest.java
##########
@@ -43,11 +48,53 @@
  */
 public class KeyedStateBootstrapOperatorTest {
 
-	private static final ValueStateDescriptor<Long> descriptor = new ValueStateDescriptor<Long>("state", Types.LONG);
+	private static final ValueStateDescriptor<Long> descriptor = new ValueStateDescriptor<>("state", Types.LONG);
+
+	private static final Long EVENT_TIMER = Long.MAX_VALUE - 1;
+
+	private static final Long PROC_TIMER = Long.MAX_VALUE - 2;
 
 	@Rule
 	public TemporaryFolder folder = new TemporaryFolder();
 
+	@Test
+	public void testTimerStateRestorable() throws Exception {
+		Path path = new Path(folder.newFolder().toURI());
+
+		OperatorSubtaskState state;
+		KeyedStateBootstrapOperator<Long, Long> bootstrapOperator = new KeyedStateBootstrapOperator<>(0L, path, new TimerBootstrapFunction());
+		try (KeyedOneInputStreamOperatorTestHarness<Long, Long, TaggedOperatorSubtaskState> harness = getHarness(bootstrapOperator)) {
+			harness.open();
+
+			harness.processElement(1L, 0L);
+			harness.processElement(2L, 0L);
+			harness.processElement(3L, 0L);
+			bootstrapOperator.endInput();
+
+			state = harness.extractOutputValues().get(0).state;
+		}
+
+		KeyedProcessOperator<Long, Long, Tuple3<Long, Long, TimeDomain>> procOperator = new KeyedProcessOperator<>(new SimpleProcessFunction());
+		try (KeyedOneInputStreamOperatorTestHarness<Long, Long, Tuple3<Long, Long, TimeDomain>> harness = getHarness(procOperator)) {

Review comment:
       Same here: could be nice to move this to a separate method, called say `assertHarnessOutputs(Harness<OUT>, OUT... )`




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [flink] sjwiesman commented on a change in pull request #11980: [FLINK-17499][state-processor-api] LazyTimerService used to register …

Posted by GitBox <gi...@apache.org>.
sjwiesman commented on a change in pull request #11980:
URL: https://github.com/apache/flink/pull/11980#discussion_r419393363



##########
File path: flink-libraries/flink-state-processing-api/src/test/java/org/apache/flink/state/api/output/KeyedStateBootstrapOperatorTest.java
##########
@@ -43,11 +48,53 @@
  */
 public class KeyedStateBootstrapOperatorTest {
 
-	private static final ValueStateDescriptor<Long> descriptor = new ValueStateDescriptor<Long>("state", Types.LONG);
+	private static final ValueStateDescriptor<Long> descriptor = new ValueStateDescriptor<>("state", Types.LONG);
+
+	private static final Long EVENT_TIMER = Long.MAX_VALUE - 1;
+
+	private static final Long PROC_TIMER = Long.MAX_VALUE - 2;
 
 	@Rule
 	public TemporaryFolder folder = new TemporaryFolder();
 
+	@Test
+	public void testTimerStateRestorable() throws Exception {
+		Path path = new Path(folder.newFolder().toURI());
+
+		OperatorSubtaskState state;
+		KeyedStateBootstrapOperator<Long, Long> bootstrapOperator = new KeyedStateBootstrapOperator<>(0L, path, new TimerBootstrapFunction());
+		try (KeyedOneInputStreamOperatorTestHarness<Long, Long, TaggedOperatorSubtaskState> harness = getHarness(bootstrapOperator)) {

Review comment:
       👍 

##########
File path: flink-libraries/flink-state-processing-api/src/test/java/org/apache/flink/state/api/output/KeyedStateBootstrapOperatorTest.java
##########
@@ -43,11 +48,53 @@
  */
 public class KeyedStateBootstrapOperatorTest {
 
-	private static final ValueStateDescriptor<Long> descriptor = new ValueStateDescriptor<Long>("state", Types.LONG);
+	private static final ValueStateDescriptor<Long> descriptor = new ValueStateDescriptor<>("state", Types.LONG);
+
+	private static final Long EVENT_TIMER = Long.MAX_VALUE - 1;
+
+	private static final Long PROC_TIMER = Long.MAX_VALUE - 2;
 
 	@Rule
 	public TemporaryFolder folder = new TemporaryFolder();
 
+	@Test
+	public void testTimerStateRestorable() throws Exception {
+		Path path = new Path(folder.newFolder().toURI());
+
+		OperatorSubtaskState state;
+		KeyedStateBootstrapOperator<Long, Long> bootstrapOperator = new KeyedStateBootstrapOperator<>(0L, path, new TimerBootstrapFunction());
+		try (KeyedOneInputStreamOperatorTestHarness<Long, Long, TaggedOperatorSubtaskState> harness = getHarness(bootstrapOperator)) {
+			harness.open();
+
+			harness.processElement(1L, 0L);
+			harness.processElement(2L, 0L);
+			harness.processElement(3L, 0L);
+			bootstrapOperator.endInput();
+
+			state = harness.extractOutputValues().get(0).state;
+		}
+
+		KeyedProcessOperator<Long, Long, Tuple3<Long, Long, TimeDomain>> procOperator = new KeyedProcessOperator<>(new SimpleProcessFunction());
+		try (KeyedOneInputStreamOperatorTestHarness<Long, Long, Tuple3<Long, Long, TimeDomain>> harness = getHarness(procOperator)) {

Review comment:
       👍 




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [flink] flinkbot edited a comment on pull request #11980: [FLINK-17499][state-processor-api] LazyTimerService used to register …

Posted by GitBox <gi...@apache.org>.
flinkbot edited a comment on pull request #11980:
URL: https://github.com/apache/flink/pull/11980#issuecomment-623160625


   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "67689c04b081510c3992d369a65735ec010aa468",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=545",
       "triggerID" : "67689c04b081510c3992d369a65735ec010aa468",
       "triggerType" : "PUSH"
     }, {
       "hash" : "8c01052c252c168099748fdb8c8438b9d963768b",
       "status" : "UNKNOWN",
       "url" : "TBD",
       "triggerID" : "8c01052c252c168099748fdb8c8438b9d963768b",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * 67689c04b081510c3992d369a65735ec010aa468 Azure: [PENDING](https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=545) 
   * 8c01052c252c168099748fdb8c8438b9d963768b UNKNOWN
   
   <details>
   <summary>Bot commands</summary>
     The @flinkbot bot supports the following commands:
   
    - `@flinkbot run travis` re-run the last Travis build
    - `@flinkbot run azure` re-run the last Azure build
   </details>


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org