[ 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)