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

Stefania commented on CASSANDRA-5220:
-------------------------------------

Attaching information on the Coverity defects reported against this patch. I 
propose to handle as follows:

* CID 1315416 - TokenRangeComparator should be serializable - ignore since we 
have several other comparators that are not serializable
* CID 1315412:   RESOURCE_LEAK in CompactionStrategyManager line 368 - false 
positive, even though the lists aren't closed, their iterators are closed or 
returned for future use, same problem was already present before 
* CID 1315410:  Possible NPE in MerkleTrees line 172 - this code is for testing 
only so I propose to convert possible NPE to AssertionError and add 
@VisibleForTesting
* CID 1315409:  Possible NPE in MerkleTrees line 130 - this code is for testing 
only so I propose to convert possible NPE to AssertionError and add 
@VisibleForTesting
* CID 1315407:  Possible NPE in MerkleTrees line 162 - I verified it cannot 
happen so I propose to convert possible NPE to AssertionError

Proposed patch on the [3.0 
branch|https://github.com/stef1927/cassandra/tree/5220-3.0] : 
[here|https://github.com/stef1927/cassandra/commit/aa419e331783e78c9aafe79eaeb0362e2338a6b6].

Here are the defects details:

{code}
** CID 1315416:  FindBugs: Bad practice  
(FB.SE_COMPARATOR_SHOULD_BE_SERIALIZABLE)
/src/java/org/apache/cassandra/utils/MerkleTrees.java: 423 in ()

________________________________________________________________________________________________________
*** CID 1315416:  FindBugs: Bad practice  
(FB.SE_COMPARATOR_SHOULD_BE_SERIALIZABLE)
/src/java/org/apache/cassandra/utils/MerkleTrees.java: 423 in ()
417                 }
418                 return size;
419             }
420
421         }
422
>>>     CID 1315416:  FindBugs: Bad practice  
>>> (FB.SE_COMPARATOR_SHOULD_BE_SERIALIZABLE)
>>>     org.apache.cassandra.utils.MerkleTrees$TokenRangeComparator implements 
>>> Comparator but not Serializable.
423         private static class TokenRangeComparator implements 
Comparator<Range<Token>>
424         {
425             @Override
426             public int compare(Range<Token> rt1, Range<Token> rt2)
427             {
428                 if (rt1.left.compareTo(rt2.left) == 0)

** CID 1315412:    (RESOURCE_LEAK)
/src/java/org/apache/cassandra/db/compaction/CompactionStrategyManager.java: 
368 in 
org.apache.cassandra.db.compaction.CompactionStrategyManager.getScanners(java.util.Collection,
 java.util.Collection)()
/src/java/org/apache/cassandra/db/compaction/CompactionStrategyManager.java: 
368 in 
org.apache.cassandra.db.compaction.CompactionStrategyManager.getScanners(java.util.Collection,
 java.util.Collection)()


________________________________________________________________________________________________________
*** CID 1315412:    (RESOURCE_LEAK)
/src/java/org/apache/cassandra/db/compaction/CompactionStrategyManager.java: 
368 in 
org.apache.cassandra.db.compaction.CompactionStrategyManager.getScanners(java.util.Collection,
 java.util.Collection)()
362
363                 for (ISSTableScanner scanner : 
Iterables.concat(repairedScanners.scanners, unrepairedScanners.scanners))
364                 {
365                     if (!scanners.add(scanner))
366                         scanner.close();
367                 }
>>>     CID 1315412:    (RESOURCE_LEAK)
>>>     Variable "repairedScanners" going out of scope leaks the resource it 
>>> refers to.
368             }
369
370             return new AbstractCompactionStrategy.ScannerList(new 
ArrayList<>(scanners));
371         }
372
373         public synchronized AbstractCompactionStrategy.ScannerList 
getScanners(Collection<SSTableReader> sstables)
/src/java/org/apache/cassandra/db/compaction/CompactionStrategyManager.java: 
368 in 
org.apache.cassandra.db.compaction.CompactionStrategyManager.getScanners(java.util.Collection,
 java.util.Collection)()
