diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
3 files changed, 17 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetCodecTestUtils.java b/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetCodecTestUtils.java index 89faad4a8b..901b771c8b 100644 --- a/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetCodecTestUtils.java +++ b/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetCodecTestUtils.java @@ -29,7 +29,8 @@ public class NestedSetCodecTestUtils { NestedSetBuilder.<String>stableOrder().add("e").build(); /** Perform serialization/deserialization checks for several simple NestedSet examples. */ - public static void checkCodec(ObjectCodecs objectCodecs) throws Exception { + public static void checkCodec(ObjectCodecs objectCodecs, boolean allowFutureBlocking) + throws Exception { new SerializationTester( NestedSetBuilder.emptySet(Order.STABLE_ORDER), NestedSetBuilder.emptySet(Order.NAIVE_LINK_ORDER), @@ -51,6 +52,7 @@ public class NestedSetCodecTestUtils { .addTransitive(NestedSetBuilder.emptySet(Order.STABLE_ORDER)) .build()) .setObjectCodecs(objectCodecs) + .makeMemoizingAndAllowFutureBlocking(allowFutureBlocking) .setVerificationFunction(NestedSetCodecTestUtils::verifyDeserialization) .runTests(); } diff --git a/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetCodecWithStore.java b/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetCodecWithStore.java index 285bd6f230..030b0a3332 100644 --- a/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetCodecWithStore.java +++ b/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetCodecWithStore.java @@ -73,6 +73,7 @@ public class NestedSetCodecWithStore<T> implements ObjectCodec<NestedSet<T>> { context.serialize(NestedSetSize.GROUP, codedOut); FingerprintComputationResult fingerprintComputationResult = nestedSetStore.computeFingerprintAndStore((Object[]) obj.rawChildren(), context); + context.addFutureToBlockWritingOn(fingerprintComputationResult.writeStatus()); codedOut.writeByteArrayNoTag(fingerprintComputationResult.fingerprint().toByteArray()); } } diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/SerializationTester.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/SerializationTester.java index ff4dbe8b4d..c8fda47539 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/SerializationTester.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/SerializationTester.java @@ -62,6 +62,7 @@ public class SerializationTester { private final ImmutableMap.Builder<Class<?>, Object> dependenciesBuilder; private final ArrayList<ObjectCodec<?>> additionalCodecs = new ArrayList<>(); private boolean memoize; + private boolean allowFutureBlocking; private ObjectCodecs objectCodecs; @SuppressWarnings("rawtypes") @@ -100,6 +101,12 @@ public class SerializationTester { return this; } + public SerializationTester makeMemoizingAndAllowFutureBlocking(boolean allowFutureBlocking) { + makeMemoizing(); + this.allowFutureBlocking = allowFutureBlocking; + return this; + } + public SerializationTester setObjectCodecs(ObjectCodecs objectCodecs) { this.objectCodecs = objectCodecs; return this; @@ -138,10 +145,13 @@ public class SerializationTester { return new ObjectCodecs(registryBuilder.build(), dependencies); } - private ByteString serialize(Object subject, ObjectCodecs codecs) - throws SerializationException, IOException { + private ByteString serialize(Object subject, ObjectCodecs codecs) throws SerializationException { if (memoize) { - return codecs.serializeMemoized(subject); + if (allowFutureBlocking) { + return codecs.serializeMemoizedAndBlocking(subject).getObject(); + } else { + return codecs.serializeMemoized(subject); + } } else { return codecs.serialize(subject); } |