diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/CellComparator.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/CellComparator.java index b179963..f4687da 100644 --- a/hbase-common/src/main/java/org/apache/hadoop/hbase/CellComparator.java +++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/CellComparator.java @@ -171,9 +171,13 @@ public class CellComparator implements Comparator, Serializable { right.getFamilyArray(), right.getFamilyOffset(), right.getFamilyLength()); } if (right instanceof ByteBufferedCell) { - return -(ByteBufferUtils.compareTo(((ByteBufferedCell) right).getFamilyByteBuffer(), - ((ByteBufferedCell) right).getFamilyPosition(), right.getFamilyLength(), - left.getFamilyArray(), left.getFamilyOffset(), left.getFamilyLength())); + // Notice how we flip the order of the compare here. We used to negate the return value but + // see what FindBugs says + // http://findbugs.sourceforge.net/bugDescriptions.html#RV_NEGATING_RESULT_OF_COMPARETO + // It suggest flipping the order to get same effect and 'safer'. + return ByteBufferUtils.compareTo(((ByteBufferedCell)left).getFamilyByteBuffer(), + ((ByteBufferedCell)left).getFamilyPosition(), left.getFamilyLength(), + right.getFamilyArray(), right.getFamilyOffset(), right.getFamilyLength()); } return Bytes.compareTo(left.getFamilyArray(), left.getFamilyOffset(), left.getFamilyLength(), right.getFamilyArray(), right.getFamilyOffset(), right.getFamilyLength()); @@ -210,10 +214,13 @@ public class CellComparator implements Comparator, Serializable { right.getQualifierArray(), right.getQualifierOffset(), right.getQualifierLength()); } if (right instanceof ByteBufferedCell) { - return -(ByteBufferUtils.compareTo(((ByteBufferedCell) right).getQualifierByteBuffer(), - ((ByteBufferedCell) right).getQualifierPosition(), - right.getQualifierLength(), left.getQualifierArray(), left.getQualifierOffset(), - left.getQualifierLength())); + // Notice how we flip the order of the compare here. We used to negate the return value but + // see what FindBugs says + // http://findbugs.sourceforge.net/bugDescriptions.html#RV_NEGATING_RESULT_OF_COMPARETO + // It suggest flipping the order to get same effect and 'safer'. + return ByteBufferUtils.compareTo(((ByteBufferedCell)left).getQualifierByteBuffer(), + ((ByteBufferedCell)left).getQualifierPosition(), left.getQualifierLength(), + right.getQualifierArray(), right.getQualifierOffset(), right.getQualifierLength()); } return Bytes.compareTo(left.getQualifierArray(), left.getQualifierOffset(), left.getQualifierLength(), right.getQualifierArray(), right.getQualifierOffset(), @@ -331,9 +338,13 @@ public class CellComparator implements Comparator, Serializable { right.getRowArray(), right.getRowOffset(), right.getRowLength()); } if (right instanceof ByteBufferedCell) { - return -(ByteBufferUtils.compareTo(((ByteBufferedCell) right).getRowByteBuffer(), - ((ByteBufferedCell) right).getRowPosition(), right.getRowLength(), - left.getRowArray(), left.getRowOffset(), left.getRowLength())); + // Notice how we flip the order of the compare here. We used to negate the return value but + // see what FindBugs says + // http://findbugs.sourceforge.net/bugDescriptions.html#RV_NEGATING_RESULT_OF_COMPARETO + // It suggest flipping the order to get same effect and 'safer'. + return ByteBufferUtils.compareTo(((ByteBufferedCell)left).getRowByteBuffer(), + ((ByteBufferedCell)left).getRowPosition(), left.getRowLength(), + right.getRowArray(), right.getRowOffset(), right.getRowLength()); } return Bytes.compareTo(left.getRowArray(), left.getRowOffset(), left.getRowLength(), right.getRowArray(), right.getRowOffset(), right.getRowLength()); diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/CellUtil.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/CellUtil.java index 1ec6afa..1b38b56 100644 --- a/hbase-common/src/main/java/org/apache/hadoop/hbase/CellUtil.java +++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/CellUtil.java @@ -819,6 +819,8 @@ public final class CellUtil { } @Override + @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="IT_NO_SUCH_ELEMENT", + justification="Intentional") public Tag next() { return null; } diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/JitterScheduledThreadPoolExecutorImpl.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/JitterScheduledThreadPoolExecutorImpl.java index 7e7239e..67df9d2 100644 --- a/hbase-common/src/main/java/org/apache/hadoop/hbase/JitterScheduledThreadPoolExecutorImpl.java +++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/JitterScheduledThreadPoolExecutorImpl.java @@ -93,6 +93,17 @@ public class JitterScheduledThreadPoolExecutorImpl extends ScheduledThreadPoolEx } @Override + public boolean equals(Object obj) { + if (obj == this) return true; + return obj instanceof Delayed? compareTo((Delayed)obj) == 0: false; + } + + @Override + public int hashCode() { + return this.wrapped.hashCode(); + } + + @Override public void run() { wrapped.run(); } @@ -123,5 +134,4 @@ public class JitterScheduledThreadPoolExecutorImpl extends ScheduledThreadPoolEx return wrapped.get(timeout, unit); } } - -} +} \ No newline at end of file diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/OffheapKeyValue.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/OffheapKeyValue.java index 0af64cd..dc07569 100644 --- a/hbase-common/src/main/java/org/apache/hadoop/hbase/OffheapKeyValue.java +++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/OffheapKeyValue.java @@ -32,8 +32,8 @@ import org.apache.hadoop.hbase.util.ClassSize; * memory. */ @InterfaceAudience.Private -public class OffheapKeyValue extends ByteBufferedCell implements HeapSize, Cloneable, - SettableSequenceId, Streamable { +public class OffheapKeyValue extends ByteBufferedCell +implements HeapSize, SettableSequenceId, Streamable { protected final ByteBuffer buf; protected final int offset; diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/ProcedureInfo.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/ProcedureInfo.java index 845a536..b7ea47e 100644 --- a/hbase-common/src/main/java/org/apache/hadoop/hbase/ProcedureInfo.java +++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/ProcedureInfo.java @@ -35,7 +35,7 @@ import org.apache.hadoop.hbase.util.NonceKey; */ @InterfaceAudience.Public @InterfaceStability.Evolving -public class ProcedureInfo { +public class ProcedureInfo implements Cloneable { private final long procId; private final String procName; private final String procOwner; @@ -72,6 +72,8 @@ public class ProcedureInfo { this.result = result; } + @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="CN_IDIOM_NO_SUPER_CALL", + justification="Intentional; calling super class clone doesn't make sense here.") public ProcedureInfo clone() { return new ProcedureInfo( procId, procName, procOwner, procState, parentId, exception, lastUpdate, startTime, result); diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/types/CopyOnWriteArrayMap.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/types/CopyOnWriteArrayMap.java index 41056b2..63f4285 100644 --- a/hbase-common/src/main/java/org/apache/hadoop/hbase/types/CopyOnWriteArrayMap.java +++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/types/CopyOnWriteArrayMap.java @@ -27,6 +27,7 @@ import java.util.Comparator; import java.util.Iterator; import java.util.Map; import java.util.NavigableSet; +import java.util.NoSuchElementException; import java.util.Set; import java.util.SortedSet; import java.util.concurrent.ConcurrentNavigableMap; @@ -693,8 +694,10 @@ public class CopyOnWriteArrayMap extends AbstractMap } @Override + @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="EQ_ALWAYS_FALSE", + justification="Intentional") public boolean equals(Object o) { - return false; + return false; // FindBugs: Causes EQ_ALWAYS_FALSE. Suppressed. } @Override @@ -771,7 +774,10 @@ public class CopyOnWriteArrayMap extends AbstractMap } @Override + @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="IT_NO_SUCH_ELEMENT", + justification="Intentional") public Entry next() { + if (!hasNext()) throw new NoSuchElementException(); return holder.entries[index++]; } diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/DNS.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/DNS.java index d105a34..4b9e87f 100644 --- a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/DNS.java +++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/DNS.java @@ -25,6 +25,8 @@ import org.apache.hadoop.hbase.classification.InterfaceAudience; * Wrapper around Hadoop's DNS class to hide reflection. */ @InterfaceAudience.Private +@edu.umd.cs.findbugs.annotations.SuppressWarnings(value="REC_CATCH_EXCEPTION", + justification="If exception, presume HAS_NEW_DNS_GET_DEFAULT_HOST_API false") public final class DNS { private static boolean HAS_NEW_DNS_GET_DEFAULT_HOST_API; private static Method GET_DEFAULT_HOST_METHOD; @@ -35,7 +37,7 @@ public final class DNS { .getMethod("getDefaultHost", String.class, String.class, boolean.class); HAS_NEW_DNS_GET_DEFAULT_HOST_API = true; } catch (Exception e) { - HAS_NEW_DNS_GET_DEFAULT_HOST_API = false; + HAS_NEW_DNS_GET_DEFAULT_HOST_API = false; // FindBugs: Causes REC_CATCH_EXCEPTION. Suppressed } } diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/DynamicClassLoader.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/DynamicClassLoader.java index 2d5eb5d..214c917 100644 --- a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/DynamicClassLoader.java +++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/DynamicClassLoader.java @@ -99,7 +99,9 @@ public class DynamicClassLoader extends ClassLoaderBase { } } - private void initTempDir(final Configuration conf) { + // FindBugs: Making synchronized to avoid IS2_INCONSISTENT_SYNC complaints about + // remoteDirFs and jarModifiedTime being part synchronized protected. + private synchronized void initTempDir(final Configuration conf) { jarModifiedTime = new HashMap(); String localDirPath = conf.get( LOCAL_DIR_KEY, DEFAULT_LOCAL_DIR) + DYNAMIC_JARS_DIR; diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/UnsafeAccess.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/UnsafeAccess.java index e72c9f0..af2632b 100644 --- a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/UnsafeAccess.java +++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/UnsafeAccess.java @@ -34,6 +34,8 @@ import sun.nio.ch.DirectBuffer; @InterfaceAudience.Private @InterfaceStability.Evolving +@edu.umd.cs.findbugs.annotations.SuppressWarnings(value="REC_CATCH_EXCEPTION", + justification="If exception, presume unaligned") public final class UnsafeAccess { private static final Log LOG = LogFactory.getLog(UnsafeAccess.class); @@ -51,7 +53,6 @@ public final class UnsafeAccess { // copyMemory method. A limit is imposed to allow for safepoint polling // during a large copy static final long UNSAFE_COPY_THRESHOLD = 1024L * 1024L; - static { theUnsafe = (Unsafe) AccessController.doPrivileged(new PrivilegedAction() { @Override @@ -76,7 +77,7 @@ public final class UnsafeAccess { m.setAccessible(true); unaligned = (boolean) m.invoke(null); } catch (Exception e) { - unaligned = false; + unaligned = false; // FindBugs: Causes REC_CATCH_EXCEPTION. Suppressed. } } else{ BYTE_ARRAY_BASE_OFFSET = -1;