You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by ja...@apache.org on 2017/11/02 13:45:54 UTC

cassandra git commit: Refactoring to specialised functional interfaces

Repository: cassandra
Updated Branches:
  refs/heads/trunk 3fe31ffdd -> 684e250ba


Refactoring to specialised functional interfaces

patch by Ameya Ketkar; reviewed by jasobrown for CASSANDRA-13982


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/684e250b
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/684e250b
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/684e250b

Branch: refs/heads/trunk
Commit: 684e250ba6e5b5bd1c246ceac332a91b2dc90859
Parents: 3fe31ff
Author: ameya <as...@gmail.com>
Authored: Sat Oct 28 16:50:24 2017 -0700
Committer: Jason Brown <ja...@gmail.com>
Committed: Thu Nov 2 06:44:48 2017 -0700

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../cassandra/auth/jmx/AuthorizationProxy.java  | 15 ++--
 .../org/apache/cassandra/db/Directories.java    |  5 +-
 .../org/apache/cassandra/db/ReadCommand.java    |  3 +-
 .../db/compaction/CompactionController.java     |  3 +-
 .../db/compaction/CompactionIterator.java       |  6 +-
 .../db/compaction/CompactionManager.java        |  3 +-
 .../db/compaction/SSTableSplitter.java          |  3 +-
 .../cassandra/db/compaction/Upgrader.java       |  3 +-
 .../cassandra/db/compaction/Verifier.java       |  3 +-
 .../db/lifecycle/LifecycleTransaction.java      |  4 +-
 .../db/lifecycle/LogAwareFileLister.java        |  8 +--
 .../cassandra/db/partitions/PurgeFunction.java  |  3 +-
 .../cassandra/hints/HintsDispatchExecutor.java  |  8 +--
 .../compress/CompressedInputStream.java         |  8 +--
 .../cassandra/tools/SSTableMetadataViewer.java  |  8 +--
 .../cassandra/tools/StandaloneSSTableUtil.java  |  3 +-
 src/java/org/apache/cassandra/tools/Util.java   | 18 ++---
 .../test/microbench/AutoBoxingBench.java        | 74 ++++++++++++++++++++
 .../auth/jmx/AuthorizationProxyTest.java        | 21 +++---
 .../db/compaction/CompactionControllerTest.java |  3 +-
 .../rows/UnfilteredRowIteratorsMergeTest.java   | 10 +--
 .../db/rows/UnfilteredRowsGenerator.java        |  8 +--
 .../service/NativeTransportServiceTest.java     |  7 +-
 24 files changed, 157 insertions(+), 71 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/684e250b/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 6c3eb53..71f4b1d 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 4.0
+ * Refactoring to specialised functional interfaces (CASSANDRA-13982)
  * Speculative retry should allow more friendly params (CASSANDRA-13876)
  * Throw exception if we send/receive repair messages to incompatible nodes (CASSANDRA-13944)
  * Replace usages of MessageDigest with Guava's Hasher (CASSANDRA-13291)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/684e250b/src/java/org/apache/cassandra/auth/jmx/AuthorizationProxy.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/auth/jmx/AuthorizationProxy.java b/src/java/org/apache/cassandra/auth/jmx/AuthorizationProxy.java
index 1d8f462..d9b63c6 100644
--- a/src/java/org/apache/cassandra/auth/jmx/AuthorizationProxy.java
+++ b/src/java/org/apache/cassandra/auth/jmx/AuthorizationProxy.java
@@ -23,8 +23,9 @@ import java.security.AccessControlContext;
 import java.security.AccessController;
 import java.security.Principal;
 import java.util.Set;
+import java.util.function.BooleanSupplier;
 import java.util.function.Function;
-import java.util.function.Supplier;
+import java.util.function.Predicate;
 import java.util.stream.Collectors;
 import javax.management.MBeanServer;
 import javax.management.MalformedObjectNameException;
@@ -110,7 +111,7 @@ public class AuthorizationProxy implements InvocationHandler
      Used to check whether the Role associated with the authenticated Subject has superuser
      status. By default, just delegates to Roles::hasSuperuserStatus, but can be overridden for testing.
      */
-    protected Function<RoleResource, Boolean> isSuperuser = Roles::hasSuperuserStatus;
+    protected Predicate<RoleResource> isSuperuser = Roles::hasSuperuserStatus;
 
     /*
      Used to retrieve the set of all permissions granted to a given role. By default, this fetches
@@ -123,7 +124,7 @@ public class AuthorizationProxy implements InvocationHandler
      Used to decide whether authorization is enabled or not, usually this depends on the configured
      IAuthorizer, but can be overridden for testing.
      */
-    protected Supplier<Boolean> isAuthzRequired = () -> DatabaseDescriptor.getAuthorizer().requireAuthorization();
+    protected BooleanSupplier isAuthzRequired = () -> DatabaseDescriptor.getAuthorizer().requireAuthorization();
 
     /*
      Used to find matching MBeans when the invocation target is a pattern type ObjectName.
@@ -135,7 +136,7 @@ public class AuthorizationProxy implements InvocationHandler
      Used to determine whether auth setup has completed so we know whether the expect the IAuthorizer
      to be ready. Can be overridden for testing.
      */
