You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by su...@apache.org on 2016/08/16 18:37:45 UTC
incubator-atlas git commit: ATLAS-1121 NPE while submitting topology
in StormHook (ayubkhan via sumasai)
Repository: incubator-atlas
Updated Branches:
refs/heads/master ab95c1a7b -> 6fddccd6a
ATLAS-1121 NPE while submitting topology in StormHook (ayubkhan via sumasai)
Project: http://git-wip-us.apache.org/repos/asf/incubator-atlas/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-atlas/commit/6fddccd6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-atlas/tree/6fddccd6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-atlas/diff/6fddccd6
Branch: refs/heads/master
Commit: 6fddccd6a28d7cf194926c3d44debeb1b49cd434
Parents: ab95c1a
Author: Suma Shivaprasad <su...@gmail.com>
Authored: Tue Aug 16 11:36:45 2016 -0700
Committer: Suma Shivaprasad <su...@gmail.com>
Committed: Tue Aug 16 11:37:27 2016 -0700
----------------------------------------------------------------------
.../atlas/storm/hook/StormTopologyUtil.java | 124 ++++++++++---------
release-log.txt | 1 +
2 files changed, 66 insertions(+), 59 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6fddccd6/addons/storm-bridge/src/main/java/org/apache/atlas/storm/hook/StormTopologyUtil.java
----------------------------------------------------------------------
diff --git a/addons/storm-bridge/src/main/java/org/apache/atlas/storm/hook/StormTopologyUtil.java b/addons/storm-bridge/src/main/java/org/apache/atlas/storm/hook/StormTopologyUtil.java
index dc2ae57..edd95ba 100644
--- a/addons/storm-bridge/src/main/java/org/apache/atlas/storm/hook/StormTopologyUtil.java
+++ b/addons/storm-bridge/src/main/java/org/apache/atlas/storm/hook/StormTopologyUtil.java
@@ -36,6 +36,7 @@ import java.util.Set;
* A storm topology utility class.
*/
public final class StormTopologyUtil {
+ public static final Logger LOG = org.slf4j.LoggerFactory.getLogger(StormTopologyUtil.class);
private StormTopologyUtil() {
}
@@ -136,74 +137,79 @@ public final class StormTopologyUtil {
Map<String, String> output = new HashMap<>();
- if (objectsToSkip.add(instance)) {
- Class clazz = instance.getClass();
- for (Class<?> c = clazz; c != null; c = c.getSuperclass()) {
- Field[] fields = c.getDeclaredFields();
- for (Field field : fields) {
- if (java.lang.reflect.Modifier.isStatic(field.getModifiers())) {
- continue;
- }
-
- String key;
- if (prependClassName) {
- key = String.format("%s.%s", clazz.getSimpleName(), field.getName());
- } else {
- key = field.getName();
- }
+ try {
+ if (objectsToSkip.add(instance)) {
+ Class clazz = instance.getClass();
+ for (Class<?> c = clazz; c != null; c = c.getSuperclass()) {
+ Field[] fields = c.getDeclaredFields();
+ for (Field field : fields) {
+ if (java.lang.reflect.Modifier.isStatic(field.getModifiers())) {
+ continue;
+ }
- boolean accessible = field.isAccessible();
- if (!accessible) {
- field.setAccessible(true);
- }
- Object fieldVal = field.get(instance);
- if (fieldVal == null) {
- continue;
- } else if (fieldVal.getClass().isPrimitive() ||
- isWrapperType(fieldVal.getClass())) {
- if (toString(fieldVal, false).isEmpty()) continue;
- output.put(key, toString(fieldVal, false));
- } else if (isMapType(fieldVal.getClass())) {
- //TODO: check if it makes more sense to just stick to json
- // like structure instead of a flatten output.
- Map map = (Map) fieldVal;
- for (Object entry : map.entrySet()) {
- Object mapKey = ((Map.Entry) entry).getKey();
- Object mapVal = ((Map.Entry) entry).getValue();
-
- String keyStr = getString(mapKey, false, objectsToSkip);
- String valStr = getString(mapVal, false, objectsToSkip);
- if ((valStr == null) || (valStr.isEmpty())) {
- continue;
- } else {
- output.put(String.format("%s.%s", key, keyStr), valStr);
- }
+ String key;
+ if (prependClassName) {
+ key = String.format("%s.%s", clazz.getSimpleName(), field.getName());
+ } else {
+ key = field.getName();
}
- } else if (isCollectionType(fieldVal.getClass())) {
- //TODO check if it makes more sense to just stick to
- // json like structure instead of a flatten output.
- Collection collection = (Collection) fieldVal;
- if (collection.size() == 0) continue;
- String outStr = "";
- for (Object o : collection) {
- outStr += getString(o, false, objectsToSkip) + ",";
+
+ boolean accessible = field.isAccessible();
+ if (!accessible) {
+ field.setAccessible(true);
}
- if (outStr.length() > 0) {
- outStr = outStr.substring(0, outStr.length() - 1);
+ Object fieldVal = field.get(instance);
+ if (fieldVal == null) {
+ continue;
+ } else if (fieldVal.getClass().isPrimitive() ||
+ isWrapperType(fieldVal.getClass())) {
+ if (toString(fieldVal, false).isEmpty()) continue;
+ output.put(key, toString(fieldVal, false));
+ } else if (isMapType(fieldVal.getClass())) {
+ //TODO: check if it makes more sense to just stick to json
+ // like structure instead of a flatten output.
+ Map map = (Map) fieldVal;
+ for (Object entry : map.entrySet()) {
+ Object mapKey = ((Map.Entry) entry).getKey();
+ Object mapVal = ((Map.Entry) entry).getValue();
+
+ String keyStr = getString(mapKey, false, objectsToSkip);
+ String valStr = getString(mapVal, false, objectsToSkip);
+ if ((valStr == null) || (valStr.isEmpty())) {
+ continue;
+ } else {
+ output.put(String.format("%s.%s", key, keyStr), valStr);
+ }
+ }
+ } else if (isCollectionType(fieldVal.getClass())) {
+ //TODO check if it makes more sense to just stick to
+ // json like structure instead of a flatten output.
+ Collection collection = (Collection) fieldVal;
+ if (collection.size() == 0) continue;
+ String outStr = "";
+ for (Object o : collection) {
+ outStr += getString(o, false, objectsToSkip) + ",";
+ }
+ if (outStr.length() > 0) {
+ outStr = outStr.substring(0, outStr.length() - 1);
+ }
+ output.put(key, String.format("%s", outStr));
+ } else {
+ Map<String, String> nestedFieldValues = getFieldValues(fieldVal, false, objectsToSkip);
+ for (Map.Entry<String, String> entry : nestedFieldValues.entrySet()) {
+ output.put(String.format("%s.%s", key, entry.getKey()), entry.getValue());
+ }
}
- output.put(key, String.format("%s", outStr));
- } else {
- Map<String, String> nestedFieldValues = getFieldValues(fieldVal, false, objectsToSkip);
- for (Map.Entry<String, String> entry : nestedFieldValues.entrySet()) {
- output.put(String.format("%s.%s", key, entry.getKey()), entry.getValue());
+ if (!accessible) {
+ field.setAccessible(false);
}
}
- if (!accessible) {
- field.setAccessible(false);
- }
}
}
}
+ catch (Exception e){
+ LOG.warn("Exception while constructing topology", e);
+ }
return output;
}
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6fddccd6/release-log.txt
----------------------------------------------------------------------
diff --git a/release-log.txt b/release-log.txt
index ee54fdd..13f00e3 100644
--- a/release-log.txt
+++ b/release-log.txt
@@ -6,6 +6,7 @@ INCOMPATIBLE CHANGES:
ATLAS-1060 Add composite indexes for exact match performance improvements for all attributes (sumasai via shwethags)
ALL CHANGES:
+ATLAS-1121 NPE while submitting topology in StormHook (ayubkhan via sumasai)
ATLAS-1119 Add retries for edge label creation (sumasai via shwethags)
ATLAS-1111 Data loss is observed when atlas is restarted while hive_table metadata ingestion into kafka topic is in-progress(shwethags via sumasai)
ATLAS-1115 Show Tag / Taxonomy Listing in sorted order (Kalyanikashikar via sumasai)