[
https://issues.apache.org/jira/browse/RANGER-3386?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17406557#comment-17406557
]
Madhan Neethiraj commented on RANGER-3386:
------------------------------------------
[~caozhiqiang] - I think use of CollectionUtils.isEmpty() and
CollectionUtils.isNotEmpty() improves readability, especially when multiple
conditions are combined using '||' or '&&'. Implementation of these methods in
CollectionUtils seem straightforward, and these would likely be inlined by JVM.
{code:java}
public class CollectionUtils {
...
public static boolean isEmpty(Collection coll) {
return coll == null || coll.isEmpty();
}
public static boolean isNotEmpty(Collection coll) {
return !isEmpty(coll);
}
{code}
I strongly suggest to avoid massive update to replace use of
CollectionUtils.isEmpty()/CollectionUtils.isNotEmpty().
> apache CollectionUtils package reduce ranger agent performance and should be
> replaced
> -------------------------------------------------------------------------------------
>
> Key: RANGER-3386
> URL: https://issues.apache.org/jira/browse/RANGER-3386
> Project: Ranger
> Issue Type: Improvement
> Components: plugins
> Affects Versions: 2.0.1
> Reporter: caozhiqiang
> Assignee: caozhiqiang
> Priority: Major
> Attachments: CollectionUtils.png, RANGER-3386-branch-2.0.1.001.patch
>
>
> org.apache.commons.collections.CollectionUtils' performance is too poor and
> reduce the performance of ranger plugins, particularly with hdfs. There are
> too many places used CollectionUtils.isNotEmpty and CollectionUtils.isEmpty
> in agent component, so we should replace them.
> We can see many CollectionUtils call is take too much time in namenode
> benchmark's result.
> In this patch, I replace almost CollectionUtils functions in agents-common.
> After adding this patch, in creating file benchmark of hdfs, the performance
> can improve from creating *7000* files to *7600* files per second.
> By the way, I write a simple test code below. collection.isEmpty is almost
> take 0 milliseconds, but CollectionUtils.isNotEmpty take 5 milliseconds.
>
> {code:java}
> List<Integer> list = new ArrayList<Integer>();
> for(int i = 0; i<1000; i++)
> list.add(i);
> long startTime = System.currentTimeMillis();
> if(list != null && !list.isEmpty()){
> }
> long endTime = System.currentTimeMillis();
> long totalTime = endTime - startTime;
> System.out.println(totalTime);
> long startTime2 = System.currentTimeMillis();
> CollectionUtils.isNotEmpty(list);
> long endTime2 = System.currentTimeMillis();
> long totalTime2 = endTime2 - startTime2;
> System.out.println(totalTime2);
> {code}
>
> !CollectionUtils.png|width=680,height=324!
--
This message was sent by Atlassian Jira
(v8.3.4#803005)