-    protected Supplier<Boolean> isAuthSetupComplete = () -> StorageService.instance.isAuthSetupComplete();
+    protected BooleanSupplier isAuthSetupComplete = () -> StorageService.instance.isAuthSetupComplete();
 
     @Override
     public Object invoke(Object proxy, Method method, Object[] args)
@@ -188,14 +189,14 @@ public class AuthorizationProxy implements InvocationHandler
                      methodName,
                      subject == null ? "" :subject.toString().replaceAll("\\n", " "));
 
-        if (!isAuthSetupComplete.get())
+        if (!isAuthSetupComplete.getAsBoolean())
         {
             logger.trace("Auth setup is not complete, refusing access");
             return false;
         }
 
         // Permissive authorization is enabled
-        if (!isAuthzRequired.get())
+        if (!isAuthzRequired.getAsBoolean())
             return true;
 
         // Allow operations performed locally on behalf of the connector server itself
@@ -220,7 +221,7 @@ public class AuthorizationProxy implements InvocationHandler
         // might choose to associate with the Subject following successful authentication
         RoleResource userResource = RoleResource.role(principals.iterator().next().getName());
         // A role with superuser status can do anything
-        if (isSuperuser.apply(userResource))
+        if (isSuperuser.test(userResource))
             return true;
 
         // The method being invoked may be a method on an MBean, or it could belong

http://git-wip-us.apache.org/repos/asf/cassandra/blob/684e250b/src/java/org/apache/cassandra/db/Directories.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/Directories.java b/src/java/org/apache/cassandra/db/Directories.java
index b637779..88d909d 100644
--- a/src/java/org/apache/cassandra/db/Directories.java
+++ b/src/java/org/apache/cassandra/db/Directories.java
@@ -25,8 +25,7 @@ import java.nio.file.Files;
 import java.nio.file.Path;
 import java.util.*;
 import java.util.concurrent.ThreadLocalRandom;
-import java.util.function.BiFunction;
-
+import java.util.function.BiPredicate;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Iterables;
@@ -733,7 +732,7 @@ public class Directories
             filtered = true;
         }
 
-        private BiFunction<File, FileType, Boolean> getFilter()
+        private BiPredicate<File, FileType> getFilter()
         {
             // This function always return false since it adds to the components map
             return (file, type) ->

http://git-wip-us.apache.org/repos/asf/cassandra/blob/684e250b/src/java/org/apache/cassandra/db/ReadCommand.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/ReadCommand.java b/src/java/org/apache/cassandra/db/ReadCommand.java
index feaee7c..1d74c16 100644
--- a/src/java/org/apache/cassandra/db/ReadCommand.java
+++ b/src/java/org/apache/cassandra/db/ReadCommand.java
@@ -18,6 +18,7 @@
 package org.apache.cassandra.db;
 
 import java.io.IOException;
+import java.util.function.LongPredicate;
 import java.util.function.Predicate;
 
 import javax.annotation.Nullable;
@@ -567,7 +568,7 @@ public abstract class ReadCommand extends MonitorableImpl implements ReadQuery
                       iterator.metadata().enforceStrictLiveness());
             }
 
-            protected Predicate<Long> getPurgeEvaluator()
+            protected LongPredicate getPurgeEvaluator()
             {
                 return time -> true;
             }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/684e250b/src/java/org/apache/cassandra/db/compaction/CompactionController.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/compaction/CompactionController.java b/src/java/org/apache/cassandra/db/compaction/CompactionController.java
index 84aac09..32ce67a 100644
--- a/src/java/org/apache/cassandra/db/compaction/CompactionController.java
+++ b/src/java/org/apache/cassandra/db/compaction/CompactionController.java
@@ -18,6 +18,7 @@
 package org.apache.cassandra.db.compaction;
 
 import java.util.*;
+import java.util.function.LongPredicate;
 import java.util.function.Predicate;
 
 import org.apache.cassandra.config.Config;
@@ -256,7 +257,7 @@ public class CompactionController implements AutoCloseable
      * containing his partition and not participating in the compaction. This means there isn't any data in those
      * sstables that might still need to be suppressed by a tombstone at this timestamp.
      */
