You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beam.apache.org by tg...@apache.org on 2017/05/12 00:56:07 UTC

[1/2] beam git commit: This closes #3109

Repository: beam
Updated Branches:
  refs/heads/master fc77ca7cb -> 652fcb7e9


This closes #3109


Project: http://git-wip-us.apache.org/repos/asf/beam/repo
Commit: http://git-wip-us.apache.org/repos/asf/beam/commit/652fcb7e
Tree: http://git-wip-us.apache.org/repos/asf/beam/tree/652fcb7e
Diff: http://git-wip-us.apache.org/repos/asf/beam/diff/652fcb7e

Branch: refs/heads/master
Commit: 652fcb7e9e427b3ae44dbfcdd537298d9dd07cb5
Parents: fc77ca7 c39c9ae
Author: Thomas Groh <tg...@google.com>
Authored: Thu May 11 17:55:50 2017 -0700
Committer: Thomas Groh <tg...@google.com>
Committed: Thu May 11 17:55:50 2017 -0700

----------------------------------------------------------------------
 .../src/main/resources/beam/findbugs-filter.xml           | 10 ++++++++++
 .../org/apache/beam/sdk/coders/SerializableCoder.java     |  5 ++++-
 .../org/apache/beam/sdk/coders/SerializableCoderTest.java |  8 +++++++-
 3 files changed, 21 insertions(+), 2 deletions(-)
----------------------------------------------------------------------



[2/2] beam git commit: Enable SerializableCoder to Serialize with Generic Types

Posted by tg...@apache.org.
Enable SerializableCoder to Serialize with Generic Types

A TypeToken that contains generics is not serializable. However, the
TypeDescriptor does not need to be transmitted via the serialized form,
so mark it as transient.


Project: http://git-wip-us.apache.org/repos/asf/beam/repo
Commit: http://git-wip-us.apache.org/repos/asf/beam/commit/c39c9aec
Tree: http://git-wip-us.apache.org/repos/asf/beam/tree/c39c9aec
Diff: http://git-wip-us.apache.org/repos/asf/beam/diff/c39c9aec

Branch: refs/heads/master
Commit: c39c9aecf859095bfde87267e7eb9d9a4fd1682d
Parents: fc77ca7
Author: Thomas Groh <tg...@google.com>
Authored: Thu May 11 17:16:53 2017 -0700
Committer: Thomas Groh <tg...@google.com>
Committed: Thu May 11 17:55:50 2017 -0700

----------------------------------------------------------------------
 .../src/main/resources/beam/findbugs-filter.xml           | 10 ++++++++++
 .../org/apache/beam/sdk/coders/SerializableCoder.java     |  5 ++++-
 .../org/apache/beam/sdk/coders/SerializableCoderTest.java |  8 +++++++-
 3 files changed, 21 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/beam/blob/c39c9aec/sdks/java/build-tools/src/main/resources/beam/findbugs-filter.xml
----------------------------------------------------------------------
diff --git a/sdks/java/build-tools/src/main/resources/beam/findbugs-filter.xml b/sdks/java/build-tools/src/main/resources/beam/findbugs-filter.xml
index 1db0e86..8ff0cb0 100644
--- a/sdks/java/build-tools/src/main/resources/beam/findbugs-filter.xml
+++ b/sdks/java/build-tools/src/main/resources/beam/findbugs-filter.xml
@@ -74,6 +74,16 @@
   </Match>
 
   <Match>
+    <Class name="org.apache.beam.sdk.coders.SerializableCoder"/>
+    <Field name="typeDescriptor"/>
+    <Bug pattern="SE_TRANSIENT_FIELD_NOT_RESTORED"/>
+    <!--
+    the field is used only in getEncodedTypeDescriptor, where it is restored if it is not present due to
+    serialization
+    -->
+  </Match>
+
+  <Match>
     <Class name="org.apache.beam.sdk.io.jms.JmsRecord"/>
     <Field name="jmsDestination"/>
     <Bug pattern="SE_BAD_FIELD"/>

http://git-wip-us.apache.org/repos/asf/beam/blob/c39c9aec/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/SerializableCoder.java
----------------------------------------------------------------------
diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/SerializableCoder.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/SerializableCoder.java
index 9aa8493..6691876 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/SerializableCoder.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/SerializableCoder.java
@@ -107,7 +107,7 @@ public class SerializableCoder<T extends Serializable> extends CustomCoder<T> {
   }
 
   private final Class<T> type;
-  private final TypeDescriptor<T> typeDescriptor;
+  private transient TypeDescriptor<T> typeDescriptor;
 
   protected SerializableCoder(Class<T> type, TypeDescriptor<T> typeDescriptor) {
     this.type = type;
@@ -166,6 +166,9 @@ public class SerializableCoder<T extends Serializable> extends CustomCoder<T> {
 
   @Override
   public TypeDescriptor<T> getEncodedTypeDescriptor() {
+    if (typeDescriptor == null) {
+      typeDescriptor = TypeDescriptor.of(type);
+    }
     return typeDescriptor;
   }
 

http://git-wip-us.apache.org/repos/asf/beam/blob/c39c9aec/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/SerializableCoderTest.java
----------------------------------------------------------------------
diff --git a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/SerializableCoderTest.java b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/SerializableCoderTest.java
index adb6652..dd4f6ca 100644
--- a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/SerializableCoderTest.java
+++ b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/SerializableCoderTest.java
@@ -125,12 +125,18 @@ public class SerializableCoderTest implements Serializable {
     assertEquals(coder.getRecordType(), MyRecord.class);
     CoderProperties.coderSerializable(coder);
 
-
     SerializableCoder<?> decoded = SerializableUtils.clone(coder);
     assertThat(decoded.getRecordType(), Matchers.<Object>equalTo(MyRecord.class));
   }
 
   @Test
+  public <T extends Serializable> void testSerializableCoderIsSerializableWithGenericTypeToken()
+  throws Exception {
+    SerializableCoder<T> coder = SerializableCoder.of(new TypeDescriptor<T>() {});
+    CoderProperties.coderSerializable(coder);
+  }
+
+  @Test
   public void testNullEquals() {
     SerializableCoder<MyRecord> coder = SerializableCoder.of(MyRecord.class);
     Assert.assertFalse(coder.equals(null));