You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by fh...@apache.org on 2015/05/07 11:59:30 UTC
flink git commit: [FLINK-1978] Fix POJO deserialization for reuse
objects with NULL fields
Repository: flink
Updated Branches:
refs/heads/master faac20315 -> 0078c44e5
[FLINK-1978] Fix POJO deserialization for reuse objects with NULL fields
This closes #655
Project: http://git-wip-us.apache.org/repos/asf/flink/repo
Commit: http://git-wip-us.apache.org/repos/asf/flink/commit/0078c44e
Tree: http://git-wip-us.apache.org/repos/asf/flink/tree/0078c44e
Diff: http://git-wip-us.apache.org/repos/asf/flink/diff/0078c44e
Branch: refs/heads/master
Commit: 0078c44e59a368f5564ef6a151aea2f351a2e2c8
Parents: faac203
Author: Fabian Hueske <fh...@apache.org>
Authored: Wed May 6 17:47:59 2015 +0200
Committer: Fabian Hueske <fh...@apache.org>
Committed: Thu May 7 11:44:34 2015 +0200
----------------------------------------------------------------------
.../java/typeutils/runtime/PojoSerializer.java | 19 +++++++++++++++++--
.../typeutils/runtime/PojoSerializerTest.java | 15 ++++++++++-----
2 files changed, 27 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flink/blob/0078c44e/flink-java/src/main/java/org/apache/flink/api/java/typeutils/runtime/PojoSerializer.java
----------------------------------------------------------------------
diff --git a/flink-java/src/main/java/org/apache/flink/api/java/typeutils/runtime/PojoSerializer.java b/flink-java/src/main/java/org/apache/flink/api/java/typeutils/runtime/PojoSerializer.java
index b81ab67..c61ad8d 100644
--- a/flink-java/src/main/java/org/apache/flink/api/java/typeutils/runtime/PojoSerializer.java
+++ b/flink-java/src/main/java/org/apache/flink/api/java/typeutils/runtime/PojoSerializer.java
@@ -293,7 +293,14 @@ public final class PojoSerializer<T> extends TypeSerializer<T> {
for (int i = 0; i < numFields; i++) {
Object value = fields[i].get(from);
if (value != null) {
- Object copy = fieldSerializers[i].copy(fields[i].get(from), fields[i].get(reuse));
+ Object reuseValue = fields[i].get(reuse);
+ Object copy;
+ if(reuseValue != null) {
+ copy = fieldSerializers[i].copy(value, reuseValue);
+ }
+ else {
+ copy = fieldSerializers[i].copy(value);
+ }
fields[i].set(reuse, copy);
}
else {
@@ -484,7 +491,15 @@ public final class PojoSerializer<T> extends TypeSerializer<T> {
if (isNull) {
fields[i].set(reuse, null);
} else {
- Object field = fieldSerializers[i].deserialize(fields[i].get(reuse), source);
+ Object field;
+
+ Object reuseField = fields[i].get(reuse);
+ if(reuseField != null) {
+ field = fieldSerializers[i].deserialize(reuseField, source);
+ }
+ else {
+ field = fieldSerializers[i].deserialize(source);
+ }
fields[i].set(reuse, field);
}
http://git-wip-us.apache.org/repos/asf/flink/blob/0078c44e/flink-java/src/test/java/org/apache/flink/api/java/typeutils/runtime/PojoSerializerTest.java
----------------------------------------------------------------------
diff --git a/flink-java/src/test/java/org/apache/flink/api/java/typeutils/runtime/PojoSerializerTest.java b/flink-java/src/test/java/org/apache/flink/api/java/typeutils/runtime/PojoSerializerTest.java
index 1fa7163..b1467b9 100644
--- a/flink-java/src/test/java/org/apache/flink/api/java/typeutils/runtime/PojoSerializerTest.java
+++ b/flink-java/src/test/java/org/apache/flink/api/java/typeutils/runtime/PojoSerializerTest.java
@@ -19,6 +19,7 @@
package org.apache.flink.api.java.typeutils.runtime;
import java.util.ArrayList;
+import java.util.Date;
import java.util.List;
import java.util.Random;
@@ -68,11 +69,13 @@ public class PojoSerializerTest extends SerializerTestBase<PojoSerializerTest.Te
Random rnd = new Random(874597969123412341L);
return new TestUserClass[]{
- new TestUserClass(rnd.nextInt(), "foo", rnd.nextDouble(), new int[]{1, 2, 3},
+ new TestUserClass(rnd.nextInt(), "foo", rnd.nextDouble(), new int[]{1, 2, 3}, new Date(),
new NestedTestUserClass(rnd.nextInt(), "foo@boo", rnd.nextDouble(), new int[]{10, 11, 12})),
- new TestUserClass(rnd.nextInt(), "bar", rnd.nextDouble(), new int[]{4, 5, 6},
+ new TestUserClass(rnd.nextInt(), "bar", rnd.nextDouble(), new int[]{4, 5, 6}, null,
new NestedTestUserClass(rnd.nextInt(), "bar@bas", rnd.nextDouble(), new int[]{20, 21, 22})),
- new TestUserClass(rnd.nextInt(), null, rnd.nextDouble(), null, null)
+ new TestUserClass(rnd.nextInt(), null, rnd.nextDouble(), null, null, null),
+ new TestUserClass(rnd.nextInt(), "bar", rnd.nextDouble(), new int[]{4, 5, 6}, new Date(),
+ new NestedTestUserClass(rnd.nextInt(), "bar@bas", rnd.nextDouble(), new int[]{20, 21, 22}))
};
}
@@ -83,17 +86,19 @@ public class PojoSerializerTest extends SerializerTestBase<PojoSerializerTest.Te
public String dumm2;
public double dumm3;
public int[] dumm4;
+ public Date dumm5;
public NestedTestUserClass nestedClass;
public TestUserClass() {
}
- public TestUserClass(int dumm1, String dumm2, double dumm3, int[] dumm4, NestedTestUserClass nestedClass) {
+ public TestUserClass(int dumm1, String dumm2, double dumm3, int[] dumm4, Date dumm5, NestedTestUserClass nestedClass) {
this.dumm1 = dumm1;
this.dumm2 = dumm2;
this.dumm3 = dumm3;
this.dumm4 = dumm4;
+ this.dumm5 = dumm5;
this.nestedClass = nestedClass;
}
@@ -202,7 +207,7 @@ public class PojoSerializerTest extends SerializerTestBase<PojoSerializerTest.Te
fields[0] = result.get(0).getPosition();
TypeComparator<TestUserClass> pojoComp = pType.createComparator( fields, new boolean[]{true}, 0, new ExecutionConfig());
- TestUserClass pojoTestRecord = new TestUserClass(0, "abc", 3d, new int[] {1,2,3}, new NestedTestUserClass(1, "haha", 4d, new int[] {5,4,3}));
+ TestUserClass pojoTestRecord = new TestUserClass(0, "abc", 3d, new int[] {1,2,3}, new Date(), new NestedTestUserClass(1, "haha", 4d, new int[] {5,4,3}));
int pHash = pojoComp.hash(pojoTestRecord);
Tuple1<String> tupleTest = new Tuple1<String>("haha");