362
363                 for (ISSTableScanner scanner : 
Iterables.concat(repairedScanners.scanners, unrepairedScanners.scanners))
364                 {
365                     if (!scanners.add(scanner))
366                         scanner.close();
367                 }
>>>     CID 1315412:    (RESOURCE_LEAK)
>>>     Variable "unrepairedScanners" going out of scope leaks the resource it 
>>> refers to.
368             }
369
370             return new AbstractCompactionStrategy.ScannerList(new 
ArrayList<>(scanners));
371         }
372
373         public synchronized AbstractCompactionStrategy.ScannerList 
getScanners(Collection<SSTableReader> sstables)

** CID 1315410:  Null pointer dereferences  (NULL_RETURNS)
/src/java/org/apache/cassandra/utils/MerkleTrees.java: 172 in 
org.apache.cassandra.utils.MerkleTrees.invalidate(org.apache.cassandra.dht.Token)()


________________________________________________________________________________________________________
*** CID 1315410:  Null pointer dereferences  (NULL_RETURNS)
/src/java/org/apache/cassandra/utils/MerkleTrees.java: 172 in 
org.apache.cassandra.utils.MerkleTrees.invalidate(org.apache.cassandra.dht.Token)()
166          * Invalidate the MerkleTree responsible for the given token.
167          *
168          * @param t
169          */
170         public void invalidate(Token t)
171         {
>>>     CID 1315410:  Null pointer dereferences  (NULL_RETURNS)
>>>     Calling a method on null object "getMerkleTree(t)".
172             getMerkleTree(t).invalidate(t);
173         }
174
175         /**
176          * Get the MerkleTree responsible for the given token range.
177          *

** CID 1315409:  Null pointer dereferences  (NULL_RETURNS)
/src/java/org/apache/cassandra/utils/MerkleTrees.java: 130 in 
org.apache.cassandra.utils.MerkleTrees.get(org.apache.cassandra.dht.Token)()


________________________________________________________________________________________________________
*** CID 1315409:  Null pointer dereferences  (NULL_RETURNS)
/src/java/org/apache/cassandra/utils/MerkleTrees.java: 130 in 
org.apache.cassandra.utils.MerkleTrees.get(org.apache.cassandra.dht.Token)()
124          *
125          * @param t
126          * @return
127          */
128         public MerkleTree.TreeRange get(Token t)
129         {
>>>     CID 1315409:  Null pointer dereferences  (NULL_RETURNS)
>>>     Calling a method on null object "getMerkleTree(t)".
130             return getMerkleTree(t).get(t);
131         }
132
133         /**
134          * Init all MerkleTree's with an even tree distribution.
135          */

** CID 1315407:  Null pointer dereferences  (NULL_RETURNS)
/src/java/org/apache/cassandra/utils/MerkleTrees.java: 162 in 
org.apache.cassandra.utils.MerkleTrees.split(org.apache.cassandra.dht.Token)()


________________________________________________________________________________________________________
*** CID 1315407:  Null pointer dereferences  (NULL_RETURNS)
/src/java/org/apache/cassandra/utils/MerkleTrees.java: 162 in 
org.apache.cassandra.utils.MerkleTrees.split(org.apache.cassandra.dht.Token)()
156          *
157          * @param t
158          * @return
159          */
160         public boolean split(Token t)
161         {
>>>     CID 1315407:  Null pointer dereferences  (NULL_RETURNS)
>>>     Calling a method on null object "getMerkleTree(t)".
162             return getMerkleTree(t).split(t);
163         }
164
165         /**
166          * Invalidate the MerkleTree responsible for the given token.
167         
{code}

> Repair improvements when using vnodes
> -------------------------------------
>
>                 Key: CASSANDRA-5220
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-5220
>             Project: Cassandra
>          Issue Type: Improvement
>          Components: Core
>    Affects Versions: 1.2.0 beta 1
>            Reporter: Brandon Williams
>            Assignee: Marcus Olsson
>              Labels: performance, repair
>         Attachments: 5220-yourkit.png, 5220-yourkit.tar.bz2, 
> cassandra-3.0-5220-1.patch, cassandra-3.0-5220-2.patch, 
> cassandra-3.0-5220.patch
>
>
> Currently when using vnodes, repair takes much longer to complete than 
> without them.  This appears at least in part because it's using a session per 
> range and processing them sequentially.  This generates a lot of log spam 
> with vnodes, and while being gentler and lighter on hard disk deployments, 
> ssd-based deployments would often prefer that repair be as fast as possible.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to