NonNull by default for sdk/testing
Project: http://git-wip-us.apache.org/repos/asf/beam/repo Commit: http://git-wip-us.apache.org/repos/asf/beam/commit/3a64e919 Tree: http://git-wip-us.apache.org/repos/asf/beam/tree/3a64e919 Diff: http://git-wip-us.apache.org/repos/asf/beam/diff/3a64e919 Branch: refs/heads/master Commit: 3a64e9199c3f64a7e679e726e67079e93dd6cdd9 Parents: 524d824 Author: Kenneth Knowles <[email protected]> Authored: Thu Oct 19 20:08:36 2017 -0700 Committer: Kenneth Knowles <[email protected]> Committed: Fri Oct 20 14:51:42 2017 -0700 ---------------------------------------------------------------------- .../beam/sdk/testing/FileChecksumMatcher.java | 41 +++++++++++++------- .../beam/sdk/testing/SuccessOrFailure.java | 6 +-- .../apache/beam/sdk/testing/TestPipeline.java | 4 +- .../apache/beam/sdk/testing/WindowSupplier.java | 4 +- .../apache/beam/sdk/testing/package-info.java | 5 +++ 5 files changed, 41 insertions(+), 19 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/beam/blob/3a64e919/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/FileChecksumMatcher.java ---------------------------------------------------------------------- diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/FileChecksumMatcher.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/FileChecksumMatcher.java index 5ed0525..e798841 100644 --- a/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/FileChecksumMatcher.java +++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/FileChecksumMatcher.java @@ -29,6 +29,7 @@ import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; import javax.annotation.Nonnull; +import javax.annotation.Nullable; import org.apache.beam.sdk.PipelineResult; import org.apache.beam.sdk.util.FluentBackoff; import org.apache.beam.sdk.util.NumberedShardedFile; @@ -71,9 +72,11 @@ public class FileChecksumMatcher extends TypeSafeMatcher<PipelineResult> Pattern.compile("(?x) \\S* (?<shardnum> \\d+) -of- (?<numshards> \\d+)"); private final String expectedChecksum; - private String actualChecksum; private final ShardedFile shardedFile; + /** Access via {@link #getActualChecksum()}. */ + @Nullable private String actualChecksum; + /** * Constructor that uses default shard template. * @@ -123,20 +126,30 @@ public class FileChecksumMatcher extends TypeSafeMatcher<PipelineResult> @Override public boolean matchesSafely(PipelineResult pipelineResult) { - // Load output data - List<String> outputs; - try { - outputs = shardedFile.readFilesWithRetries(Sleeper.DEFAULT, BACK_OFF_FACTORY.backoff()); - } catch (Exception e) { - throw new RuntimeException( - String.format("Failed to read from: %s", shardedFile), e); - } + return getActualChecksum().equals(expectedChecksum); + } - // Verify outputs. Checksum is computed using SHA-1 algorithm - actualChecksum = computeHash(outputs); - LOG.debug("Generated checksum: {}", actualChecksum); + /** + * Computes a checksum of the sharded file specified in the constructor. Not safe to call until + * the writing is complete. + */ + private String getActualChecksum() { + if (actualChecksum == null) { + // Load output data + List<String> outputs; + try { + outputs = shardedFile.readFilesWithRetries(Sleeper.DEFAULT, BACK_OFF_FACTORY.backoff()); + } catch (Exception e) { + throw new RuntimeException( + String.format("Failed to read from: %s", shardedFile), e); + } + + // Verify outputs. Checksum is computed using SHA-1 algorithm + actualChecksum = computeHash(outputs); + LOG.debug("Generated checksum: {}", actualChecksum); + } - return actualChecksum.equals(expectedChecksum); + return actualChecksum; } private String computeHash(@Nonnull List<String> strs) { @@ -163,7 +176,7 @@ public class FileChecksumMatcher extends TypeSafeMatcher<PipelineResult> public void describeMismatchSafely(PipelineResult pResult, Description description) { description .appendText("was (") - .appendText(actualChecksum) + .appendText(getActualChecksum()) .appendText(")"); } } http://git-wip-us.apache.org/repos/asf/beam/blob/3a64e919/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/SuccessOrFailure.java ---------------------------------------------------------------------- diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/SuccessOrFailure.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/SuccessOrFailure.java index 79e83d6..a63bbcc 100644 --- a/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/SuccessOrFailure.java +++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/SuccessOrFailure.java @@ -31,10 +31,10 @@ import org.apache.beam.sdk.coders.SerializableCoder; @DefaultCoder(SerializableCoder.class) public final class SuccessOrFailure implements Serializable { private static final class SerializableThrowable implements Serializable { - private final Throwable throwable; - private final StackTraceElement[] stackTrace; + @Nullable private final Throwable throwable; + @Nullable private final StackTraceElement[] stackTrace; - private SerializableThrowable(Throwable t) { + private SerializableThrowable(@Nullable Throwable t) { this.throwable = t; this.stackTrace = (t == null) ? null : t.getStackTrace(); } http://git-wip-us.apache.org/repos/asf/beam/blob/3a64e919/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/TestPipeline.java ---------------------------------------------------------------------- diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/TestPipeline.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/TestPipeline.java index be2f193..f2729e9 100644 --- a/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/TestPipeline.java +++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/TestPipeline.java @@ -142,7 +142,8 @@ public class TestPipeline extends Pipeline implements TestRule { private static class PipelineAbandonedNodeEnforcement extends PipelineRunEnforcement { - private List<TransformHierarchy.Node> runVisitedNodes; + // Null until the pipeline has been run + @Nullable private List<TransformHierarchy.Node> runVisitedNodes; private final Predicate<TransformHierarchy.Node> isPAssertNode = new Predicate<TransformHierarchy.Node>() { @@ -172,6 +173,7 @@ public class TestPipeline extends Pipeline implements TestRule { private PipelineAbandonedNodeEnforcement(final TestPipeline pipeline) { super(pipeline); + runVisitedNodes = null; } private List<TransformHierarchy.Node> recordPipelineNodes(final Pipeline pipeline) { http://git-wip-us.apache.org/repos/asf/beam/blob/3a64e919/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/WindowSupplier.java ---------------------------------------------------------------------- diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/WindowSupplier.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/WindowSupplier.java index 96091ef..953dd27 100644 --- a/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/WindowSupplier.java +++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/WindowSupplier.java @@ -22,6 +22,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import java.io.Serializable; import java.util.Collection; +import javax.annotation.Nullable; import org.apache.beam.sdk.coders.Coder; import org.apache.beam.sdk.coders.CoderException; import org.apache.beam.sdk.transforms.windowing.BoundedWindow; @@ -36,7 +37,8 @@ final class WindowSupplier implements Supplier<Collection<BoundedWindow>>, Seria private final Coder<? extends BoundedWindow> coder; private final Collection<byte[]> encodedWindows; - private transient Collection<BoundedWindow> windows; + /** Access via {@link #get()}.*/ + @Nullable private transient Collection<BoundedWindow> windows; public static <W extends BoundedWindow> WindowSupplier of(Coder<W> coder, Iterable<W> windows) { ImmutableSet.Builder<byte[]> windowsBuilder = ImmutableSet.builder(); http://git-wip-us.apache.org/repos/asf/beam/blob/3a64e919/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/package-info.java ---------------------------------------------------------------------- diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/package-info.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/package-info.java index e66677d..6a28529 100644 --- a/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/package-info.java +++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/package-info.java @@ -19,4 +19,9 @@ * Defines utilities for unit testing Apache Beam pipelines. The tests for the {@code PTransform}s * and examples included in the Apache Beam SDK provide examples of using these utilities. */ +@DefaultAnnotation(NonNull.class) package org.apache.beam.sdk.testing; + +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; +