-    public Predicate<Long> getPurgeEvaluator(DecoratedKey key)
+    public LongPredicate getPurgeEvaluator(DecoratedKey key)
     {
         if (NEVER_PURGE_TOMBSTONES || !compactingRepaired())
             return time -> false;

http://git-wip-us.apache.org/repos/asf/cassandra/blob/684e250b/src/java/org/apache/cassandra/db/compaction/CompactionIterator.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/compaction/CompactionIterator.java b/src/java/org/apache/cassandra/db/compaction/CompactionIterator.java
index a6161f2..dfbb6cc 100644
--- a/src/java/org/apache/cassandra/db/compaction/CompactionIterator.java
+++ b/src/java/org/apache/cassandra/db/compaction/CompactionIterator.java
@@ -18,7 +18,7 @@
 package org.apache.cassandra.db.compaction;
 
 import java.util.*;
-import java.util.function.Predicate;
+import java.util.function.LongPredicate;
 
 import com.google.common.collect.Ordering;
 
@@ -260,7 +260,7 @@ public class CompactionIterator extends CompactionInfo.Holder implements Unfilte
         private final CompactionController controller;
 
         private DecoratedKey currentKey;
-        private Predicate<Long> purgeEvaluator;
+        private LongPredicate purgeEvaluator;
 
         private long compactedUnfiltered;
 
@@ -300,7 +300,7 @@ public class CompactionIterator extends CompactionInfo.Holder implements Unfilte
          * This is computed lazily on demand as we only need this if there is tombstones and this a bit expensive
          * (see #8914).
          */
-        protected Predicate<Long> getPurgeEvaluator()
+        protected LongPredicate getPurgeEvaluator()
         {
             if (purgeEvaluator == null)
             {

http://git-wip-us.apache.org/repos/asf/cassandra/blob/684e250b/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/compaction/CompactionManager.java b/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
index 06fbef2..739810b 100644
--- a/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
+++ b/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
@@ -22,6 +22,7 @@ import java.io.IOException;
 import java.lang.management.ManagementFactory;
 import java.util.*;
 import java.util.concurrent.*;
+import java.util.function.LongPredicate;
 import java.util.stream.Collectors;
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
@@ -1702,7 +1703,7 @@ public class CompactionManager implements CompactionManagerMBean
         }
 
         @Override
-        public java.util.function.Predicate<Long> getPurgeEvaluator(DecoratedKey key)
+        public LongPredicate getPurgeEvaluator(DecoratedKey key)
         {
             /*
              * The main reason we always purge is that including gcable tombstone would mean that the

http://git-wip-us.apache.org/repos/asf/cassandra/blob/684e250b/src/java/org/apache/cassandra/db/compaction/SSTableSplitter.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/compaction/SSTableSplitter.java b/src/java/org/apache/cassandra/db/compaction/SSTableSplitter.java
index 924e29c..e9ae429 100644
--- a/src/java/org/apache/cassandra/db/compaction/SSTableSplitter.java
+++ b/src/java/org/apache/cassandra/db/compaction/SSTableSplitter.java
@@ -18,6 +18,7 @@
 package org.apache.cassandra.db.compaction;
 
 import java.util.*;
+import java.util.function.LongPredicate;
 import java.util.function.Predicate;
 
 import org.apache.cassandra.db.*;
@@ -98,7 +99,7 @@ public class SSTableSplitter
         }
 
         @Override
-        public Predicate<Long> getPurgeEvaluator(DecoratedKey key)
+        public LongPredicate getPurgeEvaluator(DecoratedKey key)
         {
             return time -> false;
         }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/684e250b/src/java/org/apache/cassandra/db/compaction/Upgrader.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/compaction/Upgrader.java b/src/java/org/apache/cassandra/db/compaction/Upgrader.java
index 5a60ddd..80453ef 100644
--- a/src/java/org/apache/cassandra/db/compaction/Upgrader.java
+++ b/src/java/org/apache/cassandra/db/compaction/Upgrader.java
@@ -19,6 +19,7 @@ package org.apache.cassandra.db.compaction;
 
 import java.io.File;
 import java.util.*;
+import java.util.function.LongPredicate;
 import java.util.function.Predicate;
 
 import com.google.common.base.Throwables;
@@ -116,7 +117,7 @@ public class Upgrader
         }
 
         @Override
-        public Predicate<Long> getPurgeEvaluator(DecoratedKey key)
+        public LongPredicate getPurgeEvaluator(DecoratedKey key)
         {
             return time -> false;
         }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/684e250b/src/java/org/apache/cassandra/db/compaction/Verifier.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/compaction/Verifier.java b/src/java/org/apache/cassandra/db/compaction/Verifier.java
index 22cf813..af00915 100644
--- a/src/java/org/apache/cassandra/db/compaction/Verifier.java
+++ b/src/java/org/apache/cassandra/db/compaction/Verifier.java
@@ -45,6 +45,7 @@ import java.io.IOError;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.util.*;
+import java.util.function.LongPredicate;
 import java.util.function.Predicate;
 
 public class Verifier implements Closeable
@@ -302,7 +303,7 @@ public class Verifier implements Closeable
         }
 
         @Override
-        public Predicate<Long> getPurgeEvaluator(DecoratedKey key)
+        public LongPredicate getPurgeEvaluator(DecoratedKey key)
         {
             return time -> false;
         }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/684e250b/src/java/org/apache/cassandra/db/lifecycle/LifecycleTransaction.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/lifecycle/LifecycleTransaction.java b/src/java/org/apache/cassandra/db/lifecycle/LifecycleTransaction.java
index 2bf81a9..2f17329 100644
--- a/src/java/org/apache/cassandra/db/lifecycle/LifecycleTransaction.java
+++ b/src/java/org/apache/cassandra/db/lifecycle/LifecycleTransaction.java
@@ -21,7 +21,7 @@ import java.io.File;
 import java.nio.file.Path;
 import java.util.*;
 import java.util.function.BiFunction;
-
+import java.util.function.BiPredicate;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Predicate;
 import com.google.common.collect.*;
@@ -556,7 +556,7 @@ public class LifecycleTransaction extends Transactional.AbstractTransactional
      * @param filter - A function that receives each file and its type, it should return true to have the file returned
      * @return - the list of files that were scanned and for which the filter returned true
      */
-    public static List<File> getFiles(Path folder, BiFunction<File, Directories.FileType, Boolean> filter, Directories.OnTxnErr onTxnErr)
+    public static List<File> getFiles(Path folder, BiPredicate<File, Directories.FileType> filter, Directories.OnTxnErr onTxnErr)
     {
         return new LogAwareFileLister(folder, filter, onTxnErr).list();
     }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/684e250b/src/java/org/apache/cassandra/db/lifecycle/LogAwareFileLister.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/lifecycle/LogAwareFileLister.java b/src/java/org/apache/cassandra/db/lifecycle/LogAwareFileLister.java
index 212076d..254966e 100644
--- a/src/java/org/apache/cassandra/db/lifecycle/LogAwareFileLister.java
+++ b/src/java/org/apache/cassandra/db/lifecycle/LogAwareFileLister.java
@@ -26,7 +26,7 @@ import java.nio.file.DirectoryStream;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.util.*;
-import java.util.function.BiFunction;
+import java.util.function.BiPredicate;
 import java.util.stream.Collectors;
 import java.util.stream.StreamSupport;
 
@@ -50,7 +50,7 @@ final class LogAwareFileLister
     private final Path folder;
 
     // The filter determines which files the client wants returned
-    private final BiFunction<File, FileType, Boolean> filter; //file, file type
+    private final BiPredicate<File, FileType> filter; //file, file type
 
     // The behavior when we fail to list files
     private final OnTxnErr onTxnErr;
@@ -59,7 +59,7 @@ final class LogAwareFileLister
     NavigableMap<File, Directories.FileType> files = new TreeMap<>();
 
     @VisibleForTesting
-    LogAwareFileLister(Path folder, BiFunction<File, FileType, Boolean> filter, OnTxnErr onTxnErr)
+    LogAwareFileLister(Path folder, BiPredicate<File, FileType> filter, OnTxnErr onTxnErr)
     {
         this.folder = folder;
         this.filter = filter;
@@ -96,7 +96,7 @@ final class LogAwareFileLister
 
         // Finally we apply the user filter before returning our result
         return files.entrySet().stream()
-                    .filter((e) -> filter.apply(e.getKey(), e.getValue()))
+                    .filter((e) -> filter.test(e.getKey(), e.getValue()))
                     .map(Map.Entry::getKey)
                     .collect(Collectors.toList());
     }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/684e250b/src/java/org/apache/cassandra/db/partitions/PurgeFunction.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/partitions/PurgeFunction.java b/src/java/org/apache/cassandra/db/partitions/PurgeFunction.java
index 83d4d38..19289d4 100644
--- a/src/java/org/apache/cassandra/db/partitions/PurgeFunction.java
+++ b/src/java/org/apache/cassandra/db/partitions/PurgeFunction.java
@@ -17,6 +17,7 @@
  */
 package org.apache.cassandra.db.partitions;
 
+import java.util.function.LongPredicate;
 import java.util.function.Predicate;
 
 import org.apache.cassandra.db.*;
@@ -42,7 +43,7 @@ public abstract class PurgeFunction extends Transformation<UnfilteredRowIterator
         this.enforceStrictLiveness = enforceStrictLiveness;
     }
 
-    protected abstract Predicate<Long> getPurgeEvaluator();
+    protected abstract LongPredicate getPurgeEvaluator();
 
     // Called at the beginning of each new partition
     protected void onNewPartition(DecoratedKey partitionKey)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/684e250b/src/java/org/apache/cassandra/hints/HintsDispatchExecutor.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/hints/HintsDispatchExecutor.java b/src/java/org/apache/cassandra/hints/HintsDispatchExecutor.java
index 0a96ae4..58a3e6f 100644
--- a/src/java/org/apache/cassandra/hints/HintsDispatchExecutor.java
+++ b/src/java/org/apache/cassandra/hints/HintsDispatchExecutor.java
@@ -24,7 +24,7 @@ import java.util.UUID;
 import java.util.concurrent.*;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.function.BooleanSupplier;
-import java.util.function.Function;
+import java.util.function.Predicate;
 import java.util.function.Supplier;
 
 import com.google.common.util.concurrent.RateLimiter;
@@ -50,10 +50,10 @@ final class HintsDispatchExecutor
     private final File hintsDirectory;
     private final ExecutorService executor;
     private final AtomicBoolean isPaused;
-    private final Function<InetAddress, Boolean> isAlive;
+    private final Predicate<InetAddress> isAlive;
     private final Map<UUID, Future> scheduledDispatches;
 
-    HintsDispatchExecutor(File hintsDirectory, int maxThreads, AtomicBoolean isPaused, Function<InetAddress, Boolean> isAlive)
+    HintsDispatchExecutor(File hintsDirectory, int maxThreads, AtomicBoolean isPaused, Predicate<InetAddress> isAlive)
     {
         this.hintsDirectory = hintsDirectory;
         this.isPaused = isPaused;
@@ -271,7 +271,7 @@ final class HintsDispatchExecutor
             File file = new File(hintsDirectory, descriptor.fileName());
             InputPosition offset = store.getDispatchOffset(descriptor);
 
-            BooleanSupplier shouldAbort = () -> !isAlive.apply(address) || isPaused.get();
+            BooleanSupplier shouldAbort = () -> !isAlive.test(address) || isPaused.get();
             try (HintsDispatcher dispatcher = HintsDispatcher.create(file, rateLimiter, address, descriptor.hostId, shouldAbort))
             {
                 if (offset != null)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/684e250b/src/java/org/apache/cassandra/streaming/compress/CompressedInputStream.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/streaming/compress/CompressedInputStream.java b/src/java/org/apache/cassandra/streaming/compress/CompressedInputStream.java
index dd0ba80..da63403 100644
--- a/src/java/org/apache/cassandra/streaming/compress/CompressedInputStream.java
+++ b/src/java/org/apache/cassandra/streaming/compress/CompressedInputStream.java
@@ -25,7 +25,7 @@ import java.util.Iterator;
 import java.util.concurrent.ArrayBlockingQueue;
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.ThreadLocalRandom;
-import java.util.function.Supplier;
+import java.util.function.DoubleSupplier;
 
 import com.google.common.collect.Iterators;
 import org.slf4j.Logger;
@@ -52,7 +52,7 @@ public class CompressedInputStream extends RebufferingInputStream implements Aut
     private final CompressionInfo info;
     // chunk buffer
     private final BlockingQueue<ByteBuffer> dataBuffer;
-    private final Supplier<Double> crcCheckChanceSupplier;
+    private final DoubleSupplier crcCheckChanceSupplier;
 
     /**
      * The base offset of the current {@link #buffer} from the beginning of the stream.
@@ -85,7 +85,7 @@ public class CompressedInputStream extends RebufferingInputStream implements Aut
      * @param source Input source to read compressed data from
      * @param info Compression info
      */
-    public CompressedInputStream(DataInputPlus source, CompressionInfo info, ChecksumType checksumType, Supplier<Double> crcCheckChanceSupplier)
+    public CompressedInputStream(DataInputPlus source, CompressionInfo info, ChecksumType checksumType, DoubleSupplier crcCheckChanceSupplier)
     {
         super(ByteBuffer.allocateDirect(info.parameters.chunkLength()));
         buffer.limit(buffer.position()); // force the buffer to appear "consumed" so that it triggers reBuffer on the first read
@@ -174,7 +174,7 @@ public class CompressedInputStream extends RebufferingInputStream implements Aut
         totalCompressedBytesRead += length;
 
         // validate crc randomly
-        double crcCheckChance = this.crcCheckChanceSupplier.get();
+        double crcCheckChance = this.crcCheckChanceSupplier.getAsDouble();
         if (crcCheckChance > 0d && crcCheckChance > ThreadLocalRandom.current().nextDouble())
         {
             ByteBuffer crcBuf = compressed.duplicate();

http://git-wip-us.apache.org/repos/asf/cassandra/blob/684e250b/src/java/org/apache/cassandra/tools/SSTableMetadataViewer.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/tools/SSTableMetadataViewer.java b/src/java/org/apache/cassandra/tools/SSTableMetadataViewer.java
index 1ff2cb6..5a8a0bc 100755
--- a/src/java/org/apache/cassandra/tools/SSTableMetadataViewer.java
+++ b/src/java/org/apache/cassandra/tools/SSTableMetadataViewer.java
@@ -387,7 +387,7 @@ public class SSTableMetadataViewer
                                                                 offset,
                                                                 Util.wrapQuiet(toDateString(offset, TimeUnit.SECONDS),
                                                                                         color)),
-                                                         Object::toString);
+                                                         String::valueOf);
             estDropped.printHistogram(out, color, unicode);
             field("Partition Size", "");
             TermHistogram rowSize = new TermHistogram(stats.estimatedPartitionSize,
@@ -395,13 +395,13 @@ public class SSTableMetadataViewer
                                                       offset -> String.format("%d %s",
                                                                               offset,
                                                                               Util.wrapQuiet(toByteString(offset), color)),
-                                                      Object::toString);
+                                                      String::valueOf);
             rowSize.printHistogram(out, color, unicode);
             field("Column Count", "");
             TermHistogram cellCount = new TermHistogram(stats.estimatedColumnCount,
                                                         "Columns",
-                                                        Object::toString,
-                                                        Object::toString);
+                                                        String::valueOf,
+                                                        String::valueOf);
             cellCount.printHistogram(out, color, unicode);
         }
         if (compaction != null)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/684e250b/src/java/org/apache/cassandra/tools/StandaloneSSTableUtil.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/tools/StandaloneSSTableUtil.java b/src/java/org/apache/cassandra/tools/StandaloneSSTableUtil.java
index adfe7e0..3a6be63 100644
--- a/src/java/org/apache/cassandra/tools/StandaloneSSTableUtil.java
+++ b/src/java/org/apache/cassandra/tools/StandaloneSSTableUtil.java
@@ -29,6 +29,7 @@ import org.apache.commons.cli.*;
 import java.io.File;
 import java.io.IOException;
 import java.util.function.BiFunction;
+import java.util.function.BiPredicate;
 
 import static org.apache.cassandra.tools.BulkLoader.CmdLineOptions;
 
@@ -92,7 +93,7 @@ public class StandaloneSSTableUtil
         }
     }
 
