[ 
https://issues.apache.org/jira/browse/HDDS-2325?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Marton Elek resolved HDDS-2325.
-------------------------------
    Fix Version/s: 0.5.0
       Resolution: Fixed

> BenchMarkDatanodeDispatcher genesis test is failing with NPE
> ------------------------------------------------------------
>
>                 Key: HDDS-2325
>                 URL: https://issues.apache.org/jira/browse/HDDS-2325
>             Project: Hadoop Distributed Data Store
>          Issue Type: New Feature
>            Reporter: Marton Elek
>            Assignee: Marton Elek
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 0.5.0
>
>          Time Spent: 20m
>  Remaining Estimate: 0h
>
> ## What changes were proposed in this pull request?
> Genesis is a microbenchmark tool for Ozone based on JMH 
> ([https://openjdk.java.net/projects/code-tools/jmh/).]
>  
> Due to the recent Datanode changes the BenchMarkDatanodeDispatcher is failing 
> with NPE:
>  
> {code:java}
> java.lang.NullPointerException
>       at 
> org.apache.hadoop.ozone.container.common.interfaces.Handler.<init>(Handler.java:69)
>       at 
> org.apache.hadoop.ozone.container.keyvalue.KeyValueHandler.<init>(KeyValueHandler.java:114)
>       at 
> org.apache.hadoop.ozone.container.common.interfaces.Handler.getHandlerForContainerType(Handler.java:78)
>       at 
> org.apache.hadoop.ozone.genesis.BenchMarkDatanodeDispatcher.initialize(BenchMarkDatanodeDispatcher.java:115)
>       at 
> org.apache.hadoop.ozone.genesis.generated.BenchMarkDatanodeDispatcher_createContainer_jmhTest._jmh_tryInit_f_benchmarkdatanodedispatcher0_G(BenchMarkDatanodeDispatcher_createContainer_jmhTest.java:438)
>       at 
> org.apache.hadoop.ozone.genesis.generated.BenchMarkDatanodeDispatcher_createContainer_jmhTest.createContainer_Throughput(BenchMarkDatanodeDispatcher_createContainer_jmhTest.java:71)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>       at java.lang.reflect.Method.invoke(Method.java:498)
>       at 
> org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:453)
>       at 
> org.openjdk.jmh.runner.BenchmarkHandler$BenchmarkTask.call(BenchmarkHandler.java:437)
>       at java.util.concurrent.FutureTask.run(FutureTask.java:266)
>       at 
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
>       at java.util.concurrent.FutureTask.run(FutureTask.java:266)
>       at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
>       at java.lang.Thread.run(Thread.java:748)
>  {code}
> And this is the just the biggest problem there are a few other problems. I 
> propose the following fixes:
> *fix 1*: NPE is thrown because the 'context' object is required by 
> KeyValueHandler/Handler classes.
> In fact the context is not required, we need two functionalities/info from 
> the context: the ability to send icr (IncrementalContainerReport) and the ID 
> of the datanode.
> Law of Demeter principle suggests to have only the minimum required 
> information from other classes.
> For example instead of having context but using only 
> context.getParent().getDatanodeDetails().getUuidString() we can have only the 
> UUID string which makes more easy to test (unit and benchmark) the 
> Handler/KeyValueHandler.
> This is the biggest (but still small change) in this patch: I started to use 
> the datanodeId and an icrSender instead of having the full context.
> *fix 2,3:* There were a few other problems. The scmId was missing if the 
> writeChunk was called from Benchmark and and the Checksum was also missing.
> *fix 4:* I also had a few other problems: very huge containers are used 
> (default 5G) and as the benchmark starts with creating 100 containers it 
> requires 500G space by default. I adjusted the container size to make it 
> possible to run on local machine.
>  
> ## How this patch can be tested?
> {code:java}
> ./ozone genesis -benchmark=BenchMarkDatanodeDispatcher.writeChunk{code}
>  



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

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

Reply via email to