Search in sources :

Example 16 with Event

use of org.apache.flink.cep.Event in project flink by apache.

the class NFATest method testNFASerialization.

@Test
public void testNFASerialization() throws IOException, ClassNotFoundException {
    NFA<Event> nfa = new NFA<>(Event.createTypeSerializer(), 0, false);
    State<Event> startingState = new State<>("", State.StateType.Start);
    State<Event> startState = new State<>("start", State.StateType.Normal);
    State<Event> endState = new State<>("end", State.StateType.Final);
    StateTransition<Event> starting2Start = new StateTransition<>(StateTransitionAction.TAKE, startState, new NameFilter("start"));
    StateTransition<Event> start2End = new StateTransition<>(StateTransitionAction.TAKE, endState, new NameFilter("end"));
    StateTransition<Event> start2Start = new StateTransition<>(StateTransitionAction.IGNORE, startState, null);
    startingState.addStateTransition(starting2Start);
    startState.addStateTransition(start2End);
    startState.addStateTransition(start2Start);
    nfa.addState(startingState);
    nfa.addState(startState);
    nfa.addState(endState);
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ObjectOutputStream oos = new ObjectOutputStream(baos);
    oos.writeObject(nfa);
    ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
    ObjectInputStream ois = new ObjectInputStream(bais);
    @SuppressWarnings("unchecked") NFA<Event> copy = (NFA<Event>) ois.readObject();
    assertEquals(nfa, copy);
}
Also used : ByteArrayOutputStream(org.apache.commons.io.output.ByteArrayOutputStream) ObjectOutputStream(java.io.ObjectOutputStream) ByteArrayInputStream(java.io.ByteArrayInputStream) Event(org.apache.flink.cep.Event) ObjectInputStream(java.io.ObjectInputStream) Test(org.junit.Test)

Example 17 with Event

use of org.apache.flink.cep.Event in project flink by apache.

the class NFATest method testTimeoutWindowPruning.

@Test
public void testTimeoutWindowPruning() {
    NFA<Event> nfa = createStartEndNFA(2);
    List<StreamRecord<Event>> streamEvents = new ArrayList<>();
    streamEvents.add(new StreamRecord<>(new Event(1, "start", 1.0), 1L));
    streamEvents.add(new StreamRecord<>(new Event(2, "bar", 2.0), 2L));
    streamEvents.add(new StreamRecord<>(new Event(3, "start", 3.0), 3L));
    streamEvents.add(new StreamRecord<>(new Event(4, "end", 4.0), 4L));
    Set<Map<String, Event>> expectedPatterns = new HashSet<>();
    Map<String, Event> secondPattern = new HashMap<>();
    secondPattern.put("start", new Event(3, "start", 3.0));
    secondPattern.put("end", new Event(4, "end", 4.0));
    expectedPatterns.add(secondPattern);
    Collection<Map<String, Event>> actualPatterns = runNFA(nfa, streamEvents);
    assertEquals(expectedPatterns, actualPatterns);
}
Also used : StreamRecord(org.apache.flink.streaming.runtime.streamrecord.StreamRecord) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) Event(org.apache.flink.cep.Event) HashMap(java.util.HashMap) Map(java.util.Map) HashSet(java.util.HashSet) Test(org.junit.Test)

Example 18 with Event

use of org.apache.flink.cep.Event in project flink by apache.

the class NFATest method testSimpleNFA.