-    private static BiFunction<File, Directories.FileType, Boolean> getFilter(Options options)
+    private static BiPredicate<File, Directories.FileType> getFilter(Options options)
     {
         return (file, type) ->
         {

http://git-wip-us.apache.org/repos/asf/cassandra/blob/684e250b/src/java/org/apache/cassandra/tools/Util.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/tools/Util.java b/src/java/org/apache/cassandra/tools/Util.java
index 7a6f698..db664aa 100644
--- a/src/java/org/apache/cassandra/tools/Util.java
+++ b/src/java/org/apache/cassandra/tools/Util.java
@@ -30,7 +30,7 @@ import java.util.Spliterator;
 import java.util.Spliterators;
 import java.util.TreeMap;
 import java.util.Map.Entry;
-import java.util.function.Function;
+import java.util.function.LongFunction;
 import java.util.stream.Stream;
 import java.util.stream.StreamSupport;
 
@@ -129,14 +129,14 @@ public final class Util
         int maxCountLength = 5;
         int maxOffsetLength = 5;
         Map<? extends Number, Long> histogram;
-        Function<Long, String> offsetName;
-        Function<Long, String> countName;
+        LongFunction<String> offsetName;
+        LongFunction<String> countName;
         String title;
 
         public TermHistogram(Map<? extends Number, Long> histogram,
                 String title,
-                Function<Long, String> offsetName,
-                Function<Long, String> countName)
+                LongFunction<String> offsetName,
+                LongFunction<String> countName)
         {
             this.offsetName = offsetName;
             this.countName = countName;
@@ -156,8 +156,8 @@ public final class Util
 
         public TermHistogram(TombstoneHistogram histogram,
                 String title,
-                Function<Long, String> offsetName,
-                Function<Long, String> countName)
+                LongFunction<String> offsetName,
+                LongFunction<String> countName)
         {
             this(new TreeMap<Number, Long>()
             {
@@ -171,8 +171,8 @@ public final class Util
 
         public TermHistogram(EstimatedHistogram histogram,
                 String title,
-                Function<Long, String> offsetName,
-                Function<Long, String> countName)
+                LongFunction<String> offsetName,
+                LongFunction<String> countName)
         {
             this(new TreeMap<Number, Long>()
             {

http://git-wip-us.apache.org/repos/asf/cassandra/blob/684e250b/test/microbench/org/apache/cassandra/test/microbench/AutoBoxingBench.java
----------------------------------------------------------------------
diff --git a/test/microbench/org/apache/cassandra/test/microbench/AutoBoxingBench.java b/test/microbench/org/apache/cassandra/test/microbench/AutoBoxingBench.java
new file mode 100644
index 0000000..fd6df39
--- /dev/null
+++ b/test/microbench/org/apache/cassandra/test/microbench/AutoBoxingBench.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.cassandra.test.microbench;
+
+import java.util.concurrent.TimeUnit;
+import java.util.function.BooleanSupplier;
+import java.util.function.IntSupplier;
+import java.util.function.Supplier;
+
+import org.openjdk.jmh.annotations.Benchmark;
+import org.openjdk.jmh.annotations.BenchmarkMode;
+import org.openjdk.jmh.annotations.Fork;
+import org.openjdk.jmh.annotations.Measurement;
+import org.openjdk.jmh.annotations.Mode;
+import org.openjdk.jmh.annotations.OutputTimeUnit;
+import org.openjdk.jmh.annotations.Scope;
+import org.openjdk.jmh.annotations.State;
+import org.openjdk.jmh.annotations.Threads;
+import org.openjdk.jmh.annotations.Warmup;
+
+@BenchmarkMode(Mode.SampleTime)
+@OutputTimeUnit(TimeUnit.NANOSECONDS)
+@Warmup(iterations = 3, time = 1)
+@Measurement(iterations = 6, time = 20)
+@Fork(value = 1,jvmArgsAppend = { "-Xmx256M", "-Djmh.executor=CUSTOM", "-Djmh.executor.class=org.apache.cassandra.test.microbench.FastThreadExecutor"})
+@Threads(4) // make sure this matches the number of _physical_cores_
+@State(Scope.Benchmark)
+public class AutoBoxingBench
+{
+
+    @Benchmark
+    public boolean booleanFromBooleanSupplier()
+    {
+        BooleanSupplier bs = () -> true;
+        return bs.getAsBoolean();
+    }
+
+    @Benchmark
+    public boolean booleanFromPlainSupplier()
+    {
+        Supplier<Boolean> bs = () -> true;
+        return bs.get();
+    }
+
+    @Benchmark
+    public int intFromIntSupplier()
+    {
+        IntSupplier bs = () -> 42;
+        return bs.getAsInt();
+    }
+
+    @Benchmark
+    public int intFromPlainSupplier()
+    {
+        Supplier<Integer> bs = () -> 42;
+        return bs.get();
+    }
+}

http://git-wip-us.apache.org/repos/asf/cassandra/blob/684e250b/test/unit/org/apache/cassandra/auth/jmx/AuthorizationProxyTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/auth/jmx/AuthorizationProxyTest.java b/test/unit/org/apache/cassandra/auth/jmx/AuthorizationProxyTest.java
index 84282e0..924d467 100644
--- a/test/unit/org/apache/cassandra/auth/jmx/AuthorizationProxyTest.java
+++ b/test/unit/org/apache/cassandra/auth/jmx/AuthorizationProxyTest.java
@@ -20,8 +20,9 @@ package org.apache.cassandra.auth.jmx;
 
 import java.util.*;
 import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.function.BooleanSupplier;
 import java.util.function.Function;
-import java.util.function.Supplier;
+import java.util.function.Predicate;
 import java.util.stream.Collectors;
 import javax.management.MalformedObjectNameException;
 import javax.management.ObjectName;
@@ -495,9 +496,9 @@ public class AuthorizationProxyTest
     {
         Function<RoleResource, Set<PermissionDetails>> getPermissions;
         Function<ObjectName, Set<ObjectName>> queryNames;
-        Function<RoleResource, Boolean> isSuperuser;
-        Supplier<Boolean> isAuthzRequired;
-        Supplier<Boolean> isAuthSetupComplete = () -> true;
+        Predicate<RoleResource> isSuperuser;
+        BooleanSupplier isAuthzRequired;
+        BooleanSupplier isAuthSetupComplete = () -> true;
 
         AuthorizationProxy build()
         {
@@ -532,19 +533,19 @@ public class AuthorizationProxyTest
             return this;
         }
 
-        ProxyBuilder isSuperuser(Function<RoleResource, Boolean> f)
+        ProxyBuilder isSuperuser(Predicate<RoleResource> f)
         {
             isSuperuser = f;
             return this;
         }
 
-        ProxyBuilder isAuthzRequired(Supplier<Boolean> s)
+        ProxyBuilder isAuthzRequired(BooleanSupplier s)
         {
             isAuthzRequired = s;
             return this;
         }
 
-        ProxyBuilder isAuthSetupComplete(Supplier<Boolean> s)
+        ProxyBuilder isAuthSetupComplete(BooleanSupplier s)
         {
             isAuthSetupComplete = s;
             return this;
@@ -562,17 +563,17 @@ public class AuthorizationProxyTest
                 this.queryNames = f;
             }
 
-            void setIsSuperuser(Function<RoleResource, Boolean> f)
+            void setIsSuperuser(Predicate<RoleResource> f)
             {
                 this.isSuperuser = f;
             }
 
-            void setIsAuthzRequired(Supplier<Boolean> s)
+            void setIsAuthzRequired(BooleanSupplier s)
             {
                 this.isAuthzRequired = s;
             }
 
-            void setIsAuthSetupComplete(Supplier<Boolean> s)
+            void setIsAuthSetupComplete(BooleanSupplier s)
             {
                 this.isAuthSetupComplete = s;
             }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/684e250b/test/unit/org/apache/cassandra/db/compaction/CompactionControllerTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/compaction/CompactionControllerTest.java b/test/unit/org/apache/cassandra/db/compaction/CompactionControllerTest.java
index 40693fa..0ab714a 100644
--- a/test/unit/org/apache/cassandra/db/compaction/CompactionControllerTest.java
+++ b/test/unit/org/apache/cassandra/db/compaction/CompactionControllerTest.java
@@ -20,6 +20,7 @@ package org.apache.cassandra.db.compaction;
 
 import java.nio.ByteBuffer;
 import java.util.Set;
+import java.util.function.LongPredicate;
 import java.util.function.Predicate;
 
 import com.google.common.collect.Sets;
@@ -203,7 +204,7 @@ public class CompactionControllerTest extends SchemaLoader
         .applyUnsafe();
     }
 
-    private void assertPurgeBoundary(Predicate<Long> evaluator, long boundary)
+    private void assertPurgeBoundary(LongPredicate evaluator, long boundary)
     {
         assertFalse(evaluator.test(boundary));
         assertTrue(evaluator.test(boundary - 1));

http://git-wip-us.apache.org/repos/asf/cassandra/blob/684e250b/test/unit/org/apache/cassandra/db/rows/UnfilteredRowIteratorsMergeTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/rows/UnfilteredRowIteratorsMergeTest.java b/test/unit/org/apache/cassandra/db/rows/UnfilteredRowIteratorsMergeTest.java
index 8c99057..d6a968e 100644
--- a/test/unit/org/apache/cassandra/db/rows/UnfilteredRowIteratorsMergeTest.java
+++ b/test/unit/org/apache/cassandra/db/rows/UnfilteredRowIteratorsMergeTest.java
@@ -19,7 +19,7 @@ package org.apache.cassandra.db.rows;
 
 import java.nio.ByteBuffer;
 import java.util.*;
-import java.util.function.Function;
+import java.util.function.IntUnaryOperator;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
@@ -112,7 +112,7 @@ public class UnfilteredRowIteratorsMergeTest
                 System.out.println("\nSeed " + seed);
 
             Random r = new Random(seed);
-            List<Function<Integer, Integer>> timeGenerators = ImmutableList.of(
+            List<IntUnaryOperator> timeGenerators = ImmutableList.of(
                     x -> -1,
                     x -> DEL_RANGE,
                     x -> r.nextInt(DEL_RANGE)
@@ -169,7 +169,7 @@ public class UnfilteredRowIteratorsMergeTest
     }
 
     @SuppressWarnings("unused")
-    private List<Unfiltered> generateSource(Random r, Function<Integer, Integer> timeGenerator)
+    private List<Unfiltered> generateSource(Random r, IntUnaryOperator timeGenerator)
     {
         int[] positions = new int[ITEMS + 1];
         for (int i=0; i<ITEMS; ++i)
@@ -387,10 +387,10 @@ public class UnfilteredRowIteratorsMergeTest
         return Clustering.make(Int32Type.instance.decompose(i));
     }
 
-    static Row emptyRowAt(int pos, Function<Integer, Integer> timeGenerator)
+    static Row emptyRowAt(int pos, IntUnaryOperator timeGenerator)
     {
         final Clustering clustering = clusteringFor(pos);
-        final LivenessInfo live = LivenessInfo.create(timeGenerator.apply(pos), nowInSec);
+        final LivenessInfo live = LivenessInfo.create(timeGenerator.applyAsInt(pos), nowInSec);
         return BTreeRow.noCellLiveRow(clustering, live);
     }
 

http://git-wip-us.apache.org/repos/asf/cassandra/blob/684e250b/test/unit/org/apache/cassandra/db/rows/UnfilteredRowsGenerator.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/rows/UnfilteredRowsGenerator.java b/test/unit/org/apache/cassandra/db/rows/UnfilteredRowsGenerator.java
index 1f8793a..71b28e8 100644
--- a/test/unit/org/apache/cassandra/db/rows/UnfilteredRowsGenerator.java
+++ b/test/unit/org/apache/cassandra/db/rows/UnfilteredRowsGenerator.java
@@ -19,7 +19,7 @@ package org.apache.cassandra.db.rows;
 
 import java.nio.ByteBuffer;
 import java.util.*;
-import java.util.function.Function;
+import java.util.function.IntUnaryOperator;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -111,7 +111,7 @@ public class UnfilteredRowsGenerator
         }
     }
 
-    public List<Unfiltered> generateSource(Random r, int items, int range, int del_range, Function<Integer, Integer> timeGenerator)
+    public List<Unfiltered> generateSource(Random r, int items, int range, int del_range, IntUnaryOperator timeGenerator)
     {
         int[] positions = new int[items + 1];
         for (int i=0; i<items; ++i)
@@ -219,10 +219,10 @@ public class UnfilteredRowsGenerator
         return out;
     }
 
-    static Row emptyRowAt(int pos, Function<Integer, Integer> timeGenerator)
+    static Row emptyRowAt(int pos, IntUnaryOperator timeGenerator)
     {
         final Clustering clustering = clusteringFor(pos);
-        final LivenessInfo live = LivenessInfo.create(timeGenerator.apply(pos), UnfilteredRowIteratorsMergeTest.nowInSec);
+        final LivenessInfo live = LivenessInfo.create(timeGenerator.applyAsInt(pos), UnfilteredRowIteratorsMergeTest.nowInSec);
         return BTreeRow.noCellLiveRow(clustering, live);
     }
 

http://git-wip-us.apache.org/repos/asf/cassandra/blob/684e250b/test/unit/org/apache/cassandra/service/NativeTransportServiceTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/service/NativeTransportServiceTest.java b/test/unit/org/apache/cassandra/service/NativeTransportServiceTest.java
index 04cc9dd..334a9af 100644
--- a/test/unit/org/apache/cassandra/service/NativeTransportServiceTest.java
+++ b/test/unit/org/apache/cassandra/service/NativeTransportServiceTest.java
@@ -18,6 +18,7 @@
 package org.apache.cassandra.service;
 
 import java.util.Arrays;
+import java.util.function.BooleanSupplier;
 import java.util.function.Consumer;
 import java.util.function.Supplier;
 import java.util.stream.Collectors;
@@ -84,12 +85,12 @@ public class NativeTransportServiceTest
     public void testDestroy()
     {
         withService((NativeTransportService service) -> {
-            Supplier<Boolean> allTerminated = () ->
+            BooleanSupplier allTerminated = () ->
                                               service.getWorkerGroup().isShutdown() && service.getWorkerGroup().isTerminated() &&
                                               service.getEventExecutor().isShutdown() && service.getEventExecutor().isTerminated();
-            assertFalse(allTerminated.get());
+            assertFalse(allTerminated.getAsBoolean());
             service.destroy();
-            assertTrue(allTerminated.get());
+            assertTrue(allTerminated.getAsBoolean());
         });
     }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org