Java Code Examples for org.apache.flink.streaming.util.AbstractStreamOperatorTestHarness#repackageState()
The following examples show how to use
org.apache.flink.streaming.util.AbstractStreamOperatorTestHarness#repackageState() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: BucketingSinkTest.java From flink with Apache License 2.0 | 4 votes |
@Test public void testScalingDown() throws Exception { final File outDir = tempFolder.newFolder(); OneInputStreamOperatorTestHarness<String, Object> testHarness1 = createRescalingTestSink(outDir, 3, 0, 100); testHarness1.setup(); testHarness1.open(); OneInputStreamOperatorTestHarness<String, Object> testHarness2 = createRescalingTestSink(outDir, 3, 1, 100); testHarness2.setup(); testHarness2.open(); OneInputStreamOperatorTestHarness<String, Object> testHarness3 = createRescalingTestSink(outDir, 3, 2, 100); testHarness3.setup(); testHarness3.open(); testHarness1.processElement(new StreamRecord<>("test1", 0L)); checkLocalFs(outDir, 1, 0, 0, 0); testHarness2.processElement(new StreamRecord<>("test2", 0L)); checkLocalFs(outDir, 2, 0, 0, 0); testHarness3.processElement(new StreamRecord<>("test3", 0L)); testHarness3.processElement(new StreamRecord<>("test4", 0L)); checkLocalFs(outDir, 4, 0, 0, 0); // intentionally we snapshot them in the reverse order so that the states are shuffled OperatorSubtaskState mergedSnapshot = AbstractStreamOperatorTestHarness.repackageState( testHarness3.snapshot(0, 0), testHarness1.snapshot(0, 0), testHarness2.snapshot(0, 0) ); OperatorSubtaskState initState1 = AbstractStreamOperatorTestHarness.repartitionOperatorState( mergedSnapshot, maxParallelism, 3, 2, 0); testHarness1 = createRescalingTestSink(outDir, 2, 0, 100); testHarness1.setup(); testHarness1.initializeState(initState1); testHarness1.open(); checkLocalFs(outDir, 1, 0, 3, 3); OperatorSubtaskState initState2 = AbstractStreamOperatorTestHarness.repartitionOperatorState( mergedSnapshot, maxParallelism, 3, 2, 1); testHarness2 = createRescalingTestSink(outDir, 2, 1, 100); testHarness2.setup(); testHarness2.initializeState(initState2); testHarness2.open(); checkLocalFs(outDir, 0, 0, 4, 4); }
Example 2
Source File: WriteAheadSinkTestBase.java From flink with Apache License 2.0 | 4 votes |
@Test public void testScalingDown() throws Exception { S sink1 = createSink(); OneInputStreamOperatorTestHarness<IN, IN> testHarness1 = new OneInputStreamOperatorTestHarness<>(sink1, maxParallelism, 2, 0); testHarness1.open(); S sink2 = createSink(); OneInputStreamOperatorTestHarness<IN, IN> testHarness2 = new OneInputStreamOperatorTestHarness<>(sink2, maxParallelism, 2, 1); testHarness2.open(); int elementCounter = 1; int snapshotCount = 0; for (int x = 0; x < 10; x++) { testHarness1.processElement(new StreamRecord<>(generateValue(elementCounter, 0))); elementCounter++; } for (int x = 0; x < 11; x++) { testHarness2.processElement(new StreamRecord<>(generateValue(elementCounter, 0))); elementCounter++; } // snapshot at checkpoint 0 for testHarness1 and testHarness 2 OperatorSubtaskState snapshot1 = testHarness1.snapshot(snapshotCount, 0); OperatorSubtaskState snapshot2 = testHarness2.snapshot(snapshotCount, 0); // merge the two partial states OperatorSubtaskState mergedSnapshot = AbstractStreamOperatorTestHarness .repackageState(snapshot1, snapshot2); testHarness1.close(); testHarness2.close(); // and create a third instance that operates alone but // has the merged state of the previous 2 instances OperatorSubtaskState initState = AbstractStreamOperatorTestHarness.repartitionOperatorState( mergedSnapshot, maxParallelism, 2, 1, 0); S sink3 = createSink(); OneInputStreamOperatorTestHarness<IN, IN> mergedTestHarness = new OneInputStreamOperatorTestHarness<>(sink3, maxParallelism, 1, 0); mergedTestHarness.setup(); mergedTestHarness.initializeState(initState); mergedTestHarness.open(); for (int x = 0; x < 12; x++) { mergedTestHarness.processElement(new StreamRecord<>(generateValue(elementCounter, 0))); elementCounter++; } snapshotCount++; mergedTestHarness.snapshot(snapshotCount, 1); mergedTestHarness.notifyOfCompletedCheckpoint(snapshotCount); verifyResultsWhenReScaling(sink3, 1, 33); mergedTestHarness.close(); }
Example 3
Source File: AbstractStreamOperatorTest.java From flink with Apache License 2.0 | 4 votes |
@Test public void testStateAndTimerStateShufflingScalingDown() throws Exception { final int maxParallelism = 10; // first get two keys that will fall into different key-group ranges that go // to different operator subtasks when we restore // get two sub key-ranges so that we can restore two ranges separately KeyGroupRange subKeyGroupRange1 = new KeyGroupRange(0, (maxParallelism / 2) - 1); KeyGroupRange subKeyGroupRange2 = new KeyGroupRange(subKeyGroupRange1.getEndKeyGroup() + 1, maxParallelism - 1); // get two different keys, one per sub range int key1 = getKeyInKeyGroupRange(subKeyGroupRange1, maxParallelism); int key2 = getKeyInKeyGroupRange(subKeyGroupRange2, maxParallelism); OperatorSubtaskState snapshot1, snapshot2; // register some state with both instances and scale down to parallelism 1 try (KeyedOneInputStreamOperatorTestHarness<Integer, Tuple2<Integer, String>, String> testHarness1 = createTestHarness(maxParallelism, 2, 0)) { testHarness1.setup(); testHarness1.open(); testHarness1.processWatermark(0L); testHarness1.setProcessingTime(0L); testHarness1.processElement(new Tuple2<>(key1, "SET_EVENT_TIME_TIMER:30"), 0); testHarness1.processElement(new Tuple2<>(key1, "SET_PROC_TIME_TIMER:30"), 0); testHarness1.processElement(new Tuple2<>(key1, "SET_STATE:HELLO"), 0); snapshot1 = testHarness1.snapshot(0, 0); } try (KeyedOneInputStreamOperatorTestHarness<Integer, Tuple2<Integer, String>, String> testHarness2 = createTestHarness(maxParallelism, 2, 1)) { testHarness2.setup(); testHarness2.open(); testHarness2.processWatermark(0L); testHarness2.setProcessingTime(0L); testHarness2.processElement(new Tuple2<>(key2, "SET_EVENT_TIME_TIMER:40"), 0); testHarness2.processElement(new Tuple2<>(key2, "SET_PROC_TIME_TIMER:40"), 0); testHarness2.processElement(new Tuple2<>(key2, "SET_STATE:CIAO"), 0); snapshot2 = testHarness2.snapshot(0, 0); } // take a snapshot from each one of the "parallel" instances of the operator // and combine them into one so that we can scale down OperatorSubtaskState repackagedState = AbstractStreamOperatorTestHarness.repackageState(snapshot1, snapshot2); OperatorSubtaskState initSubTaskState = AbstractStreamOperatorTestHarness.repartitionOperatorState(repackagedState, maxParallelism, 2, 1, 0); try (KeyedOneInputStreamOperatorTestHarness<Integer, Tuple2<Integer, String>, String> testHarness3 = createTestHarness(maxParallelism, 1, 0)) { testHarness3.setup(); testHarness3.initializeState(initSubTaskState); testHarness3.open(); testHarness3.processWatermark(30L); assertThat(extractResult(testHarness3), contains("ON_EVENT_TIME:HELLO")); assertTrue(extractResult(testHarness3).isEmpty()); testHarness3.processWatermark(40L); assertThat(extractResult(testHarness3), contains("ON_EVENT_TIME:CIAO")); assertTrue(extractResult(testHarness3).isEmpty()); testHarness3.setProcessingTime(30L); assertThat(extractResult(testHarness3), contains("ON_PROC_TIME:HELLO")); assertTrue(extractResult(testHarness3).isEmpty()); testHarness3.setProcessingTime(40L); assertThat(extractResult(testHarness3), contains("ON_PROC_TIME:CIAO")); assertTrue(extractResult(testHarness3).isEmpty()); } }
Example 4
Source File: BucketingSinkTest.java From flink with Apache License 2.0 | 4 votes |
@Test public void testScalingUp() throws Exception { final File outDir = tempFolder.newFolder(); OneInputStreamOperatorTestHarness<String, Object> testHarness1 = createRescalingTestSink(outDir, 2, 0, 100); testHarness1.setup(); testHarness1.open(); OneInputStreamOperatorTestHarness<String, Object> testHarness2 = createRescalingTestSink(outDir, 2, 0, 100); testHarness2.setup(); testHarness2.open(); testHarness1.processElement(new StreamRecord<>("test1", 1L)); testHarness1.processElement(new StreamRecord<>("test2", 1L)); checkLocalFs(outDir, 2, 0, 0, 0); testHarness2.processElement(new StreamRecord<>("test3", 1L)); testHarness2.processElement(new StreamRecord<>("test4", 1L)); testHarness2.processElement(new StreamRecord<>("test5", 1L)); checkLocalFs(outDir, 5, 0, 0, 0); // intentionally we snapshot them in the reverse order so that the states are shuffled OperatorSubtaskState mergedSnapshot = AbstractStreamOperatorTestHarness.repackageState( testHarness2.snapshot(0, 0), testHarness1.snapshot(0, 0) ); OperatorSubtaskState initState1 = AbstractStreamOperatorTestHarness.repartitionOperatorState( mergedSnapshot, maxParallelism, 2, 3, 0); testHarness1 = createRescalingTestSink(outDir, 3, 0, 100); testHarness1.setup(); testHarness1.initializeState(initState1); testHarness1.open(); checkLocalFs(outDir, 2, 0, 3, 3); OperatorSubtaskState initState2 = AbstractStreamOperatorTestHarness.repartitionOperatorState( mergedSnapshot, maxParallelism, 2, 3, 1); testHarness2 = createRescalingTestSink(outDir, 3, 1, 100); testHarness2.setup(); testHarness2.initializeState(initState2); testHarness2.open(); checkLocalFs(outDir, 0, 0, 5, 5); OperatorSubtaskState initState3 = AbstractStreamOperatorTestHarness.repartitionOperatorState( mergedSnapshot, maxParallelism, 2, 3, 2); OneInputStreamOperatorTestHarness<String, Object> testHarness3 = createRescalingTestSink(outDir, 3, 2, 100); testHarness3.setup(); testHarness3.initializeState(initState3); testHarness3.open(); checkLocalFs(outDir, 0, 0, 5, 5); testHarness1.processElement(new StreamRecord<>("test6", 0)); testHarness2.processElement(new StreamRecord<>("test6", 0)); testHarness3.processElement(new StreamRecord<>("test6", 0)); checkLocalFs(outDir, 3, 0, 5, 5); testHarness1.snapshot(1, 0); testHarness2.snapshot(1, 0); testHarness3.snapshot(1, 0); testHarness1.close(); testHarness2.close(); testHarness3.close(); checkLocalFs(outDir, 0, 3, 5, 5); }
Example 5
Source File: BucketingSinkTest.java From flink with Apache License 2.0 | 4 votes |
@Test public void testScalingDown() throws Exception { final File outDir = tempFolder.newFolder(); OneInputStreamOperatorTestHarness<String, Object> testHarness1 = createRescalingTestSink(outDir, 3, 0, 100); testHarness1.setup(); testHarness1.open(); OneInputStreamOperatorTestHarness<String, Object> testHarness2 = createRescalingTestSink(outDir, 3, 1, 100); testHarness2.setup(); testHarness2.open(); OneInputStreamOperatorTestHarness<String, Object> testHarness3 = createRescalingTestSink(outDir, 3, 2, 100); testHarness3.setup(); testHarness3.open(); testHarness1.processElement(new StreamRecord<>("test1", 0L)); checkLocalFs(outDir, 1, 0, 0, 0); testHarness2.processElement(new StreamRecord<>("test2", 0L)); checkLocalFs(outDir, 2, 0, 0, 0); testHarness3.processElement(new StreamRecord<>("test3", 0L)); testHarness3.processElement(new StreamRecord<>("test4", 0L)); checkLocalFs(outDir, 4, 0, 0, 0); // intentionally we snapshot them in the reverse order so that the states are shuffled OperatorSubtaskState mergedSnapshot = AbstractStreamOperatorTestHarness.repackageState( testHarness3.snapshot(0, 0), testHarness1.snapshot(0, 0), testHarness2.snapshot(0, 0) ); OperatorSubtaskState initState1 = AbstractStreamOperatorTestHarness.repartitionOperatorState( mergedSnapshot, maxParallelism, 3, 2, 0); testHarness1 = createRescalingTestSink(outDir, 2, 0, 100); testHarness1.setup(); testHarness1.initializeState(initState1); testHarness1.open(); checkLocalFs(outDir, 1, 0, 3, 3); OperatorSubtaskState initState2 = AbstractStreamOperatorTestHarness.repartitionOperatorState( mergedSnapshot, maxParallelism, 3, 2, 1); testHarness2 = createRescalingTestSink(outDir, 2, 1, 100); testHarness2.setup(); testHarness2.initializeState(initState2); testHarness2.open(); checkLocalFs(outDir, 0, 0, 4, 4); }
Example 6
Source File: BucketingSinkTest.java From flink with Apache License 2.0 | 4 votes |
@Test public void testSameParallelismWithShufflingStates() throws Exception { final File outDir = tempFolder.newFolder(); OneInputStreamOperatorTestHarness<String, Object> testHarness1 = createRescalingTestSink(outDir, 2, 0, 100); testHarness1.setup(); testHarness1.open(); OneInputStreamOperatorTestHarness<String, Object> testHarness2 = createRescalingTestSink(outDir, 2, 1, 100); testHarness2.setup(); testHarness2.open(); testHarness1.processElement(new StreamRecord<>("test1", 0L)); checkLocalFs(outDir, 1, 0, 0, 0); testHarness2.processElement(new StreamRecord<>("test2", 0L)); checkLocalFs(outDir, 2, 0, 0, 0); // intentionally we snapshot them in the reverse order so that the states are shuffled OperatorSubtaskState mergedSnapshot = AbstractStreamOperatorTestHarness.repackageState( testHarness2.snapshot(0, 0), testHarness1.snapshot(0, 0) ); checkLocalFs(outDir, 2, 0, 0, 0); // this will not be included in any checkpoint so it can be cleaned up (although we do not) testHarness2.processElement(new StreamRecord<>("test3", 0L)); checkLocalFs(outDir, 3, 0, 0, 0); OperatorSubtaskState initState1 = AbstractStreamOperatorTestHarness.repartitionOperatorState( mergedSnapshot, maxParallelism, 2, 2, 0); testHarness1 = createRescalingTestSink(outDir, 2, 0, 100); testHarness1.setup(); testHarness1.initializeState(initState1); testHarness1.open(); // the one in-progress will be the one assigned to the next instance, // the other is the test3 which is just not cleaned up checkLocalFs(outDir, 2, 0, 1, 1); OperatorSubtaskState initState2 = AbstractStreamOperatorTestHarness.repartitionOperatorState( mergedSnapshot, maxParallelism, 2, 2, 1); testHarness2 = createRescalingTestSink(outDir, 2, 1, 100); testHarness2.setup(); testHarness2.initializeState(initState2); testHarness2.open(); checkLocalFs(outDir, 1, 0, 2, 2); testHarness1.close(); testHarness2.close(); // the 1 in-progress can be discarded. checkLocalFs(outDir, 1, 0, 2, 2); }
Example 7
Source File: WriteAheadSinkTestBase.java From flink with Apache License 2.0 | 4 votes |
@Test public void testScalingDown() throws Exception { S sink1 = createSink(); OneInputStreamOperatorTestHarness<IN, IN> testHarness1 = new OneInputStreamOperatorTestHarness<>(sink1, maxParallelism, 2, 0); testHarness1.open(); S sink2 = createSink(); OneInputStreamOperatorTestHarness<IN, IN> testHarness2 = new OneInputStreamOperatorTestHarness<>(sink2, maxParallelism, 2, 1); testHarness2.open(); int elementCounter = 1; int snapshotCount = 0; for (int x = 0; x < 10; x++) { testHarness1.processElement(new StreamRecord<>(generateValue(elementCounter, 0))); elementCounter++; } for (int x = 0; x < 11; x++) { testHarness2.processElement(new StreamRecord<>(generateValue(elementCounter, 0))); elementCounter++; } // snapshot at checkpoint 0 for testHarness1 and testHarness 2 OperatorSubtaskState snapshot1 = testHarness1.snapshot(snapshotCount, 0); OperatorSubtaskState snapshot2 = testHarness2.snapshot(snapshotCount, 0); // merge the two partial states OperatorSubtaskState mergedSnapshot = AbstractStreamOperatorTestHarness .repackageState(snapshot1, snapshot2); testHarness1.close(); testHarness2.close(); // and create a third instance that operates alone but // has the merged state of the previous 2 instances OperatorSubtaskState initState = AbstractStreamOperatorTestHarness.repartitionOperatorState( mergedSnapshot, maxParallelism, 2, 1, 0); S sink3 = createSink(); OneInputStreamOperatorTestHarness<IN, IN> mergedTestHarness = new OneInputStreamOperatorTestHarness<>(sink3, maxParallelism, 1, 0); mergedTestHarness.setup(); mergedTestHarness.initializeState(initState); mergedTestHarness.open(); for (int x = 0; x < 12; x++) { mergedTestHarness.processElement(new StreamRecord<>(generateValue(elementCounter, 0))); elementCounter++; } snapshotCount++; mergedTestHarness.snapshot(snapshotCount, 1); mergedTestHarness.notifyOfCompletedCheckpoint(snapshotCount); verifyResultsWhenReScaling(sink3, 1, 33); mergedTestHarness.close(); }
Example 8
Source File: ContinuousFileProcessingRescalingTest.java From flink with Apache License 2.0 | 4 votes |
@Test public void testReaderScalingDown() throws Exception { // simulates the scenario of scaling down from 2 to 1 instances final OneShotLatch waitingLatch = new OneShotLatch(); // create the first instance and let it process the first split till element 5 final OneShotLatch triggerLatch1 = new OneShotLatch(); BlockingFileInputFormat format1 = new BlockingFileInputFormat( triggerLatch1, waitingLatch, new Path("test"), 20, 5); FileInputSplit[] splits = format1.createInputSplits(2); OneInputStreamOperatorTestHarness<TimestampedFileInputSplit, String> testHarness1 = getTestHarness(format1, 2, 0); testHarness1.open(); testHarness1.processElement(new StreamRecord<>(getTimestampedSplit(0, splits[0]))); // wait until its arrives to element 5 if (!triggerLatch1.isTriggered()) { triggerLatch1.await(); } // create the second instance and let it process the second split till element 15 final OneShotLatch triggerLatch2 = new OneShotLatch(); BlockingFileInputFormat format2 = new BlockingFileInputFormat( triggerLatch2, waitingLatch, new Path("test"), 20, 15); OneInputStreamOperatorTestHarness<TimestampedFileInputSplit, String> testHarness2 = getTestHarness(format2, 2, 1); testHarness2.open(); testHarness2.processElement(new StreamRecord<>(getTimestampedSplit(0, splits[1]))); // wait until its arrives to element 15 if (!triggerLatch2.isTriggered()) { triggerLatch2.await(); } // 1) clear the outputs of the two previous instances so that // we can compare their newly produced outputs with the merged one testHarness1.getOutput().clear(); testHarness2.getOutput().clear(); // 2) take the snapshots from the previous instances and merge them // into a new one which will be then used to initialize a third instance OperatorSubtaskState mergedState = AbstractStreamOperatorTestHarness. repackageState( testHarness2.snapshot(0, 0), testHarness1.snapshot(0, 0) ); // 3) and repartition to get the initialized state when scaling down. OperatorSubtaskState initState = AbstractStreamOperatorTestHarness.repartitionOperatorState(mergedState, maxParallelism, 2, 1, 0); // create the third instance final OneShotLatch wLatch = new OneShotLatch(); final OneShotLatch tLatch = new OneShotLatch(); BlockingFileInputFormat format = new BlockingFileInputFormat(wLatch, tLatch, new Path("test"), 20, 5); OneInputStreamOperatorTestHarness<TimestampedFileInputSplit, String> testHarness = getTestHarness(format, 1, 0); // initialize the state of the new operator with the constructed by // combining the partial states of the instances above. testHarness.initializeState(initState); testHarness.open(); // now restart the waiting operators wLatch.trigger(); tLatch.trigger(); waitingLatch.trigger(); // and wait for the processing to finish synchronized (testHarness1.getCheckpointLock()) { testHarness1.close(); } synchronized (testHarness2.getCheckpointLock()) { testHarness2.close(); } synchronized (testHarness.getCheckpointLock()) { testHarness.close(); } Queue<Object> expectedResult = new ArrayDeque<>(); putElementsInQ(expectedResult, testHarness1.getOutput()); putElementsInQ(expectedResult, testHarness2.getOutput()); Queue<Object> actualResult = new ArrayDeque<>(); putElementsInQ(actualResult, testHarness.getOutput()); Assert.assertEquals(20, actualResult.size()); Assert.assertArrayEquals(expectedResult.toArray(), actualResult.toArray()); }
Example 9
Source File: BucketingSinkTest.java From flink with Apache License 2.0 | 4 votes |
@Test public void testScalingUp() throws Exception { final File outDir = tempFolder.newFolder(); OneInputStreamOperatorTestHarness<String, Object> testHarness1 = createRescalingTestSink(outDir, 2, 0, 100); testHarness1.setup(); testHarness1.open(); OneInputStreamOperatorTestHarness<String, Object> testHarness2 = createRescalingTestSink(outDir, 2, 0, 100); testHarness2.setup(); testHarness2.open(); testHarness1.processElement(new StreamRecord<>("test1", 1L)); testHarness1.processElement(new StreamRecord<>("test2", 1L)); checkLocalFs(outDir, 2, 0, 0, 0); testHarness2.processElement(new StreamRecord<>("test3", 1L)); testHarness2.processElement(new StreamRecord<>("test4", 1L)); testHarness2.processElement(new StreamRecord<>("test5", 1L)); checkLocalFs(outDir, 5, 0, 0, 0); // intentionally we snapshot them in the reverse order so that the states are shuffled OperatorSubtaskState mergedSnapshot = AbstractStreamOperatorTestHarness.repackageState( testHarness2.snapshot(0, 0), testHarness1.snapshot(0, 0) ); OperatorSubtaskState initState1 = AbstractStreamOperatorTestHarness.repartitionOperatorState( mergedSnapshot, maxParallelism, 2, 3, 0); testHarness1 = createRescalingTestSink(outDir, 3, 0, 100); testHarness1.setup(); testHarness1.initializeState(initState1); testHarness1.open(); checkLocalFs(outDir, 2, 0, 3, 3); OperatorSubtaskState initState2 = AbstractStreamOperatorTestHarness.repartitionOperatorState( mergedSnapshot, maxParallelism, 2, 3, 1); testHarness2 = createRescalingTestSink(outDir, 3, 1, 100); testHarness2.setup(); testHarness2.initializeState(initState2); testHarness2.open(); checkLocalFs(outDir, 0, 0, 5, 5); OperatorSubtaskState initState3 = AbstractStreamOperatorTestHarness.repartitionOperatorState( mergedSnapshot, maxParallelism, 2, 3, 2); OneInputStreamOperatorTestHarness<String, Object> testHarness3 = createRescalingTestSink(outDir, 3, 2, 100); testHarness3.setup(); testHarness3.initializeState(initState3); testHarness3.open(); checkLocalFs(outDir, 0, 0, 5, 5); testHarness1.processElement(new StreamRecord<>("test6", 0)); testHarness2.processElement(new StreamRecord<>("test6", 0)); testHarness3.processElement(new StreamRecord<>("test6", 0)); checkLocalFs(outDir, 3, 0, 5, 5); testHarness1.snapshot(1, 0); testHarness2.snapshot(1, 0); testHarness3.snapshot(1, 0); testHarness1.close(); testHarness2.close(); testHarness3.close(); checkLocalFs(outDir, 0, 3, 5, 5); }
Example 10
Source File: RollingSinkITCase.java From Flink-CEPplus with Apache License 2.0 | 4 votes |
@Test public void testScalingDown() throws Exception { final File outDir = tempFolder.newFolder(); OneInputStreamOperatorTestHarness<String, Object> testHarness1 = createRescalingTestSink(outDir, 3, 0); testHarness1.setup(); testHarness1.open(); OneInputStreamOperatorTestHarness<String, Object> testHarness2 = createRescalingTestSink(outDir, 3, 1); testHarness2.setup(); testHarness2.open(); OneInputStreamOperatorTestHarness<String, Object> testHarness3 = createRescalingTestSink(outDir, 3, 2); testHarness3.setup(); testHarness3.open(); testHarness1.processElement(new StreamRecord<>("test1", 0L)); checkLocalFs(outDir, 1, 0, 0, 0); testHarness2.processElement(new StreamRecord<>("test2", 0L)); testHarness2.processElement(new StreamRecord<>("test3", 0L)); testHarness2.processElement(new StreamRecord<>("test4", 0L)); testHarness2.processElement(new StreamRecord<>("test5", 0L)); testHarness2.processElement(new StreamRecord<>("test6", 0L)); checkLocalFs(outDir, 2, 4, 0, 0); testHarness3.processElement(new StreamRecord<>("test7", 0L)); testHarness3.processElement(new StreamRecord<>("test8", 0L)); checkLocalFs(outDir, 3, 5, 0, 0); // intentionally we snapshot them in a not ascending order so that the states are shuffled OperatorSubtaskState mergedSnapshot = AbstractStreamOperatorTestHarness.repackageState( testHarness3.snapshot(0, 0), testHarness1.snapshot(0, 0), testHarness2.snapshot(0, 0) ); // with the above state reshuffling, we expect testHarness4 to take the // state of the previous testHarness3 and testHarness1 while testHarness5 // will take that of the previous testHarness1 OperatorSubtaskState initState1 = AbstractStreamOperatorTestHarness.repartitionOperatorState( mergedSnapshot, maxParallelism, 3, 2, 0); OperatorSubtaskState initState2 = AbstractStreamOperatorTestHarness.repartitionOperatorState( mergedSnapshot, maxParallelism, 3, 2, 1); OneInputStreamOperatorTestHarness<String, Object> testHarness4 = createRescalingTestSink(outDir, 2, 0); testHarness4.setup(); testHarness4.initializeState(initState1); testHarness4.open(); // we do not have a length file for part-2-0 because bucket part-2-0 // was not "in-progress", but "pending" (its full content is valid). checkLocalFs(outDir, 1, 4, 3, 2); OneInputStreamOperatorTestHarness<String, Object> testHarness5 = createRescalingTestSink(outDir, 2, 1); testHarness5.setup(); testHarness5.initializeState(initState2); testHarness5.open(); checkLocalFs(outDir, 0, 0, 8, 3); }
Example 11
Source File: BucketingSinkTest.java From flink with Apache License 2.0 | 4 votes |
@Test public void testSameParallelismWithShufflingStates() throws Exception { final File outDir = tempFolder.newFolder(); OneInputStreamOperatorTestHarness<String, Object> testHarness1 = createRescalingTestSink(outDir, 2, 0, 100); testHarness1.setup(); testHarness1.open(); OneInputStreamOperatorTestHarness<String, Object> testHarness2 = createRescalingTestSink(outDir, 2, 1, 100); testHarness2.setup(); testHarness2.open(); testHarness1.processElement(new StreamRecord<>("test1", 0L)); checkLocalFs(outDir, 1, 0, 0, 0); testHarness2.processElement(new StreamRecord<>("test2", 0L)); checkLocalFs(outDir, 2, 0, 0, 0); // intentionally we snapshot them in the reverse order so that the states are shuffled OperatorSubtaskState mergedSnapshot = AbstractStreamOperatorTestHarness.repackageState( testHarness2.snapshot(0, 0), testHarness1.snapshot(0, 0) ); checkLocalFs(outDir, 2, 0, 0, 0); // this will not be included in any checkpoint so it can be cleaned up (although we do not) testHarness2.processElement(new StreamRecord<>("test3", 0L)); checkLocalFs(outDir, 3, 0, 0, 0); OperatorSubtaskState initState1 = AbstractStreamOperatorTestHarness.repartitionOperatorState( mergedSnapshot, maxParallelism, 2, 2, 0); testHarness1 = createRescalingTestSink(outDir, 2, 0, 100); testHarness1.setup(); testHarness1.initializeState(initState1); testHarness1.open(); // the one in-progress will be the one assigned to the next instance, // the other is the test3 which is just not cleaned up checkLocalFs(outDir, 2, 0, 1, 1); OperatorSubtaskState initState2 = AbstractStreamOperatorTestHarness.repartitionOperatorState( mergedSnapshot, maxParallelism, 2, 2, 1); testHarness2 = createRescalingTestSink(outDir, 2, 1, 100); testHarness2.setup(); testHarness2.initializeState(initState2); testHarness2.open(); checkLocalFs(outDir, 1, 0, 2, 2); testHarness1.close(); testHarness2.close(); // the 1 in-progress can be discarded. checkLocalFs(outDir, 1, 0, 2, 2); }
Example 12
Source File: WriteAheadSinkTestBase.java From Flink-CEPplus with Apache License 2.0 | 4 votes |
@Test public void testScalingDown() throws Exception { S sink1 = createSink(); OneInputStreamOperatorTestHarness<IN, IN> testHarness1 = new OneInputStreamOperatorTestHarness<>(sink1, maxParallelism, 2, 0); testHarness1.open(); S sink2 = createSink(); OneInputStreamOperatorTestHarness<IN, IN> testHarness2 = new OneInputStreamOperatorTestHarness<>(sink2, maxParallelism, 2, 1); testHarness2.open(); int elementCounter = 1; int snapshotCount = 0; for (int x = 0; x < 10; x++) { testHarness1.processElement(new StreamRecord<>(generateValue(elementCounter, 0))); elementCounter++; } for (int x = 0; x < 11; x++) { testHarness2.processElement(new StreamRecord<>(generateValue(elementCounter, 0))); elementCounter++; } // snapshot at checkpoint 0 for testHarness1 and testHarness 2 OperatorSubtaskState snapshot1 = testHarness1.snapshot(snapshotCount, 0); OperatorSubtaskState snapshot2 = testHarness2.snapshot(snapshotCount, 0); // merge the two partial states OperatorSubtaskState mergedSnapshot = AbstractStreamOperatorTestHarness .repackageState(snapshot1, snapshot2); testHarness1.close(); testHarness2.close(); // and create a third instance that operates alone but // has the merged state of the previous 2 instances OperatorSubtaskState initState = AbstractStreamOperatorTestHarness.repartitionOperatorState( mergedSnapshot, maxParallelism, 2, 1, 0); S sink3 = createSink(); OneInputStreamOperatorTestHarness<IN, IN> mergedTestHarness = new OneInputStreamOperatorTestHarness<>(sink3, maxParallelism, 1, 0); mergedTestHarness.setup(); mergedTestHarness.initializeState(initState); mergedTestHarness.open(); for (int x = 0; x < 12; x++) { mergedTestHarness.processElement(new StreamRecord<>(generateValue(elementCounter, 0))); elementCounter++; } snapshotCount++; mergedTestHarness.snapshot(snapshotCount, 1); mergedTestHarness.notifyOfCompletedCheckpoint(snapshotCount); verifyResultsWhenReScaling(sink3, 1, 33); mergedTestHarness.close(); }
Example 13
Source File: ContinuousFileProcessingRescalingTest.java From Flink-CEPplus with Apache License 2.0 | 4 votes |
@Test public void testReaderScalingDown() throws Exception { // simulates the scenario of scaling down from 2 to 1 instances final OneShotLatch waitingLatch = new OneShotLatch(); // create the first instance and let it process the first split till element 5 final OneShotLatch triggerLatch1 = new OneShotLatch(); BlockingFileInputFormat format1 = new BlockingFileInputFormat( triggerLatch1, waitingLatch, new Path("test"), 20, 5); FileInputSplit[] splits = format1.createInputSplits(2); OneInputStreamOperatorTestHarness<TimestampedFileInputSplit, String> testHarness1 = getTestHarness(format1, 2, 0); testHarness1.open(); testHarness1.processElement(new StreamRecord<>(getTimestampedSplit(0, splits[0]))); // wait until its arrives to element 5 if (!triggerLatch1.isTriggered()) { triggerLatch1.await(); } // create the second instance and let it process the second split till element 15 final OneShotLatch triggerLatch2 = new OneShotLatch(); BlockingFileInputFormat format2 = new BlockingFileInputFormat( triggerLatch2, waitingLatch, new Path("test"), 20, 15); OneInputStreamOperatorTestHarness<TimestampedFileInputSplit, String> testHarness2 = getTestHarness(format2, 2, 1); testHarness2.open(); testHarness2.processElement(new StreamRecord<>(getTimestampedSplit(0, splits[1]))); // wait until its arrives to element 15 if (!triggerLatch2.isTriggered()) { triggerLatch2.await(); } // 1) clear the outputs of the two previous instances so that // we can compare their newly produced outputs with the merged one testHarness1.getOutput().clear(); testHarness2.getOutput().clear(); // 2) take the snapshots from the previous instances and merge them // into a new one which will be then used to initialize a third instance OperatorSubtaskState mergedState = AbstractStreamOperatorTestHarness. repackageState( testHarness2.snapshot(0, 0), testHarness1.snapshot(0, 0) ); // 3) and repartition to get the initialized state when scaling down. OperatorSubtaskState initState = AbstractStreamOperatorTestHarness.repartitionOperatorState(mergedState, maxParallelism, 2, 1, 0); // create the third instance final OneShotLatch wLatch = new OneShotLatch(); final OneShotLatch tLatch = new OneShotLatch(); BlockingFileInputFormat format = new BlockingFileInputFormat(wLatch, tLatch, new Path("test"), 20, 5); OneInputStreamOperatorTestHarness<TimestampedFileInputSplit, String> testHarness = getTestHarness(format, 1, 0); // initialize the state of the new operator with the constructed by // combining the partial states of the instances above. testHarness.initializeState(initState); testHarness.open(); // now restart the waiting operators wLatch.trigger(); tLatch.trigger(); waitingLatch.trigger(); // and wait for the processing to finish synchronized (testHarness1.getCheckpointLock()) { testHarness1.close(); } synchronized (testHarness2.getCheckpointLock()) { testHarness2.close(); } synchronized (testHarness.getCheckpointLock()) { testHarness.close(); } Queue<Object> expectedResult = new ArrayDeque<>(); putElementsInQ(expectedResult, testHarness1.getOutput()); putElementsInQ(expectedResult, testHarness2.getOutput()); Queue<Object> actualResult = new ArrayDeque<>(); putElementsInQ(actualResult, testHarness.getOutput()); Assert.assertEquals(20, actualResult.size()); Assert.assertArrayEquals(expectedResult.toArray(), actualResult.toArray()); }
Example 14
Source File: BucketingSinkTest.java From Flink-CEPplus with Apache License 2.0 | 4 votes |
@Test public void testScalingUp() throws Exception { final File outDir = tempFolder.newFolder(); OneInputStreamOperatorTestHarness<String, Object> testHarness1 = createRescalingTestSink(outDir, 2, 0, 100); testHarness1.setup(); testHarness1.open(); OneInputStreamOperatorTestHarness<String, Object> testHarness2 = createRescalingTestSink(outDir, 2, 0, 100); testHarness2.setup(); testHarness2.open(); testHarness1.processElement(new StreamRecord<>("test1", 1L)); testHarness1.processElement(new StreamRecord<>("test2", 1L)); checkLocalFs(outDir, 2, 0, 0, 0); testHarness2.processElement(new StreamRecord<>("test3", 1L)); testHarness2.processElement(new StreamRecord<>("test4", 1L)); testHarness2.processElement(new StreamRecord<>("test5", 1L)); checkLocalFs(outDir, 5, 0, 0, 0); // intentionally we snapshot them in the reverse order so that the states are shuffled OperatorSubtaskState mergedSnapshot = AbstractStreamOperatorTestHarness.repackageState( testHarness2.snapshot(0, 0), testHarness1.snapshot(0, 0) ); OperatorSubtaskState initState1 = AbstractStreamOperatorTestHarness.repartitionOperatorState( mergedSnapshot, maxParallelism, 2, 3, 0); testHarness1 = createRescalingTestSink(outDir, 3, 0, 100); testHarness1.setup(); testHarness1.initializeState(initState1); testHarness1.open(); checkLocalFs(outDir, 2, 0, 3, 3); OperatorSubtaskState initState2 = AbstractStreamOperatorTestHarness.repartitionOperatorState( mergedSnapshot, maxParallelism, 2, 3, 1); testHarness2 = createRescalingTestSink(outDir, 3, 1, 100); testHarness2.setup(); testHarness2.initializeState(initState2); testHarness2.open(); checkLocalFs(outDir, 0, 0, 5, 5); OperatorSubtaskState initState3 = AbstractStreamOperatorTestHarness.repartitionOperatorState( mergedSnapshot, maxParallelism, 2, 3, 2); OneInputStreamOperatorTestHarness<String, Object> testHarness3 = createRescalingTestSink(outDir, 3, 2, 100); testHarness3.setup(); testHarness3.initializeState(initState3); testHarness3.open(); checkLocalFs(outDir, 0, 0, 5, 5); testHarness1.processElement(new StreamRecord<>("test6", 0)); testHarness2.processElement(new StreamRecord<>("test6", 0)); testHarness3.processElement(new StreamRecord<>("test6", 0)); checkLocalFs(outDir, 3, 0, 5, 5); testHarness1.snapshot(1, 0); testHarness2.snapshot(1, 0); testHarness3.snapshot(1, 0); testHarness1.close(); testHarness2.close(); testHarness3.close(); checkLocalFs(outDir, 0, 3, 5, 5); }
Example 15
Source File: BucketingSinkTest.java From Flink-CEPplus with Apache License 2.0 | 4 votes |
@Test public void testScalingDown() throws Exception { final File outDir = tempFolder.newFolder(); OneInputStreamOperatorTestHarness<String, Object> testHarness1 = createRescalingTestSink(outDir, 3, 0, 100); testHarness1.setup(); testHarness1.open(); OneInputStreamOperatorTestHarness<String, Object> testHarness2 = createRescalingTestSink(outDir, 3, 1, 100); testHarness2.setup(); testHarness2.open(); OneInputStreamOperatorTestHarness<String, Object> testHarness3 = createRescalingTestSink(outDir, 3, 2, 100); testHarness3.setup(); testHarness3.open(); testHarness1.processElement(new StreamRecord<>("test1", 0L)); checkLocalFs(outDir, 1, 0, 0, 0); testHarness2.processElement(new StreamRecord<>("test2", 0L)); checkLocalFs(outDir, 2, 0, 0, 0); testHarness3.processElement(new StreamRecord<>("test3", 0L)); testHarness3.processElement(new StreamRecord<>("test4", 0L)); checkLocalFs(outDir, 4, 0, 0, 0); // intentionally we snapshot them in the reverse order so that the states are shuffled OperatorSubtaskState mergedSnapshot = AbstractStreamOperatorTestHarness.repackageState( testHarness3.snapshot(0, 0), testHarness1.snapshot(0, 0), testHarness2.snapshot(0, 0) ); OperatorSubtaskState initState1 = AbstractStreamOperatorTestHarness.repartitionOperatorState( mergedSnapshot, maxParallelism, 3, 2, 0); testHarness1 = createRescalingTestSink(outDir, 2, 0, 100); testHarness1.setup(); testHarness1.initializeState(initState1); testHarness1.open(); checkLocalFs(outDir, 1, 0, 3, 3); OperatorSubtaskState initState2 = AbstractStreamOperatorTestHarness.repartitionOperatorState( mergedSnapshot, maxParallelism, 3, 2, 1); testHarness2 = createRescalingTestSink(outDir, 2, 1, 100); testHarness2.setup(); testHarness2.initializeState(initState2); testHarness2.open(); checkLocalFs(outDir, 0, 0, 4, 4); }
Example 16
Source File: BucketingSinkTest.java From Flink-CEPplus with Apache License 2.0 | 4 votes |
@Test public void testSameParallelismWithShufflingStates() throws Exception { final File outDir = tempFolder.newFolder(); OneInputStreamOperatorTestHarness<String, Object> testHarness1 = createRescalingTestSink(outDir, 2, 0, 100); testHarness1.setup(); testHarness1.open(); OneInputStreamOperatorTestHarness<String, Object> testHarness2 = createRescalingTestSink(outDir, 2, 1, 100); testHarness2.setup(); testHarness2.open(); testHarness1.processElement(new StreamRecord<>("test1", 0L)); checkLocalFs(outDir, 1, 0, 0, 0); testHarness2.processElement(new StreamRecord<>("test2", 0L)); checkLocalFs(outDir, 2, 0, 0, 0); // intentionally we snapshot them in the reverse order so that the states are shuffled OperatorSubtaskState mergedSnapshot = AbstractStreamOperatorTestHarness.repackageState( testHarness2.snapshot(0, 0), testHarness1.snapshot(0, 0) ); checkLocalFs(outDir, 2, 0, 0, 0); // this will not be included in any checkpoint so it can be cleaned up (although we do not) testHarness2.processElement(new StreamRecord<>("test3", 0L)); checkLocalFs(outDir, 3, 0, 0, 0); OperatorSubtaskState initState1 = AbstractStreamOperatorTestHarness.repartitionOperatorState( mergedSnapshot, maxParallelism, 2, 2, 0); testHarness1 = createRescalingTestSink(outDir, 2, 0, 100); testHarness1.setup(); testHarness1.initializeState(initState1); testHarness1.open(); // the one in-progress will be the one assigned to the next instance, // the other is the test3 which is just not cleaned up checkLocalFs(outDir, 2, 0, 1, 1); OperatorSubtaskState initState2 = AbstractStreamOperatorTestHarness.repartitionOperatorState( mergedSnapshot, maxParallelism, 2, 2, 1); testHarness2 = createRescalingTestSink(outDir, 2, 1, 100); testHarness2.setup(); testHarness2.initializeState(initState2); testHarness2.open(); checkLocalFs(outDir, 1, 0, 2, 2); testHarness1.close(); testHarness2.close(); // the 1 in-progress can be discarded. checkLocalFs(outDir, 1, 0, 2, 2); }
Example 17
Source File: RollingSinkITCase.java From Flink-CEPplus with Apache License 2.0 | 4 votes |
@Test public void testScalingUp() throws Exception { final File outDir = tempFolder.newFolder(); OneInputStreamOperatorTestHarness<String, Object> testHarness1 = createRescalingTestSink(outDir, 2, 0); testHarness1.setup(); testHarness1.open(); OneInputStreamOperatorTestHarness<String, Object> testHarness2 = createRescalingTestSink(outDir, 2, 0); testHarness2.setup(); testHarness2.open(); testHarness1.processElement(new StreamRecord<>("test1", 0L)); testHarness1.processElement(new StreamRecord<>("test2", 0L)); checkLocalFs(outDir, 1, 1, 0, 0); testHarness2.processElement(new StreamRecord<>("test3", 0L)); testHarness2.processElement(new StreamRecord<>("test4", 0L)); testHarness2.processElement(new StreamRecord<>("test5", 0L)); checkLocalFs(outDir, 2, 3, 0, 0); // intentionally we snapshot them in the reverse order so that the states are shuffled OperatorSubtaskState mergedSnapshot = AbstractStreamOperatorTestHarness.repackageState( testHarness2.snapshot(0, 0), testHarness1.snapshot(0, 0) ); OperatorSubtaskState initState1 = AbstractStreamOperatorTestHarness.repartitionOperatorState( mergedSnapshot, maxParallelism, 2, 3, 0); OperatorSubtaskState initState2 = AbstractStreamOperatorTestHarness.repartitionOperatorState( mergedSnapshot, maxParallelism, 2, 3, 1); OperatorSubtaskState initState3 = AbstractStreamOperatorTestHarness.repartitionOperatorState( mergedSnapshot, maxParallelism, 2, 3, 2); testHarness1 = createRescalingTestSink(outDir, 3, 0); testHarness1.setup(); testHarness1.initializeState(initState1); testHarness1.open(); checkLocalFs(outDir, 1, 1, 3, 1); testHarness2 = createRescalingTestSink(outDir, 3, 1); testHarness2.setup(); testHarness2.initializeState(initState2); testHarness2.open(); checkLocalFs(outDir, 0, 0, 5, 2); OneInputStreamOperatorTestHarness<String, Object> testHarness3 = createRescalingTestSink(outDir, 3, 2); testHarness3.setup(); testHarness3.initializeState(initState3); testHarness3.open(); checkLocalFs(outDir, 0, 0, 5, 2); testHarness1.processElement(new StreamRecord<>("test6", 0)); testHarness2.processElement(new StreamRecord<>("test6", 0)); testHarness3.processElement(new StreamRecord<>("test6", 0)); // 3 for the different tasks checkLocalFs(outDir, 3, 0, 5, 2); testHarness1.snapshot(1, 0); testHarness2.snapshot(1, 0); testHarness3.snapshot(1, 0); testHarness1.close(); testHarness2.close(); testHarness3.close(); checkLocalFs(outDir, 0, 3, 5, 2); }