Class FBUtilities


  • public class FBUtilities
    extends java.lang.Object
    • Constructor Summary

      Constructors 
      Constructor Description
      FBUtilities()  
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static long abs​(long index)  
      static long align​(long val, int boundary)  
      static <T> Future<java.util.List<T>> allOf​(java.util.Collection<? extends Future<? extends T>> futures)
      Returns a new Future wrapping the given list of futures and returning a list of their results.
      static java.lang.String camelToSnake​(java.lang.String camel)  
      static File cassandraTriggerDir()  
      static <T> java.lang.Class<T> classForName​(java.lang.String classname, java.lang.String readable)  
      static <T> CloseableIterator<T> closeableIterator​(java.util.Iterator<T> iterator)  
      static void closeAll​(java.util.Collection<? extends java.lang.AutoCloseable> l)  
      static void closeQuietly​(java.lang.Object o)  
      static int compareUnsigned​(byte[] bytes1, byte[] bytes2)  
      static int compareUnsigned​(byte[] bytes1, byte[] bytes2, int offset1, int offset2, int len1, int len2)  
      static <T> T construct​(java.lang.String classname, java.lang.String readable)
      Constructs an instance of the given class, which must have a no-arg or default constructor.
      static long copy​(java.io.InputStream from, java.io.OutputStream to, long limit)  
      static <T> java.util.NavigableSet<T> emptySortedSet​(java.util.Comparator<? super T> comparator)  
      static void exec​(java.lang.ProcessBuilder pb)
      Starts and waits for the given @param pb to finish.
      static java.lang.String exec​(java.util.Map<java.lang.String,​java.lang.String> env, java.time.Duration timeout, int outBufSize, int errBufSize, java.lang.String... cmd)
      Starts and waits for the given cmd to finish.
      static int getAvailableProcessors()  
      static InetAddressAndPort getBroadcastAddressAndPort()
      Get the broadcast address and port for intra-cluster storage traffic.
      static InetAddressAndPort getBroadcastNativeAddressAndPort()
      This returns the address that is bound to for the native protocol for communicating with clients.
      static java.lang.String getGitSHA()  
      static java.net.InetAddress getJustBroadcastAddress()
      Retrieve just the broadcast address but not the port.
      static java.net.InetAddress getJustBroadcastNativeAddress()
      This returns the address that is bound to for the native protocol for communicating with clients.
      static java.net.InetAddress getJustLocalAddress()
      Please use getJustBroadcastAddress instead.
      static com.vdurmont.semver4j.Semver getKernelVersion()  
      static InetAddressAndPort getLocalAddressAndPort()
      The address and port to listen on for intra-cluster storage traffic (not client).
      static java.lang.String getNetworkInterface​(java.net.InetAddress localAddress)  
      static java.lang.String getPreviousReleaseVersionString()  
      static java.lang.reflect.Field getProtectedField​(java.lang.Class klass, java.lang.String fieldName)
      Used to get access to protected/private field of the specified class
      static java.lang.String getReleaseVersionMajor()  
      static java.lang.String getReleaseVersionString()  
      static File getToolsOutputDirectory()  
      static <T> com.google.common.collect.ImmutableList<T> immutableListWithFilteredNulls​(T... values)  
      static <T> T instanceOrConstruct​(java.lang.String classname, java.lang.String readable)
      Constructs an instance of the given class, which must have a no-arg or default constructor.
      static Pair<java.math.BigInteger,​java.lang.Boolean> midpoint​(java.math.BigInteger left, java.math.BigInteger right, int sigbits)
      Given two bit arrays represented as BigIntegers, containing the given number of significant bits, calculate a midpoint.
      static IAuditLogger newAuditLogger​(java.lang.String className, java.util.Map<java.lang.String,​java.lang.String> parameters)  
      static IAuthenticator newAuthenticator​(java.lang.String className)  
      static IAuthorizer newAuthorizer​(java.lang.String className)  
      static AbstractCryptoProvider newCryptoProvider​(java.lang.String className, java.util.Map<java.lang.String,​java.lang.String> parameters)  
      static java.security.MessageDigest newMessageDigest​(java.lang.String algorithm)  
      static INetworkAuthorizer newNetworkAuthorizer​(java.lang.String className)  
      static IPartitioner newPartitioner​(java.lang.String partitionerClassName)  
      static IPartitioner newPartitioner​(Descriptor desc)
      Create a new instance of a partitioner defined in an SSTable Descriptor
      static IRoleManager newRoleManager​(java.lang.String className)  
      static ISslContextFactory newSslContextFactory​(java.lang.String className, java.util.Map<java.lang.String,​java.lang.Object> parameters)  
      static java.time.Instant now()  
      static long nowInSeconds()  
      static double parseHumanReadable​(java.lang.String datum, java.lang.String separator, java.lang.String unit)
      Parse a human-readable value printed using one of the methods above.
      static long parseHumanReadableBytes​(java.lang.String value)  
      static double parsePercent​(java.lang.String value)
      Parse a double where both a direct value and a percentage are accepted.
      static java.lang.String prettyPrintBinary​(double value, java.lang.String unit, java.lang.String separator)
      Convert the given value to a human-readable string using binary (i.e.
      static java.lang.String prettyPrintDecimal​(double value, java.lang.String unit, java.lang.String separator)
      Convert the given value to a human-readable string using decimal (i.e.
      static java.lang.String prettyPrintMemory​(long size)
      Convert the given size in bytes to a human-readable value using binary (i.e.
      static java.lang.String prettyPrintMemory​(long size, java.lang.String separator)
      Convert the given size in bytes to a human-readable value using binary (i.e.
      static java.lang.String prettyPrintMemoryPerSecond​(long rate)  
      static java.lang.String prettyPrintMemoryPerSecond​(long bytes, long timeInNano)  
      static void preventIllegalAccessWarnings()
      Hack to prevent the ugly "illegal access" warnings in Java 11+ like the following.
      static void reset()  
      static java.lang.String resourceToFile​(java.lang.String filename)  
      static <T> byte[] serialize​(T object, IVersionedSerializer<T> serializer, int version)  
      static void setAvailableProcessors​(int value)  
      static void setBroadcastInetAddress​(java.net.InetAddress addr)
      THIS IS FOR TESTING ONLY!!
      static void setBroadcastInetAddressAndPort​(InetAddressAndPort addr)
      THIS IS FOR TESTING ONLY!!
      static void setKernelVersionSupplier​(java.util.function.Supplier<com.vdurmont.semver4j.Semver> supplier)  
      static void setPreviousReleaseVersionString​(java.lang.String previousReleaseVersionString)  
      static <T> java.util.NavigableSet<T> singleton​(T column, java.util.Comparator<? super T> comparator)  
      static void sleepQuietly​(long millis)  
      static void sortSampledKeys​(java.util.List<DecoratedKey> keys, Range<Token> range)  
      static long timestampMicros()  
      static java.lang.String toString​(java.util.Map<?,​?> map)
      Make straing out of the given Map.
      static byte[] toWriteUTFBytes​(java.lang.String s)  
      static void updateChecksum​(java.util.zip.CRC32 checksum, java.nio.ByteBuffer buffer)
      Updates checksum with the provided ByteBuffer.
      static void updateChecksum​(java.util.zip.CRC32 checksum, java.nio.ByteBuffer buffer, int offset, int length)
      Updates checksum with the provided ByteBuffer at the given offset + length.
      static void updateChecksumInt​(java.util.zip.Checksum checksum, int v)  
      static <T,​F extends java.util.concurrent.Future<? extends T>>
      F
      waitOnFirstFuture​(java.lang.Iterable<? extends F> futures)  
      static <T,​F extends java.util.concurrent.Future<? extends T>>
      F
      waitOnFirstFuture​(java.lang.Iterable<? extends F> futures, long delay)
      Only wait for the first future to finish from a list of futures.
      static <T> T waitOnFuture​(java.util.concurrent.Future<T> future)  
      static <T> java.util.List<T> waitOnFutures​(java.lang.Iterable<? extends java.util.concurrent.Future<? extends T>> futures)  
      static <T> java.util.List<T> waitOnFutures​(java.lang.Iterable<? extends java.util.concurrent.Future<? extends T>> futures, long timeout, java.util.concurrent.TimeUnit units)
      Block for a collection of futures, with optional timeout.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • UNKNOWN_RELEASE_VERSION

        public static final java.lang.String UNKNOWN_RELEASE_VERSION
        See Also:
        Constant Field Values
      • TWO

        public static final java.math.BigInteger TWO
      • isLinux

        public static final boolean isLinux
    • Constructor Detail

      • FBUtilities

        public FBUtilities()
    • Method Detail

      • setAvailableProcessors

        public static void setAvailableProcessors​(int value)
      • setKernelVersionSupplier

        public static void setKernelVersionSupplier​(java.util.function.Supplier<com.vdurmont.semver4j.Semver> supplier)
      • getAvailableProcessors

        public static int getAvailableProcessors()
      • newMessageDigest

        public static java.security.MessageDigest newMessageDigest​(java.lang.String algorithm)
      • getJustLocalAddress

        public static java.net.InetAddress getJustLocalAddress()
        Please use getJustBroadcastAddress instead. You need this only when you have to listen/connect. It's also missing the port you should be using. 99% of code doesn't want this.
      • getLocalAddressAndPort

        public static InetAddressAndPort getLocalAddressAndPort()
        The address and port to listen on for intra-cluster storage traffic (not client). Use this to get the correct stuff to listen on for intra-cluster communication.
      • getJustBroadcastAddress

        public static java.net.InetAddress getJustBroadcastAddress()
        Retrieve just the broadcast address but not the port. This is almost always the wrong thing to be using because it's ambiguous since you need the address and port to identify a node. You want getBroadcastAddressAndPort
      • getBroadcastAddressAndPort

        public static InetAddressAndPort getBroadcastAddressAndPort()
        Get the broadcast address and port for intra-cluster storage traffic. This the address to advertise that uniquely identifies the node and is reachable from everywhere. This is the one you want unless you are trying to connect to the local address specifically.
      • setBroadcastInetAddress

        public static void setBroadcastInetAddress​(java.net.InetAddress addr)
        THIS IS FOR TESTING ONLY!!
      • setBroadcastInetAddressAndPort

        public static void setBroadcastInetAddressAndPort​(InetAddressAndPort addr)
        THIS IS FOR TESTING ONLY!!
      • getJustBroadcastNativeAddress

        public static java.net.InetAddress getJustBroadcastNativeAddress()
        This returns the address that is bound to for the native protocol for communicating with clients. This is ambiguous because it doesn't include the port and it's almost always the wrong thing to be using you want getBroadcastNativeAddressAndPort
      • getBroadcastNativeAddressAndPort

        public static InetAddressAndPort getBroadcastNativeAddressAndPort()
        This returns the address that is bound to for the native protocol for communicating with clients. This is almost always what you need to identify a node and how to connect to it as a client.
      • getNetworkInterface

        public static java.lang.String getNetworkInterface​(java.net.InetAddress localAddress)
      • midpoint

        public static Pair<java.math.BigInteger,​java.lang.Boolean> midpoint​(java.math.BigInteger left,
                                                                                  java.math.BigInteger right,
                                                                                  int sigbits)
        Given two bit arrays represented as BigIntegers, containing the given number of significant bits, calculate a midpoint.
        Parameters:
        left - The left point.
        right - The right point.
        sigbits - The number of bits in the points that are significant.
        Returns:
        A midpoint that will compare bitwise halfway between the params, and a boolean representing whether a non-zero lsbit remainder was generated.
      • compareUnsigned

        public static int compareUnsigned​(byte[] bytes1,
                                          byte[] bytes2,
                                          int offset1,
                                          int offset2,
                                          int len1,
                                          int len2)
      • compareUnsigned

        public static int compareUnsigned​(byte[] bytes1,
                                          byte[] bytes2)
      • sortSampledKeys

        public static void sortSampledKeys​(java.util.List<DecoratedKey> keys,
                                           Range<Token> range)
      • cassandraTriggerDir

        public static File cassandraTriggerDir()
      • setPreviousReleaseVersionString

        public static void setPreviousReleaseVersionString​(java.lang.String previousReleaseVersionString)
      • getPreviousReleaseVersionString

        public static java.lang.String getPreviousReleaseVersionString()
      • getReleaseVersionString

        public static java.lang.String getReleaseVersionString()
      • getGitSHA

        public static java.lang.String getGitSHA()
      • getReleaseVersionMajor

        public static java.lang.String getReleaseVersionMajor()
      • timestampMicros

        public static long timestampMicros()
      • nowInSeconds

        public static long nowInSeconds()
      • now

        public static java.time.Instant now()
      • waitOnFutures

        public static <T> java.util.List<T> waitOnFutures​(java.lang.Iterable<? extends java.util.concurrent.Future<? extends T>> futures)
      • waitOnFutures

        public static <T> java.util.List<T> waitOnFutures​(java.lang.Iterable<? extends java.util.concurrent.Future<? extends T>> futures,
                                                          long timeout,
                                                          java.util.concurrent.TimeUnit units)
        Block for a collection of futures, with optional timeout.
        Parameters:
        futures -
        timeout - The number of units to wait in total. If this value is less than or equal to zero, no tiemout value will be passed to Future.get().
        units - The units of timeout.
      • waitOnFuture

        public static <T> T waitOnFuture​(java.util.concurrent.Future<T> future)
      • waitOnFirstFuture

        public static <T,​F extends java.util.concurrent.Future<? extends T>> F waitOnFirstFuture​(java.lang.Iterable<? extends F> futures)
      • waitOnFirstFuture

        public static <T,​F extends java.util.concurrent.Future<? extends T>> F waitOnFirstFuture​(java.lang.Iterable<? extends F> futures,
                                                                                                       long delay)
        Only wait for the first future to finish from a list of futures. Will block until at least 1 future finishes.
        Parameters:
        futures - The futures to wait on
        Returns:
        future that completed.
      • allOf

        public static <T> Future<java.util.List<T>> allOf​(java.util.Collection<? extends Future<? extends T>> futures)
        Returns a new Future wrapping the given list of futures and returning a list of their results.
      • newPartitioner

        public static IPartitioner newPartitioner​(Descriptor desc)
                                           throws java.io.IOException
        Create a new instance of a partitioner defined in an SSTable Descriptor
        Parameters:
        desc - Descriptor of an sstable
        Returns:
        a new IPartitioner instance
        Throws:
        java.io.IOException
      • newNetworkAuthorizer

        public static INetworkAuthorizer newNetworkAuthorizer​(java.lang.String className)
      • classForName

        public static <T> java.lang.Class<T> classForName​(java.lang.String classname,
                                                          java.lang.String readable)
                                                   throws ConfigurationException
        Parameters:
        classname - Fully qualified classname.
        readable - Descriptive noun for the role the class plays.
        Returns:
        The Class for the given name.
        Throws:
        ConfigurationException - If the class cannot be found.
      • instanceOrConstruct

        public static <T> T instanceOrConstruct​(java.lang.String classname,
                                                java.lang.String readable)
                                         throws ConfigurationException
        Constructs an instance of the given class, which must have a no-arg or default constructor.
        Parameters:
        classname - Fully qualified classname.
        readable - Descriptive noun for the role the class plays.
        Throws:
        ConfigurationException - If the class cannot be found.
      • construct

        public static <T> T construct​(java.lang.String classname,
                                      java.lang.String readable)
                               throws ConfigurationException
        Constructs an instance of the given class, which must have a no-arg or default constructor.
        Parameters:
        classname - Fully qualified classname.
        readable - Descriptive noun for the role the class plays.
        Throws:
        ConfigurationException - If the class cannot be found.
      • singleton

        public static <T> java.util.NavigableSet<T> singleton​(T column,
                                                              java.util.Comparator<? super T> comparator)
      • emptySortedSet

        public static <T> java.util.NavigableSet<T> emptySortedSet​(java.util.Comparator<? super T> comparator)
      • toString

        @Nonnull
        public static java.lang.String toString​(@Nullable
                                                java.util.Map<?,​?> map)
        Make straing out of the given Map.
        Parameters:
        map - Map to make string.
        Returns:
        String representation of all entries in the map, where key and value pair is concatenated with ':'.
      • getProtectedField

        public static java.lang.reflect.Field getProtectedField​(java.lang.Class klass,
                                                                java.lang.String fieldName)
        Used to get access to protected/private field of the specified class
        Parameters:
        klass - - name of the class
        fieldName - - name of the field
        Returns:
        Field or null on error
      • closeableIterator

        public static <T> CloseableIterator<T> closeableIterator​(java.util.Iterator<T> iterator)
      • prettyPrintMemory

        public static java.lang.String prettyPrintMemory​(long size)
        Convert the given size in bytes to a human-readable value using binary (i.e. 2^10-based) modifiers. For example, 1.000KiB, 2.100GiB etc., up to 8.000 EiB.
        Parameters:
        size - Number to convert.
      • prettyPrintMemory

        public static java.lang.String prettyPrintMemory​(long size,
                                                         java.lang.String separator)
        Convert the given size in bytes to a human-readable value using binary (i.e. 2^10-based) modifiers. For example, 1.000KiB, 2.100GiB etc., up to 8.000 EiB.
        Parameters:
        size - Number to convert.
        separator - Separator between the number and the (modified) unit.
      • prettyPrintBinary

        public static java.lang.String prettyPrintBinary​(double value,
                                                         java.lang.String unit,
                                                         java.lang.String separator)
        Convert the given value to a human-readable string using binary (i.e. 2^10-based) modifiers. If the number is outside the modifier range (i.e. < 1 qi or > 1 Qi), it will be printed as v*2^e where e is a multiple of 10 with sign. For example, 1.000KiB, 2.100 miB/s, 7.006*2^+150, -Infinity.
        Parameters:
        value - Number to convert.
        separator - Separator between the number and the (modified) unit.
      • prettyPrintDecimal

        public static java.lang.String prettyPrintDecimal​(double value,
                                                          java.lang.String unit,
                                                          java.lang.String separator)
        Convert the given value to a human-readable string using decimal (i.e. 10^3-based) modifiers. If the number is outside the modifier range (i.e. < 1 qi or > 1 Qi), it will be printed as vEe where e is a multiple of 3 with sign. For example, 1.000km, 2.100 ms, 10E+45, NaN.
        Parameters:
        value - Number to convert.
        separator - Separator between the number and the (modified) unit.
      • prettyPrintMemoryPerSecond

        public static java.lang.String prettyPrintMemoryPerSecond​(long rate)
      • prettyPrintMemoryPerSecond

        public static java.lang.String prettyPrintMemoryPerSecond​(long bytes,
                                                                  long timeInNano)
      • parseHumanReadable

        public static double parseHumanReadable​(java.lang.String datum,
                                                java.lang.String separator,
                                                java.lang.String unit)
        Parse a human-readable value printed using one of the methods above. Understands both binary and decimal modifiers, as well as decimal exponents using the E notation and binary exponents using *2^e.
        Parameters:
        datum - The human-readable number.
        separator - Expected separator, null to accept any amount of whitespace.
        unit - Expected unit. If null, the method will accept any string as unit, i.e. it will parse the number at the start of the supplied string and ignore any remainder.
        Returns:
        The parsed value.
      • parseHumanReadableBytes

        public static long parseHumanReadableBytes​(java.lang.String value)
      • parsePercent

        public static double parsePercent​(java.lang.String value)
        Parse a double where both a direct value and a percentage are accepted. For example, for inputs "0.1" and "10%", this function will return 0.1.
      • exec

        public static void exec​(java.lang.ProcessBuilder pb)
                         throws java.io.IOException
        Starts and waits for the given @param pb to finish.
        Throws:
        java.io.IOException - on non-zero exit code
      • exec

        public static java.lang.String exec​(java.util.Map<java.lang.String,​java.lang.String> env,
                                            java.time.Duration timeout,
                                            int outBufSize,
                                            int errBufSize,
                                            java.lang.String... cmd)
                                     throws java.io.IOException,
                                            java.util.concurrent.TimeoutException,
                                            java.lang.InterruptedException
        Starts and waits for the given cmd to finish. If the process does not finish within timeout, it will be destroyed.
        Parameters:
        env - additional environment variables to set
        timeout - timeout for the process to finish, or zero/null to wait forever
        outBufSize - the maximum size of the collected std output; the overflow will be discarded
        errBufSize - the maximum size of the collected std error; the overflow will be discarded
        cmd - the command to execute
        Returns:
        the std output of the process up to the size specified by outBufSize
        Throws:
        java.io.IOException
        java.util.concurrent.TimeoutException
        java.lang.InterruptedException
      • updateChecksumInt

        public static void updateChecksumInt​(java.util.zip.Checksum checksum,
                                             int v)
      • updateChecksum

        public static void updateChecksum​(java.util.zip.CRC32 checksum,
                                          java.nio.ByteBuffer buffer,
                                          int offset,
                                          int length)
        Updates checksum with the provided ByteBuffer at the given offset + length. Resets position and limit back to their original values on return. This method is *NOT* thread-safe.
      • updateChecksum

        public static void updateChecksum​(java.util.zip.CRC32 checksum,
                                          java.nio.ByteBuffer buffer)
        Updates checksum with the provided ByteBuffer. Resets position back to its original values on return. This method is *NOT* thread-safe.
      • abs

        public static long abs​(long index)
      • serialize

        public static <T> byte[] serialize​(T object,
                                           IVersionedSerializer<T> serializer,
                                           int version)
      • copy

        public static long copy​(java.io.InputStream from,
                                java.io.OutputStream to,
                                long limit)
                         throws java.io.IOException
        Throws:
        java.io.IOException
      • getToolsOutputDirectory

        public static File getToolsOutputDirectory()
      • closeAll

        public static void closeAll​(java.util.Collection<? extends java.lang.AutoCloseable> l)
                             throws java.lang.Exception
        Throws:
        java.lang.Exception
      • toWriteUTFBytes

        public static byte[] toWriteUTFBytes​(java.lang.String s)
      • sleepQuietly

        public static void sleepQuietly​(long millis)
      • align

        public static long align​(long val,
                                 int boundary)
      • reset

        public static void reset()
      • preventIllegalAccessWarnings

        public static void preventIllegalAccessWarnings()
        Hack to prevent the ugly "illegal access" warnings in Java 11+ like the following.
      • camelToSnake

        public static java.lang.String camelToSnake​(java.lang.String camel)
      • immutableListWithFilteredNulls

        @SafeVarargs
        public static <T> com.google.common.collect.ImmutableList<T> immutableListWithFilteredNulls​(T... values)
      • closeQuietly

        public static void closeQuietly​(java.lang.Object o)
      • getKernelVersion

        public static com.vdurmont.semver4j.Semver getKernelVersion()