Search in sources :

Example 6 with Source

use of org.apache.flink.api.connector.source.Source in project flink by apache.

the class HybridSourceSplitEnumerator method sendSwitchSourceEvent.

private void sendSwitchSourceEvent(int subtaskId, int sourceIndex) {
    readerSourceIndex.put(subtaskId, sourceIndex);
    Source source = switchedSources.sourceOf(sourceIndex);
    context.sendEventToSourceReader(subtaskId, new SwitchSourceEvent(sourceIndex, source, sourceIndex >= (sources.size() - 1)));
    // send pending splits, if any
    TreeMap<Integer, List<HybridSourceSplit>> splitsBySource = pendingSplits.get(subtaskId);
    if (splitsBySource != null) {
        List<HybridSourceSplit> splits = splitsBySource.remove(sourceIndex);
        if (splits != null && !splits.isEmpty()) {
            LOG.debug("Restoring splits to subtask={} {}", subtaskId, splits);
            context.assignSplits(new SplitsAssignment<>(Collections.singletonMap(subtaskId, splits)));
            context.signalNoMoreSplits(subtaskId);
        }
        if (splitsBySource.isEmpty()) {
            pendingSplits.remove(subtaskId);
        }
    }
    if (sourceIndex == currentSourceIndex) {
        LOG.debug("adding reader subtask={} sourceIndex={}", subtaskId, currentSourceIndex);
        currentEnumerator.addReader(subtaskId);
    }
}
Also used : ArrayList(java.util.ArrayList) List(java.util.List) Source(org.apache.flink.api.connector.source.Source)

Aggregations

Source (org.apache.flink.api.connector.source.Source)6 Test (org.junit.Test)4 MockBaseSource (org.apache.flink.connector.base.source.reader.mocks.MockBaseSource)3 ArrayList (java.util.ArrayList)2 MockSource (org.apache.flink.api.connector.source.mocks.MockSource)2 MockSplitEnumerator (org.apache.flink.connector.base.source.reader.mocks.MockSplitEnumerator)2 IOException (java.io.IOException)1 HashMap (java.util.HashMap)1 List (java.util.List)1 SourceReaderContext (org.apache.flink.api.connector.source.SourceReaderContext)1 MockSourceSplit (org.apache.flink.api.connector.source.mocks.MockSourceSplit)1 TestingReaderContext (org.apache.flink.connector.testutils.source.reader.TestingReaderContext)1 TestingReaderOutput (org.apache.flink.connector.testutils.source.reader.TestingReaderOutput)1 InputStatus (org.apache.flink.core.io.InputStatus)1