@Test
public void testSimpleNFA() {
    NFA<Event> nfa = new NFA<>(Event.createTypeSerializer(), 0, false);
    List<StreamRecord<Event>> streamEvents = new ArrayList<>();
    streamEvents.add(new StreamRecord<>(new Event(1, "start", 1.0), 1L));
    streamEvents.add(new StreamRecord<>(new Event(2, "bar", 2.0), 2L));
    streamEvents.add(new StreamRecord<>(new Event(3, "start", 3.0), 3L));
    streamEvents.add(new StreamRecord<>(new Event(4, "end", 4.0), 4L));
    State<Event> startingState = new State<>("", State.StateType.Start);
    State<Event> startState = new State<>("start", State.StateType.Normal);
    State<Event> endState = new State<>("end", State.StateType.Final);
    StateTransition<Event> starting2Start = new StateTransition<>(StateTransitionAction.TAKE, startState, new FilterFunction<Event>() {

        private static final long serialVersionUID = -4869589195918650396L;

        @Override
        public boolean filter(Event value) throws Exception {
            return value.getName().equals("start");
        }
    });
    StateTransition<Event> start2End = new StateTransition<>(StateTransitionAction.TAKE, endState, new FilterFunction<Event>() {

        private static final long serialVersionUID = 2979804163709590673L;

        @Override
        public boolean filter(Event value) throws Exception {
            return value.getName().equals("end");
        }
    });
    StateTransition<Event> start2Start = new StateTransition<>(StateTransitionAction.IGNORE, startState, null);
    startingState.addStateTransition(starting2Start);
    startState.addStateTransition(start2End);
    startState.addStateTransition(start2Start);
    nfa.addState(startingState);
    nfa.addState(startState);
    nfa.addState(endState);
    Set<Map<String, Event>> expectedPatterns = new HashSet<>();
    Map<String, Event> firstPattern = new HashMap<>();
    firstPattern.put("start", new Event(1, "start", 1.0));
    firstPattern.put("end", new Event(4, "end", 4.0));
    Map<String, Event> secondPattern = new HashMap<>();
    secondPattern.put("start", new Event(3, "start", 3.0));
    secondPattern.put("end", new Event(4, "end", 4.0));
    expectedPatterns.add(firstPattern);
    expectedPatterns.add(secondPattern);
    Collection<Map<String, Event>> actualPatterns = runNFA(nfa, streamEvents);
    assertEquals(expectedPatterns, actualPatterns);
}
Also used : StreamRecord(org.apache.flink.streaming.runtime.streamrecord.StreamRecord) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) IOException(java.io.IOException) Event(org.apache.flink.cep.Event) HashMap(java.util.HashMap) Map(java.util.Map) HashSet(java.util.HashSet) Test(org.junit.Test)

Example 19 with Event

use of org.apache.flink.cep.Event in project flink by apache.

the class NFATest method testTimeoutWindowPruningWindowBorders.

/**
	 * Tests that pruning shared buffer elements and computations state use the same window border
	 * semantics (left side inclusive and right side exclusive)
	 */
@Test
public void testTimeoutWindowPruningWindowBorders() {
    NFA<Event> nfa = createStartEndNFA(2);
    List<StreamRecord<Event>> streamEvents = new ArrayList<>();
    streamEvents.add(new StreamRecord<>(new Event(1, "start", 1.0), 1L));
    streamEvents.add(new StreamRecord<>(new Event(2, "start", 2.0), 2L));
    streamEvents.add(new StreamRecord<>(new Event(3, "foobar", 3.0), 3L));
    streamEvents.add(new StreamRecord<>(new Event(4, "end", 4.0), 3L));
    Set<Map<String, Event>> expectedPatterns = new HashSet<>();
    Map<String, Event> secondPattern = new HashMap<>();
    secondPattern.put("start", new Event(2, "start", 2.0));
    secondPattern.put("end", new Event(4, "end", 4.0));
    expectedPatterns.add(secondPattern);
    Collection<Map<String, Event>> actualPatterns = runNFA(nfa, streamEvents);
    assertEquals(expectedPatterns, actualPatterns);
}
Also used : StreamRecord(org.apache.flink.streaming.runtime.streamrecord.StreamRecord) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) Event(org.apache.flink.cep.Event) HashMap(java.util.HashMap) Map(java.util.Map) HashSet(java.util.HashSet) Test(org.junit.Test)

Example 20 with Event

use of org.apache.flink.cep.Event in project flink by apache.

the class CEPOperatorTest method testCEPOperatorCleanupProcessingTime.

