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