You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by xu...@apache.org on 2015/07/31 02:43:25 UTC

[25/43] hive git commit: HIVE-11288: Avro SerDe InstanceCache returns incorrect schema (Greg via Xuefu)

HIVE-11288: Avro SerDe InstanceCache returns incorrect schema (Greg via Xuefu)


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

Branch: refs/heads/spark
Commit: d2ee3543474b15d04bb3be3cdf0ad987338418a1
Parents: 65396f0
Author: xzhang <xz...@xzdt>
Authored: Tue Jul 28 11:39:37 2015 -0700
Committer: xzhang <xz...@xzdt>
Committed: Tue Jul 28 11:40:38 2015 -0700

----------------------------------------------------------------------
 .../hadoop/hive/serde2/avro/InstanceCache.java  |  9 +++--
 .../hive/serde2/avro/TestInstanceCache.java     | 40 +++++++++++++-------
 2 files changed, 32 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/d2ee3543/serde/src/java/org/apache/hadoop/hive/serde2/avro/InstanceCache.java
----------------------------------------------------------------------
diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/avro/InstanceCache.java b/serde/src/java/org/apache/hadoop/hive/serde2/avro/InstanceCache.java
index 0b10d99..c7289cb 100644
--- a/serde/src/java/org/apache/hadoop/hive/serde2/avro/InstanceCache.java
+++ b/serde/src/java/org/apache/hadoop/hive/serde2/avro/InstanceCache.java
@@ -21,6 +21,7 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 import java.util.HashMap;
+import java.util.Map;
 import java.util.Set;
 
 /**
@@ -33,7 +34,7 @@ import java.util.Set;
  */
 public abstract class InstanceCache<SeedObject, Instance> {
   private static final Log LOG = LogFactory.getLog(InstanceCache.class);
-  HashMap<Integer, Instance> cache = new HashMap<Integer, Instance>();
+  Map<SeedObject, Instance> cache = new HashMap<SeedObject, Instance>();
   
   public InstanceCache() {}
 
@@ -53,15 +54,15 @@ public abstract class InstanceCache<SeedObject, Instance> {
       Set<SeedObject> seenSchemas) throws AvroSerdeException {
     if(LOG.isDebugEnabled()) LOG.debug("Checking for hv: " + hv.toString());
 
-    if(cache.containsKey(hv.hashCode())) {
+    if(cache.containsKey(hv)) {
       if(LOG.isDebugEnabled()) LOG.debug("Returning cache result.");
-      return cache.get(hv.hashCode());
+      return cache.get(hv);
     }
 
     if(LOG.isDebugEnabled()) LOG.debug("Creating new instance and storing in cache");
 
     Instance instance = makeInstance(hv, seenSchemas);
-    cache.put(hv.hashCode(), instance);
+    cache.put(hv, instance);
     return instance;
   }
 

http://git-wip-us.apache.org/repos/asf/hive/blob/d2ee3543/serde/src/test/org/apache/hadoop/hive/serde2/avro/TestInstanceCache.java
----------------------------------------------------------------------
diff --git a/serde/src/test/org/apache/hadoop/hive/serde2/avro/TestInstanceCache.java b/serde/src/test/org/apache/hadoop/hive/serde2/avro/TestInstanceCache.java
index 814e8e4..cb7c6ed 100644
--- a/serde/src/test/org/apache/hadoop/hive/serde2/avro/TestInstanceCache.java
+++ b/serde/src/test/org/apache/hadoop/hive/serde2/avro/TestInstanceCache.java
@@ -24,9 +24,23 @@ import static org.junit.Assert.assertSame;
 
 public class TestInstanceCache {
   private static class Foo {
+
+    private int value = 42;
+
+    @Override
+    public boolean equals(Object o) {
+      if (this == o) return true;
+      if (o == null || getClass() != o.getClass()) return false;
+
+      Foo foo = (Foo) o;
+
+      return value == foo.value;
+
+    }
+
     @Override
     public int hashCode() {
-      return 42;
+      return value;
     }
   }
 
@@ -41,12 +55,12 @@ public class TestInstanceCache {
   @Test
   public void instanceCachesOnlyCreateOneInstance() throws AvroSerdeException {
     InstanceCache<Foo, Wrapper<Foo>> ic = new InstanceCache<Foo, Wrapper<Foo>>() {
-                                           @Override
-                                           protected Wrapper makeInstance(Foo hv,
-                                               Set<Foo> seenSchemas) {
-                                             return new Wrapper(hv);
-                                           }
-                                          };
+      @Override
+      protected Wrapper makeInstance(Foo hv,
+                                     Set<Foo> seenSchemas) {
+        return new Wrapper(hv);
+      }
+    };
     Foo f1 = new Foo();
 
     Wrapper fc = ic.retrieve(f1, null);
@@ -62,12 +76,12 @@ public class TestInstanceCache {
   @Test
   public void instanceCacheReturnsCorrectInstances() throws AvroSerdeException {
     InstanceCache<String, Wrapper<String>> ic = new InstanceCache<String, Wrapper<String>>() {
-                                   @Override
-                                   protected Wrapper<String> makeInstance(
-                                       String hv, Set<String> seenSchemas) {
-                                     return new Wrapper<String>(hv);
-                                   }
-                                 };
+      @Override
+      protected Wrapper<String> makeInstance(
+          String hv, Set<String> seenSchemas) {
+        return new Wrapper<String>(hv);
+      }
+    };
 
     Wrapper<String> one = ic.retrieve("one", null);
     Wrapper<String> two = ic.retrieve("two", null);