Package org.apache.cassandra.utils
Class FBUtilities
- java.lang.Object
-
- org.apache.cassandra.utils.FBUtilities
-
public class FBUtilities extends java.lang.Object
-
-
Field Summary
Fields Modifier and Type Field Description static int
ASM_BYTECODE_VERSION
static boolean
isLinux
static int
MAX_UNSIGNED_SHORT
static java.math.BigInteger
TWO
static java.lang.String
UNKNOWN_GIT_SHA
static java.lang.String
UNKNOWN_RELEASE_VERSION
-
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 newFuture
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 givencmd
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 classstatic 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 Descriptorstatic 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 givenMap
.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>>
FwaitOnFirstFuture(java.lang.Iterable<? extends F> futures)
static <T,F extends java.util.concurrent.Future<? extends T>>
FwaitOnFirstFuture(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.
-
-
-
Field Detail
-
UNKNOWN_RELEASE_VERSION
public static final java.lang.String UNKNOWN_RELEASE_VERSION
- See Also:
- Constant Field Values
-
UNKNOWN_GIT_SHA
public static final java.lang.String UNKNOWN_GIT_SHA
- See Also:
- Constant Field Values
-
TWO
public static final java.math.BigInteger TWO
-
isLinux
public static final boolean isLinux
-
MAX_UNSIGNED_SHORT
public static final int MAX_UNSIGNED_SHORT
- See Also:
- Constant Field Values
-
ASM_BYTECODE_VERSION
public static final int ASM_BYTECODE_VERSION
- See Also:
- Constant Field Values
-
-
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)
-
resourceToFile
public static java.lang.String resourceToFile(java.lang.String filename) throws ConfigurationException
- Throws:
ConfigurationException
-
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 toFuture.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 newFuture
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
-
newPartitioner
public static IPartitioner newPartitioner(java.lang.String partitionerClassName) throws ConfigurationException
- Throws:
ConfigurationException
-
newAuthorizer
public static IAuthorizer newAuthorizer(java.lang.String className) throws ConfigurationException
- Throws:
ConfigurationException
-
newAuthenticator
public static IAuthenticator newAuthenticator(java.lang.String className) throws ConfigurationException
- Throws:
ConfigurationException
-
newRoleManager
public static IRoleManager newRoleManager(java.lang.String className) throws ConfigurationException
- Throws:
ConfigurationException
-
newNetworkAuthorizer
public static INetworkAuthorizer newNetworkAuthorizer(java.lang.String className)
-
newAuditLogger
public static IAuditLogger newAuditLogger(java.lang.String className, java.util.Map<java.lang.String,java.lang.String> parameters) throws ConfigurationException
- Throws:
ConfigurationException
-
newSslContextFactory
public static ISslContextFactory newSslContextFactory(java.lang.String className, java.util.Map<java.lang.String,java.lang.Object> parameters) throws ConfigurationException
- Throws:
ConfigurationException
-
newCryptoProvider
public static AbstractCryptoProvider newCryptoProvider(java.lang.String className, java.util.Map<java.lang.String,java.lang.String> parameters) throws ConfigurationException
- Throws:
ConfigurationException
-
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 givenMap
.- 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 classfieldName
- - 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 givencmd
to finish. If the process does not finish withintimeout
, it will be destroyed.- Parameters:
env
- additional environment variables to settimeout
- timeout for the process to finish, or zero/null to wait foreveroutBufSize
- the maximum size of the collected std output; the overflow will be discardederrBufSize
- the maximum size of the collected std error; the overflow will be discardedcmd
- 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()
-
-