You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by gr...@apache.org on 2017/11/28 21:52:30 UTC
[2/2] flink git commit: [FLINK-6864] [core] Fix confusing "invalid
POJO type" messages from TypeExtractor
[FLINK-6864] [core] Fix confusing "invalid POJO type" messages from TypeExtractor
This closes #4574
Project: http://git-wip-us.apache.org/repos/asf/flink/repo
Commit: http://git-wip-us.apache.org/repos/asf/flink/commit/450b4241
Tree: http://git-wip-us.apache.org/repos/asf/flink/tree/450b4241
Diff: http://git-wip-us.apache.org/repos/asf/flink/diff/450b4241
Branch: refs/heads/master
Commit: 450b4241404055ed6638e354be421b83380827c5
Parents: 53f2c1c
Author: zjureel <zj...@gmail.com>
Authored: Wed Aug 23 10:30:31 2017 +0800
Committer: Greg Hogan <co...@greghogan.com>
Committed: Tue Nov 28 15:59:51 2017 -0500
----------------------------------------------------------------------
docs/dev/types_serialization.md | 3 +++
.../flink/api/java/typeutils/TypeExtractor.java | 24 +++++++++++++++-----
2 files changed, 21 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flink/blob/450b4241/docs/dev/types_serialization.md
----------------------------------------------------------------------
diff --git a/docs/dev/types_serialization.md b/docs/dev/types_serialization.md
index 1f0c466..d865d8e 100644
--- a/docs/dev/types_serialization.md
+++ b/docs/dev/types_serialization.md
@@ -115,6 +115,9 @@ conditions are fulfilled:
or have a public getter- and a setter- method that follows the Java beans
naming conventions for getters and setters.
+Note that when a user-defined data type can't be recognized as a POJO type, it must be processed as GenericType and
+serialized with Kryo.
+
#### Creating a TypeInformation or TypeSerializer
http://git-wip-us.apache.org/repos/asf/flink/blob/450b4241/flink-core/src/main/java/org/apache/flink/api/java/typeutils/TypeExtractor.java
----------------------------------------------------------------------
diff --git a/flink-core/src/main/java/org/apache/flink/api/java/typeutils/TypeExtractor.java b/flink-core/src/main/java/org/apache/flink/api/java/typeutils/TypeExtractor.java
index 8ea2e1a..4767838 100644
--- a/flink-core/src/main/java/org/apache/flink/api/java/typeutils/TypeExtractor.java
+++ b/flink-core/src/main/java/org/apache/flink/api/java/typeutils/TypeExtractor.java
@@ -1885,7 +1885,9 @@ public class TypeExtractor {
ParameterizedType parameterizedType, TypeInformation<IN1> in1Type, TypeInformation<IN2> in2Type) {
if (!Modifier.isPublic(clazz.getModifiers())) {
- LOG.info("Class " + clazz.getName() + " is not public, cannot treat it as a POJO type. Will be handled as GenericType");
+ LOG.info("Class " + clazz.getName() + " is not public so it cannot be used as a POJO type " +
+ "and must be processed as GenericType. Please read the Flink documentation " +
+ "on \"Data Types & Serialization\" for details of the effect on performance.");
return new GenericTypeInfo<OUT>(clazz);
}
@@ -1900,7 +1902,9 @@ public class TypeExtractor {
List<Field> fields = getAllDeclaredFields(clazz, false);
if (fields.size() == 0) {
- LOG.info("No fields detected for " + clazz + ". Cannot be used as a PojoType. Will be handled as GenericType");
+ LOG.info("No fields were detected for " + clazz + " so it cannot be used as a POJO type " +
+ "and must be processed as GenericType. Please read the Flink documentation " +
+ "on \"Data Types & Serialization\" for details of the effect on performance.");
return new GenericTypeInfo<OUT>(clazz);
}
@@ -1908,7 +1912,9 @@ public class TypeExtractor {
for (Field field : fields) {
Type fieldType = field.getGenericType();
if(!isValidPojoField(field, clazz, typeHierarchy)) {
- LOG.info(clazz + " is not a valid POJO type because not all fields are valid POJO fields.");
+ LOG.info("Class " + clazz + " cannot be used as a POJO type because not all fields are valid POJO fields, " +
+ "and must be processed as GenericType. Please read the Flink documentation " +
+ "on \"Data Types & Serialization\" for details of the effect on performance.");
return null;
}
try {
@@ -1934,7 +1940,9 @@ public class TypeExtractor {
List<Method> methods = getAllDeclaredMethods(clazz);
for (Method method : methods) {
if (method.getName().equals("readObject") || method.getName().equals("writeObject")) {
- LOG.info(clazz+" contains custom serialization methods we do not call.");
+ LOG.info("Class " + clazz + " contains custom serialization methods we do not call, so it cannot be used as a POJO type " +
+ "and must be processed as GenericType. Please read the Flink documentation " +
+ "on \"Data Types & Serialization\" for details of the effect on performance.");
return null;
}
}
@@ -1949,12 +1957,16 @@ public class TypeExtractor {
LOG.info(clazz + " is abstract or an interface, having a concrete " +
"type can increase performance.");
} else {
- LOG.info(clazz + " must have a default constructor to be used as a POJO.");
+ LOG.info(clazz + " is missing a default constructor so it cannot be used as a POJO type " +
+ "and must be processed as GenericType. Please read the Flink documentation " +
+ "on \"Data Types & Serialization\" for details of the effect on performance.");
return null;
}
}
if(defaultConstructor != null && !Modifier.isPublic(defaultConstructor.getModifiers())) {
- LOG.info("The default constructor of " + clazz + " should be Public to be used as a POJO.");
+ LOG.info("The default constructor of " + clazz + " is not Public so it cannot be used as a POJO type " +
+ "and must be processed as GenericType. Please read the Flink documentation " +
+ "on \"Data Types & Serialization\" for details of the effect on performance.");
return null;
}