[ 
https://issues.apache.org/jira/browse/HIVE-22410?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16970494#comment-16970494
 ] 

Sam An commented on HIVE-22410:
-------------------------------

Finally got a change to review the patch. Here are my comments. 
 * We need unit test
 * The logic will add the missing estimator. However, it might not be 
addressing the real issue here. The estimator will be null only if the if 
statement above it

if (lastClass != elementClass) {

...

}

is false, which means lastClass == elementClass. When that is the case, 
lastEstimator should not have been null. But in this case, it is null, and that 
in my opinion, points to some assumption in the code is wrong, and it is not 
just in array estimation, but also in estimating Collection, Map sizes. This 
highlights the importance of having the reproduction scenario and unit test, 
otherwise, we don't know what we are actually fixing here. 

> CachedStore Prewarm Failure NPE
> -------------------------------
>
>                 Key: HIVE-22410
>                 URL: https://issues.apache.org/jira/browse/HIVE-22410
>             Project: Hive
>          Issue Type: Bug
>          Components: Standalone Metastore
>    Affects Versions: 3.1.2, 2.3.7
>         Environment: JDK 1.7.0_40
>            Reporter: fanshilun
>            Assignee: fanshilun
>            Priority: Major
>              Labels: cachedstore
>             Fix For: 2.3.7, 3.1.3
>
>         Attachments: HIVE-22410.1.patch, image-2019-11-01-11-14-42-114.png
>
>
> java.lang.NullPointerException
> at 
> org.apache.hadoop.hive.metastore.utils.IncrementalObjectSizeEstimator$ObjectEstimator.estimateArrayElements(IncrementalObjectSizeEstimator.java:501)
>  ~[hive-metastore-2.3.5.jar:2.3.5]
> at 
> org.apache.hadoop.hive.metastore.utils.IncrementalObjectSizeEstimator$ObjectEstimator.estimate(IncrementalObjectSizeEstimator.java:443)
>  ~[hive-metastore-2.3.5.jar:2.3.5]
> at 
> org.apache.hadoop.hive.metastore.utils.IncrementalObjectSizeEstimator$ObjectEstimator.estimate(IncrementalObjectSizeEstimator.java:433)
>  ~[hive-metastore-2.3.5.jar:2.3.5]
> at 
> org.apache.hadoop.hive.metastore.utils.IncrementalObjectSizeEstimator$ObjectEstimator.estimate(IncrementalObjectSizeEstimator.java:369)
>  ~[hive-metastore-2.3.5.jar:2.3.5]
> at 
> org.apache.hadoop.hive.metastore.cached.SharedCache.populateTableInCache(SharedCache.java:1028)
>  ~[hive-metastore-2.3.5.jar:2.3.5]
> at 
> org.apache.hadoop.hive.metastore.cached.CachedStore.prewarm(CachedStore.java:314)
>  ~[hive-metastore-2.3.5.jar:2.3.5]
> at 
> org.apache.hadoop.hive.metastore.cached.CachedStore$CacheUpdateMasterWork.run(CachedStore.java:492)
>  [hive-metastore-2.3.5.jar:2.3.5]
> at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
> [?:1.7.0_40]
> at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304) 
> [?:1.7.0_40]
> at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178)
>  [?:1.7.0_40]
> at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
>  [?:1.7.0_40]
> at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>  [?:1.7.0_40]
> at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>  [?:1.7.0_40]
> at java.lang.Thread.run(Thread.java:724) [?:1.7.0_40]
> *reason:*
> Methods estimateArrayElements throw NPE
> I found that the last class does not appear in the parent (HashMap<Class<?>, 
> Object Estimator> ), and the parent does not contain the information of the 
> ConcurrentHashMap Class.
> The solution is to initialize the class information before using it.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to