@Test
public void testCEPOperatorCleanupProcessingTime() throws Exception {
    Event startEvent1 = new Event(42, "start", 1.0);
    Event startEvent2 = new Event(42, "start", 2.0);
    SubEvent middleEvent1 = new SubEvent(42, "foo1", 1.0, 10.0);
    SubEvent middleEvent2 = new SubEvent(42, "foo2", 1.0, 10.0);
    SubEvent middleEvent3 = new SubEvent(42, "foo3", 1.0, 10.0);
    Event endEvent1 = new Event(42, "end", 1.0);
    Event endEvent2 = new Event(42, "end", 2.0);
    Event startEventK2 = new Event(43, "start", 1.0);
    TestKeySelector keySelector = new TestKeySelector();
    KeyedCEPPatternOperator<Event, Integer> operator = getKeyedCepOpearator(true, keySelector);
    OneInputStreamOperatorTestHarness<Event, Map<String, Event>> harness = getCepTestHarness(operator);
    harness.open();
    harness.setProcessingTime(0L);
    harness.processElement(new StreamRecord<>(startEvent1, 1L));
    harness.processElement(new StreamRecord<>(startEventK2, 1L));
    harness.processElement(new StreamRecord<>(new Event(42, "foobar", 1.0), 2L));
    harness.processElement(new StreamRecord<Event>(middleEvent1, 2L));
    harness.processElement(new StreamRecord<Event>(new SubEvent(42, "barfoo", 1.0, 5.0), 3L));
    assertTrue(!operator.hasNonEmptyPQ(42));
    assertTrue(!operator.hasNonEmptyPQ(43));
    assertTrue(operator.hasNonEmptyNFA(42));
    assertTrue(operator.hasNonEmptyNFA(43));
    harness.setProcessingTime(3L);
    harness.processElement(new StreamRecord<>(startEvent2, 3L));
    harness.processElement(new StreamRecord<Event>(middleEvent2, 4L));
    harness.processElement(new StreamRecord<>(endEvent1, 5L));
    verifyPattern(harness.getOutput().poll(), startEvent1, middleEvent1, endEvent1);
    verifyPattern(harness.getOutput().poll(), startEvent1, middleEvent2, endEvent1);
    verifyPattern(harness.getOutput().poll(), startEvent2, middleEvent2, endEvent1);
    harness.setProcessingTime(11L);
    harness.processElement(new StreamRecord<Event>(middleEvent3, 11L));
    harness.processElement(new StreamRecord<>(endEvent2, 12L));
    verifyPattern(harness.getOutput().poll(), startEvent2, middleEvent2, endEvent2);
    verifyPattern(harness.getOutput().poll(), startEvent2, middleEvent3, endEvent2);
    harness.setProcessingTime(21L);
    assertTrue(operator.hasNonEmptyNFA(42));
    harness.processElement(new StreamRecord<>(startEvent1, 21L));
    assertTrue(operator.hasNonEmptyNFA(42));
    harness.setProcessingTime(49L);
    // TODO: 3/13/17 we have to have another event in order to clean up
    harness.processElement(new StreamRecord<>(new Event(42, "foobar", 1.0), 2L));
    // the pattern expired
    assertTrue(!operator.hasNonEmptyNFA(42));
    assertEquals(0L, harness.numKeysForWatermarkCallback());
    assertTrue(!operator.hasNonEmptyPQ(42));
    assertTrue(!operator.hasNonEmptyPQ(43));
    harness.close();
}
Also used : SubEvent(org.apache.flink.cep.SubEvent) Event(org.apache.flink.cep.Event) SubEvent(org.apache.flink.cep.SubEvent) HashMap(java.util.HashMap) Map(java.util.Map) Test(org.junit.Test)

Aggregations

Event (org.apache.flink.cep.Event)20 Test (org.junit.Test)20 Map (java.util.Map)17 SubEvent (org.apache.flink.cep.SubEvent)14 HashMap (java.util.HashMap)13 StreamRecord (org.apache.flink.streaming.runtime.streamrecord.StreamRecord)11 Watermark (org.apache.flink.streaming.api.watermark.Watermark)9 ArrayList (java.util.ArrayList)7 HashSet (java.util.HashSet)5 FilterFunction (org.apache.flink.api.common.functions.FilterFunction)4 OperatorStateHandles (org.apache.flink.streaming.runtime.tasks.OperatorStateHandles)4 KeySelector (org.apache.flink.api.java.functions.KeySelector)3 KeyedOneInputStreamOperatorTestHarness (org.apache.flink.streaming.util.KeyedOneInputStreamOperatorTestHarness)3 ByteArrayInputStream (java.io.ByteArrayInputStream)2 ObjectInputStream (java.io.ObjectInputStream)2 ObjectOutputStream (java.io.ObjectOutputStream)2 NullByteKeySelector (org.apache.flink.api.java.functions.NullByteKeySelector)2 Tuple2 (org.apache.flink.api.java.tuple.Tuple2)2 LinkedHashMultimap (com.google.common.collect.LinkedHashMultimap)1 ByteArrayOutputStream (java.io.ByteArrayOutputStream)1