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 <[email protected]> Authored: Sat Oct 28 16:50:24 2017 -0700 Committer: Jason Brown <[email protected]> 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: [email protected] For additional commands, e-mail: [email protected]
