YARN-6654. RollingLevelDBTimelineStore backwards incompatible after fst 
upgrade. Contributed by Jonathan Eagles


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

Branch: refs/heads/HDFS-7240
Commit: 5f1ee72b0ebf0330417b7c0115083bc851923be4
Parents: 945c095
Author: Jason Lowe <jl...@yahoo-inc.com>
Authored: Thu Jul 13 17:27:40 2017 -0500
Committer: Jason Lowe <jl...@yahoo-inc.com>
Committed: Thu Jul 13 17:27:40 2017 -0500

----------------------------------------------------------------------
 .../timeline/RollingLevelDBTimelineStore.java   | 50 ++++++++++++++++----
 1 file changed, 41 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hadoop/blob/5f1ee72b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/timeline/RollingLevelDBTimelineStore.java
----------------------------------------------------------------------
diff --git 
a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/timeline/RollingLevelDBTimelineStore.java
 
b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/timeline/RollingLevelDBTimelineStore.java
index d139346..00f6630 100644
--- 
a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/timeline/RollingLevelDBTimelineStore.java
+++ 
b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/timeline/RollingLevelDBTimelineStore.java
@@ -28,6 +28,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.EnumSet;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -74,6 +75,7 @@ import org.iq80.leveldb.Options;
 import org.iq80.leveldb.ReadOptions;
 import org.iq80.leveldb.WriteBatch;
 import org.nustaq.serialization.FSTConfiguration;
+import org.nustaq.serialization.FSTClazzNameRegistry;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 
@@ -170,9 +172,22 @@ public class RollingLevelDBTimelineStore extends 
AbstractService implements
       .getLog(RollingLevelDBTimelineStore.class);
   private static FSTConfiguration fstConf =
       FSTConfiguration.createDefaultConfiguration();
+  // Fall back to 2.24 parsing if 2.50 parsing fails
+  private static FSTConfiguration fstConf224 =
+      FSTConfiguration.createDefaultConfiguration();
+  // Static class code for 2.24
+  private static final int LINKED_HASH_MAP_224_CODE = 83;
 
   static {
     fstConf.setShareReferences(false);
+    fstConf224.setShareReferences(false);
+    // YARN-6654 unable to find class for code 83 (LinkedHashMap)
+    // The linked hash map was changed between 2.24 and 2.50 so that
+    // the static code for LinkedHashMap (83) was changed to a dynamic
+    // code.
+    FSTClazzNameRegistry registry = fstConf224.getClassRegistry();
+    registry.registerClass(
+        LinkedHashMap.class, LINKED_HASH_MAP_224_CODE, fstConf224);
   }
 
   @Private
@@ -339,7 +354,7 @@ public class RollingLevelDBTimelineStore extends 
AbstractService implements
       deletionThread.start();
     }
     super.serviceStart();
-   }
+  }
 
   @Override
   protected void serviceStop() throws Exception {
@@ -365,7 +380,7 @@ public class RollingLevelDBTimelineStore extends 
AbstractService implements
     private final long ttl;
     private final long ttlInterval;
 
-    public EntityDeletionThread(Configuration conf) {
+    EntityDeletionThread(Configuration conf) {
       ttl = conf.getLong(TIMELINE_SERVICE_TTL_MS,
           DEFAULT_TIMELINE_SERVICE_TTL_MS);
       ttlInterval = conf.getLong(
@@ -479,9 +494,15 @@ public class RollingLevelDBTimelineStore extends 
AbstractService implements
           try {
             o = fstConf.asObject(iterator.peekNext().getValue());
             entity.addOtherInfo(keyStr, o);
-          } catch (Exception e) {
-            LOG.warn("Error while decoding "
-                + entityId + ":otherInfo:" + keyStr, e);
+          } catch (Exception ignore) {
+            try {
+              // Fall back to 2.24 parser
+              o = fstConf224.asObject(iterator.peekNext().getValue());
+              entity.addOtherInfo(keyStr, o);
+            } catch (Exception e) {
+              LOG.warn("Error while decoding "
+                  + entityId + ":otherInfo:" + keyStr, e);
+            }
           }
         }
       } else if (key[prefixlen] == RELATED_ENTITIES_COLUMN[0]) {
@@ -1348,8 +1369,13 @@ public class RollingLevelDBTimelineStore extends 
AbstractService implements
       Object o = null;
       try {
         o = fstConf.asObject(value);
-      } catch (Exception e) {
-        LOG.warn("Error while decoding " + tstype, e);
+      } catch (Exception ignore) {
+        try {
+          // Fall back to 2.24 parser
+          o = fstConf224.asObject(value);
+        } catch (Exception e) {
+          LOG.warn("Error while decoding " + tstype, e);
+        }
       }
       if (o == null) {
         event.setEventInfo(null);
@@ -1378,8 +1404,14 @@ public class RollingLevelDBTimelineStore extends 
AbstractService implements
     try {
       value = fstConf.asObject(bytes);
       entity.addPrimaryFilter(name, value);
-    } catch (Exception e) {
-      LOG.warn("Error while decoding " + name, e);
+    } catch (Exception ignore) {
+      try {
+        // Fall back to 2.24 parser
+        value = fstConf224.asObject(bytes);
+        entity.addPrimaryFilter(name, value);
+      } catch (Exception e) {
+        LOG.warn("Error while decoding " + name, e);
+      }
     }
   }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org
For additional commands, e-mail: common-commits-h...@hadoop.apache.org

Reply via email to