[
https://issues.apache.org/jira/browse/FLINK-2423?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14653285#comment-14653285
]
ASF GitHub Bot commented on FLINK-2423:
---------------------------------------
Github user mbalassi commented on a diff in the pull request:
https://github.com/apache/flink/pull/980#discussion_r36168137
--- Diff:
flink-tests/src/test/java/org/apache/flink/test/checkpointing/StreamCheckpointNotifierITCase.java
---
@@ -0,0 +1,429 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.flink.test.checkpointing;
+
+import org.apache.flink.api.common.functions.FilterFunction;
+import org.apache.flink.api.common.functions.RichMapFunction;
+import org.apache.flink.api.common.functions.RichReduceFunction;
+import org.apache.flink.api.common.state.OperatorState;
+import org.apache.flink.configuration.ConfigConstants;
+import org.apache.flink.configuration.Configuration;
+import org.apache.flink.streaming.api.checkpoint.CheckpointNotifier;
+import org.apache.flink.streaming.api.checkpoint.Checkpointed;
+import org.apache.flink.streaming.api.datastream.DataStream;
+import
org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
+import org.apache.flink.streaming.api.functions.co.RichCoFlatMapFunction;
+import org.apache.flink.streaming.api.functions.sink.RichSinkFunction;
+import
org.apache.flink.streaming.api.functions.source.ParallelSourceFunction;
+import org.apache.flink.streaming.api.functions.source.RichSourceFunction;
+import org.apache.flink.test.util.ForkableFlinkMiniCluster;
+import org.apache.flink.util.Collector;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+/**
+ * Integration test for the {@link CheckpointNotifier} interface. The test
ensures that
+ * {@link CheckpointNotifier#notifyCheckpointComplete(long)} is called for
some completed
+ * checkpoints, that it is called at most once for any checkpoint id and
that it is not
+ * called for a deliberately failed checkpoint.
+ *
+ * <p>
+ * Note that as a result of doing the checks on the task level there is no
way to verify
+ * that the {@link CheckpointNotifier#notifyCheckpointComplete(long)} is
called for every
+ * successfully completed checkpoint.
+ */
+@SuppressWarnings("serial")
+public class StreamCheckpointNotifierITCase {
+
+ private static final int NUM_TASK_MANAGERS = 2;
+ private static final int NUM_TASK_SLOTS = 3;
+ private static final int PARALLELISM = NUM_TASK_MANAGERS *
NUM_TASK_SLOTS;
+
+ private static ForkableFlinkMiniCluster cluster;
+
+ @BeforeClass
+ public static void startCluster() {
+ try {
+ Configuration config = new Configuration();
+
config.setInteger(ConfigConstants.LOCAL_INSTANCE_MANAGER_NUMBER_TASK_MANAGER,
NUM_TASK_MANAGERS);
+
config.setInteger(ConfigConstants.TASK_MANAGER_NUM_TASK_SLOTS, NUM_TASK_SLOTS);
+
config.setString(ConfigConstants.DEFAULT_EXECUTION_RETRY_DELAY_KEY, "0 ms");
+
config.setInteger(ConfigConstants.TASK_MANAGER_MEMORY_SIZE_KEY, 12);
+
+ cluster = new ForkableFlinkMiniCluster(config, false);
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ fail("Failed to start test cluster: " + e.getMessage());
+ }
+ }
+
+ @AfterClass
+ public static void shutdownCluster() {
+ try {
+ cluster.shutdown();
+ cluster = null;
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ fail("Failed to stop test cluster: " + e.getMessage());
+ }
+ }
+
+
+
+ /**
+ * Runs the following program:
+ *
+ * <pre>
+ * [ (source)->(filter)->(map) ] -> [ (co-map) ] -> [ (map) ] -> [
(groupBy/reduce)->(sink) ]
+ * </pre>
+ */
+ @Test
+ public void runCheckpointedProgram() {
+
+ final long NUM_STRINGS = 10000000L;
+ assertTrue("Broken test setup", NUM_STRINGS % 40 == 0);
+
+ try {
+ StreamExecutionEnvironment env =
StreamExecutionEnvironment.createRemoteEnvironment(
+ "localhost",
cluster.getJobManagerRPCPort());
+ env.setParallelism(PARALLELISM);
+ env.enableCheckpointing(500);
+ env.getConfig().disableSysoutLogging();
+
+ DataStream<String> stream = env.addSource(new
StringGeneratingSourceFunction(NUM_STRINGS));
+
+ stream
+ // -------------- first vertex, chained
to the src ----------------
+ .filter(new StringRichFilterFunction())
+
+ // -------------- second vertex,
applying the co-map ----------------
+ .connect(stream).flatMap(new
LeftIdentityCoRichFlatMapFunction())
+
+ // -------------- third vertex - the
stateful one that also fails ----------------
+ .map(new
StringPrefixCountRichMapFunction())
+ .startNewChain()
+ .map(new IdentityMapFunction())
+
+ // --------------
fourth vertex - reducer and the sink ----------------
+ .groupBy("prefix")
+ .reduce(new
OnceFailingReducer(NUM_STRINGS))
+ .addSink(new
RichSinkFunction<PrefixCount>() {
+
--- End diff --
This sink is not needed any more.
> Properly test checkpoint notifications
> --------------------------------------
>
> Key: FLINK-2423
> URL: https://issues.apache.org/jira/browse/FLINK-2423
> Project: Flink
> Issue Type: Improvement
> Components: Streaming
> Reporter: Gyula Fora
> Assignee: Márton Balassi
>
> Checkpoint notifications (via the CheckpointNotifier interface) are currently
> not properly tested.
> A test should be included to verify that checkpoint notifications are
> eventually called on successful checkpoints, and that they are only called
> once per checkpointID.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)