Search in sources :

Example 6 with Node

use of org.apache.beam.sdk.runners.TransformHierarchy.Node in project beam by apache.

the class ViewOverrideFactoryTest method replacementGetViewReturnsOriginal.

@Test
public void replacementGetViewReturnsOriginal() {
    final PCollection<Integer> ints = p.apply("CreateContents", Create.of(1, 2, 3));
    final PCollectionView<List<Integer>> view = PCollectionViews.listView(ints, WindowingStrategy.globalDefault(), ints.getCoder());
    PTransformReplacement<PCollection<Integer>, PCollectionView<List<Integer>>> replacement = factory.getReplacementTransform(AppliedPTransform.<PCollection<Integer>, PCollectionView<List<Integer>>, CreatePCollectionView<Integer, List<Integer>>>of("foo", ints.expand(), view.expand(), CreatePCollectionView.<Integer, List<Integer>>of(view), p));
    ints.apply(replacement.getTransform());
    final AtomicBoolean writeViewVisited = new AtomicBoolean();
    p.traverseTopologically(new PipelineVisitor.Defaults() {

        @Override
        public void visitPrimitiveTransform(Node node) {
            if (node.getTransform() instanceof WriteView) {
                assertThat("There should only be one WriteView primitive in the graph", writeViewVisited.getAndSet(true), is(false));
                PCollectionView replacementView = ((WriteView) node.getTransform()).getView();
                assertThat(replacementView, Matchers.<PCollectionView>theInstance(view));
                assertThat(node.getInputs().entrySet(), hasSize(1));
            }
        }
    });
    assertThat(writeViewVisited.get(), is(true));
}
Also used : WriteView(org.apache.beam.runners.direct.ViewOverrideFactory.WriteView) Node(org.apache.beam.sdk.runners.TransformHierarchy.Node) PCollection(org.apache.beam.sdk.values.PCollection) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) PCollectionView(org.apache.beam.sdk.values.PCollectionView) CreatePCollectionView(org.apache.beam.sdk.transforms.View.CreatePCollectionView) PipelineVisitor(org.apache.beam.sdk.Pipeline.PipelineVisitor) List(java.util.List) Test(org.junit.Test)

Example 7 with Node

use of org.apache.beam.sdk.runners.TransformHierarchy.Node in project beam by apache.

the class Pipeline method replace.

private void replace(final PTransformOverride override) {
    final Set<Node> matches = new HashSet<>();
    final Set<Node> freedNodes = new HashSet<>();
    traverseTopologically(new PipelineVisitor.Defaults() {

        @Override
        public CompositeBehavior enterCompositeTransform(Node node) {
            if (!node.isRootNode() && freedNodes.contains(node.getEnclosingNode())) {
                // This node will be freed because its parent will be freed.
                freedNodes.add(node);
                return CompositeBehavior.ENTER_TRANSFORM;
            }
            if (!node.isRootNode() && override.getMatcher().matches(node.toAppliedPTransform(getPipeline()))) {
                matches.add(node);
                // This node will be freed. When we visit any of its children, they will also be freed
                freedNodes.add(node);
            }
            return CompositeBehavior.ENTER_TRANSFORM;
        }

        @Override
        public void visitPrimitiveTransform(Node node) {
            if (freedNodes.contains(node.getEnclosingNode())) {
                freedNodes.add(node);
            } else if (override.getMatcher().matches(node.toAppliedPTransform(getPipeline()))) {
                matches.add(node);
                freedNodes.add(node);
            }
        }
    });
    for (Node freedNode : freedNodes) {
        usedFullNames.remove(freedNode.getFullName());
    }
    for (Node match : matches) {
        applyReplacement(match, override.getOverrideFactory());
    }
}
Also used : Node(org.apache.beam.sdk.runners.TransformHierarchy.Node) PTransformOverride(org.apache.beam.sdk.runners.PTransformOverride) HashSet(java.util.HashSet)

Example 8 with Node

use of org.apache.beam.sdk.runners.TransformHierarchy.Node in project beam by apache.

the class WindowIntoTranslationTest method testToFromProto.

@Test
public void testToFromProto() throws InvalidProtocolBufferException {
    pipeline.apply(GenerateSequence.from(0)).apply(Window.<Long>into((WindowFn) windowFn));
    final AtomicReference<AppliedPTransform<?, ?, Assign<?>>> assign = new AtomicReference<>(null);
    pipeline.traverseTopologically(new PipelineVisitor.Defaults() {

        @Override
        public void visitPrimitiveTransform(Node node) {
            if (node.getTransform() instanceof Window.Assign) {
                checkState(assign.get() == null);
                assign.set((AppliedPTransform<?, ?, Assign<?>>) node.toAppliedPTransform(getPipeline()));
            }
        }
    });
    checkState(assign.get() != null);
    SdkComponents components = SdkComponents.create();
    WindowIntoPayload payload = WindowIntoTranslation.toProto(assign.get().getTransform(), components);
    assertEquals(windowFn, WindowIntoTranslation.getWindowFn(payload));
}
Also used : Window(org.apache.beam.sdk.transforms.windowing.Window) GlobalWindow(org.apache.beam.sdk.transforms.windowing.GlobalWindow) BoundedWindow(org.apache.beam.sdk.transforms.windowing.BoundedWindow) WindowIntoPayload(org.apache.beam.sdk.common.runner.v1.RunnerApi.WindowIntoPayload) AppliedPTransform(org.apache.beam.sdk.runners.AppliedPTransform) WindowFn(org.apache.beam.sdk.transforms.windowing.WindowFn) PartitioningWindowFn(org.apache.beam.sdk.transforms.windowing.PartitioningWindowFn) Node(org.apache.beam.sdk.runners.TransformHierarchy.Node) Assign(org.apache.beam.sdk.transforms.windowing.Window.Assign) PipelineVisitor(org.apache.beam.sdk.Pipeline.PipelineVisitor) AtomicReference(java.util.concurrent.atomic.AtomicReference) Test(org.junit.Test)

Example 9 with Node

use of org.apache.beam.sdk.runners.TransformHierarchy.Node in project beam by apache.

the class CombineTranslationTest method testToFromProto.

@Test
public void testToFromProto() throws Exception {
    PCollection<Integer> input = pipeline.apply(Create.of(1, 2, 3));
    input.apply(Combine.globally(combineFn));
    final AtomicReference<AppliedPTransform<?, ?, Combine.PerKey<?, ?, ?>>> combine = new AtomicReference<>();
    pipeline.traverseTopologically(new PipelineVisitor.Defaults() {

        @Override
        public void leaveCompositeTransform(Node node) {
            if (node.getTransform() instanceof Combine.PerKey) {
                checkState(combine.get() == null);
                combine.set((AppliedPTransform) node.toAppliedPTransform(getPipeline()));
            }
        }
    });
    checkState(combine.get() != null);
    SdkComponents sdkComponents = SdkComponents.create();
    CombinePayload combineProto = CombineTranslation.toProto(combine.get(), sdkComponents);
    RunnerApi.Components componentsProto = sdkComponents.toComponents();
    assertEquals(combineFn.getAccumulatorCoder(pipeline.getCoderRegistry(), input.getCoder()), CombineTranslation.getAccumulatorCoder(combineProto, componentsProto));
    assertEquals(combineFn, CombineTranslation.getCombineFn(combineProto));
}
Also used : Combine(org.apache.beam.sdk.transforms.Combine) Node(org.apache.beam.sdk.runners.TransformHierarchy.Node) AtomicReference(java.util.concurrent.atomic.AtomicReference) RunnerApi(org.apache.beam.sdk.common.runner.v1.RunnerApi) CombinePayload(org.apache.beam.sdk.common.runner.v1.RunnerApi.CombinePayload) AppliedPTransform(org.apache.beam.sdk.runners.AppliedPTransform) PipelineVisitor(org.apache.beam.sdk.Pipeline.PipelineVisitor) Test(org.junit.Test)

Example 10 with Node

use of org.apache.beam.sdk.runners.TransformHierarchy.Node in project beam by apache.

the class DataflowRunnerTest method testUnconsumedReads.

/**
   * Tests that all reads are consumed by at least one {@link PTransform}.
   */
@Test
public void testUnconsumedReads() throws IOException {
    DataflowPipelineOptions dataflowOptions = buildPipelineOptions();
    RuntimeTestOptions options = dataflowOptions.as(RuntimeTestOptions.class);
    Pipeline p = buildDataflowPipeline(dataflowOptions);
    PCollection<String> unconsumed = p.apply(TextIO.read().from(options.getInput()));
    DataflowRunner.fromOptions(dataflowOptions).replaceTransforms(p);
    final AtomicBoolean unconsumedSeenAsInput = new AtomicBoolean();
    p.traverseTopologically(new PipelineVisitor.Defaults() {

        @Override
        public void visitPrimitiveTransform(Node node) {
            unconsumedSeenAsInput.set(true);
        }
    });
    assertThat(unconsumedSeenAsInput.get(), is(true));
}
Also used : AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) DataflowPipelineOptions(org.apache.beam.runners.dataflow.options.DataflowPipelineOptions) Node(org.apache.beam.sdk.runners.TransformHierarchy.Node) PipelineVisitor(org.apache.beam.sdk.Pipeline.PipelineVisitor) Matchers.containsString(org.hamcrest.Matchers.containsString) Matchers.anyString(org.mockito.Matchers.anyString) TestPipeline(org.apache.beam.sdk.testing.TestPipeline) Pipeline(org.apache.beam.sdk.Pipeline) Test(org.junit.Test)

Aggregations

Node (org.apache.beam.sdk.runners.TransformHierarchy.Node)13 Test (org.junit.Test)12 PipelineVisitor (org.apache.beam.sdk.Pipeline.PipelineVisitor)7 PCollection (org.apache.beam.sdk.values.PCollection)5 PValue (org.apache.beam.sdk.values.PValue)5 HashSet (java.util.HashSet)4 PTransform (org.apache.beam.sdk.transforms.PTransform)4 TaggedPValue (org.apache.beam.sdk.values.TaggedPValue)4 GenerateSequence (org.apache.beam.sdk.io.GenerateSequence)3 AppliedPTransform (org.apache.beam.sdk.runners.AppliedPTransform)3 Create (org.apache.beam.sdk.transforms.Create)3 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)2 AtomicReference (java.util.concurrent.atomic.AtomicReference)2 Defaults (org.apache.beam.sdk.Pipeline.PipelineVisitor.Defaults)2 RunnerApi (org.apache.beam.sdk.common.runner.v1.RunnerApi)2 Read (org.apache.beam.sdk.io.Read)2 PTransformOverride (org.apache.beam.sdk.runners.PTransformOverride)2 DoFn (org.apache.beam.sdk.transforms.DoFn)2 PCollectionTuple (org.apache.beam.sdk.values.PCollectionTuple)2 TupleTag (org.apache.beam.sdk.values.TupleTag)2