org.jgroups.util

Class Util


public class Util
extends java.lang.Object

Collection of various utility routines that can not be assigned to other classes.

Field Summary

static String
DIAG_GROUP
static int
MAX_PORT

Method Summary

static String
activeThreads()
static String
array2String(boolean[] array)
static String
array2String(int[] array)
static String
array2String(long[] array)
static LinkedList
byteBufferToMessageList(byte[] buffer, int offset, int length)
static boolean
checkForLinux()
static boolean
checkForSolaris()
static boolean
checkForWindows()
static void
closeInputStream(InputStream inp)
static void
closeOutputStream(OutputStream out)
static byte[]
collectionToByteBuffer(Collection c)
static java.util.List
computeFragOffsets(byte[] buf, int frag_size)
static java.util.List
computeFragOffsets(int offset, int length, int frag_size)
Given a buffer and a fragmentation size, compute a list of fragmentation offset/length pairs, and return them in a list.
static void
crash()
static DatagramSocket
createDatagramSocket(InetAddress addr, int port)
Creates a DatagramSocket bound to addr.
static ServerSocket
createServerSocket(InetAddress bind_addr, int start_port)
static ServerSocket
createServerSocket(int start_port)
Finds first available port starting at start_port and returns server socket
static byte[]
defragmentBuffer(fragments[][] )
Concatenates smaller fragments into entire buffers.
static Vector
determineLeftMembers(Vector old_mbrs, Vector new_mbrs)
Returns all members that left between 2 views.
static void
doubleWrite(byte[] buf, OutputStream out)
Makes sure that we detect when a peer connection is in the closed state (not closed while we send data, but before we send data).
static void
doubleWrite(byte[] buf, int offset, int length, OutputStream out)
Makes sure that we detect when a peer connection is in the closed state (not closed while we send data, but before we send data).
static String
dumpQueue(Queue q)
Debugging method used to dump the content of a protocol queue in a condensed form.
static void
dumpStack(boolean exit)
static boolean
fileExists(String fname)
static byte[][]
fragmentBuffer(byte[] buf, int frag_size)
static byte[][]
fragmentBuffer(byte[] buf, int frag_size, int length)
Fragments a byte buffer into smaller fragments of (max.) frag_size.
static List
getAllAvailableInterfaces()
static InetAddress
getFirstNonLoopbackAddress()
static String
getHostname()
static int
getJavaVersion()
static InputStream
getResourceAsStream(String name, Class clazz)
static String
getStackTrace(Throwable t)
static boolean
isBindAddressPropertyIgnored()
static Class
loadClass(String classname, Class clazz)
Tries to load the class from the current thread's context class loader.
static void
main(args[] )
static boolean
match(Object obj1, Object obj2)
static boolean
match(long[] a1, long[] a2)
static String
memStats(boolean gc)
static Buffer
msgListToByteBuffer(LinkedList xmit_list)
Marshalls a list of messages.
static Object
objectFromByteBuffer(byte[] buffer)
Creates an object from a byte buffer
static byte[]
objectToByteBuffer(Object obj)
Serializes an object into a byte buffer.
static long[]
parseCommaDelimitedLongs(String s)
Parses comma-delimited longs; e.g., 2000,4000,8000.
static java.util.List
parseCommaDelimitedStrings(String l)
e.g.
static Object
pickRandomElement(Vector list)
static Vector
pickSubset(Vector members, double subset_percentage)
Selects a random subset of members according to subset_percentage and returns them.
static String
print(Throwable t)
static String
printBytes(long bytes)
static String
printEvent(Event evt)
static void
printFragments(frags[][] )
static String
printMembers(Vector v)
static String
printMessage(Message msg)
Tries to read an object from the message's buffer and prints it
static String
printMethodCall(Message msg)
Tries to read a MethodCall object from the message's buffer and prints it.
static String
printStackTrace(Throwable t)
Use with caution: lots of overhead
static void
printThreads()
static void
prompt(String s)
static long
random(long range)
Returns a random value in the range [1 - range]
static Address
readAddress(DataInputStream in)
static Collection
readAddresses(DataInputStream in, Class cl)
static byte[]
readByteBuffer(DataInputStream in)
static Streamable
readGenericStreamable(DataInputStream in)
static Object
readObject(DataInputStream in)
static Streamable
readStreamable(Class clazz, DataInputStream in)
static String
readString(DataInputStream in)
static boolean
sameHost(Address one, Address two)
Checks whether 2 Addresses are on the same host
static String
shortName(InetAddress hostname)
static String
shortName(String hostname)
static long
size(Collection addrs)
Returns the marshalled size of a Collection of Addresses.
static int
size(Address addr)
static long
sizeOf(Object inst)
static long
sizeOf(String classname)
static long
sizeOf(Streamable inst)
static void
sleep(long timeout)
Sleep for timeout msecs.
static void
sleep(long msecs, boolean busy_sleep)
On most UNIX systems, the minimum sleep time is 10-20ms.
static void
sleepRandom(long timeout)
Sleeps between 1 and timeout milliseconds, chosen randomly.
static Streamable
streamableFromByteBuffer(Class cl, byte[] buffer)
static byte[]
streamableToByteBuffer(Streamable obj)
static boolean
tossWeightedCoin(double probability)
Tosses a coin weighted with probability and returns true or false.
static void
writeAddress(Address addr, DataOutputStream out)
static void
writeAddresses(Collection v, DataOutputStream out)
Writes a Vector of Addresses.
static void
writeByteBuffer(byte[] buf, DataOutputStream out)
static void
writeFully(ByteBuffer buf, WritableByteChannel out)
if we were to register for OP_WRITE and send the remaining data on readyOps for this channel we have to either block the caller thread or queue the message buffers that may arrive while waiting for OP_WRITE.
static void
writeGenericStreamable(Streamable obj, DataOutputStream out)
static void
writeObject(Object obj, DataOutputStream out)
static void
writeStreamable(Streamable obj, DataOutputStream out)
static void
writeString(String s, DataOutputStream out)

Field Details

DIAG_GROUP

public static final String DIAG_GROUP

MAX_PORT

public static final int MAX_PORT
Field Value:
65535

Method Details

activeThreads

public static String activeThreads()

array2String

public static String array2String(boolean[] array)

array2String

public static String array2String(int[] array)

array2String

public static String array2String(long[] array)

byteBufferToMessageList

public static LinkedList byteBufferToMessageList(byte[] buffer,
                                                 int offset,
                                                 int length)
            throws Exception

checkForLinux

public static boolean checkForLinux()

checkForSolaris

public static boolean checkForSolaris()

checkForWindows

public static boolean checkForWindows()

closeInputStream

public static void closeInputStream(InputStream inp)

closeOutputStream

public static void closeOutputStream(OutputStream out)

collectionToByteBuffer

public static byte[] collectionToByteBuffer(Collection c)
            throws Exception

computeFragOffsets

public static java.util.List computeFragOffsets(byte[] buf,
                                                int frag_size)

computeFragOffsets

public static java.util.List computeFragOffsets(int offset,
                                                int length,
                                                int frag_size)
Given a buffer and a fragmentation size, compute a list of fragmentation offset/length pairs, and return them in a list. Example:
Buffer is 10 bytes, frag_size is 4 bytes. Return value will be ({0,4}, {4,4}, {8,2}). This is a total of 3 fragments: the first fragment starts at 0, and has a length of 4 bytes, the second fragment starts at offset 4 and has a length of 4 bytes, and the last fragment starts at offset 8 and has a length of 2 bytes.
Parameters:
frag_size -
Returns:
List. A List of offset/length pairs

crash

public static void crash()

createDatagramSocket

public static DatagramSocket createDatagramSocket(InetAddress addr,
                                                  int port)
            throws Exception
Creates a DatagramSocket bound to addr. If addr is null, socket won't be bound. If address is already in use, start_port will be incremented until a socket can be created.
Parameters:
addr - The InetAddress to which the socket should be bound. If null, the socket will not be bound.
port - The port which the socket should use. If 0, a random port will be used. If > 0, but port is already in use, it will be incremented until an unused port is found, or until MAX_PORT is reached.

createServerSocket

public static ServerSocket createServerSocket(InetAddress bind_addr,
                                              int start_port)

createServerSocket

public static ServerSocket createServerSocket(int start_port)
Finds first available port starting at start_port and returns server socket

defragmentBuffer

public static byte[] defragmentBuffer(fragments[][] )
Concatenates smaller fragments into entire buffers.
Parameters:
Returns:
A byte buffer

determineLeftMembers

public static Vector determineLeftMembers(Vector old_mbrs,
                                          Vector new_mbrs)
Returns all members that left between 2 views. All members that are element of old_mbrs but not element of new_mbrs are returned.

doubleWrite

public static void doubleWrite(byte[] buf,
                               OutputStream out)
            throws Exception
Makes sure that we detect when a peer connection is in the closed state (not closed while we send data, but before we send data). Two writes ensure that, if the peer closed the connection, the first write will send the peer from FIN to RST state, and the second will cause a signal (IOException).

doubleWrite

public static void doubleWrite(byte[] buf,
                               int offset,
                               int length,
                               OutputStream out)
            throws Exception
Makes sure that we detect when a peer connection is in the closed state (not closed while we send data, but before we send data). Two writes ensure that, if the peer closed the connection, the first write will send the peer from FIN to RST state, and the second will cause a signal (IOException).

dumpQueue

public static String dumpQueue(Queue q)
Debugging method used to dump the content of a protocol queue in a condensed form. Useful to follow the evolution of the queue's content in time.

dumpStack

public static void dumpStack(boolean exit)

fileExists

public static boolean fileExists(String fname)

fragmentBuffer

public static byte[][] fragmentBuffer(byte[] buf,
                                      int frag_size)

fragmentBuffer

public static byte[][] fragmentBuffer(byte[] buf,
                                      int frag_size,
                                      int length)
Fragments a byte buffer into smaller fragments of (max.) frag_size. Example: a byte buffer of 1024 bytes and a frag_size of 248 gives 4 fragments of 248 bytes each and 1 fragment of 32 bytes.
Returns:
An array of byte buffers (byte[]).

getAllAvailableInterfaces

public static List getAllAvailableInterfaces()
            throws SocketException

getFirstNonLoopbackAddress

public static InetAddress getFirstNonLoopbackAddress()
            throws SocketException

getHostname

public static String getHostname()

getJavaVersion

public static int getJavaVersion()

getResourceAsStream

public static InputStream getResourceAsStream(String name,
                                              Class clazz)

getStackTrace

public static String getStackTrace(Throwable t)

isBindAddressPropertyIgnored

public static boolean isBindAddressPropertyIgnored()

loadClass

public static Class loadClass(String classname,
                              Class clazz)
            throws ClassNotFoundException
Tries to load the class from the current thread's context class loader. If not successful, tries to load the class from the current instance.
Parameters:
classname - Desired class.
clazz - Class object used to obtain a class loader if no context class loader is available.
Returns:
Class, or null on failure.

main

public static void main(args[] )
            throws Exception

match

public static boolean match(Object obj1,
                            Object obj2)

match

public static boolean match(long[] a1,
                            long[] a2)

memStats

public static String memStats(boolean gc)

msgListToByteBuffer

public static Buffer msgListToByteBuffer(LinkedList xmit_list)
            throws IOException
Marshalls a list of messages.
Parameters:
xmit_list - LinkedList
Returns:
Buffer

objectFromByteBuffer

public static Object objectFromByteBuffer(byte[] buffer)
            throws Exception
Creates an object from a byte buffer

objectToByteBuffer

public static byte[] objectToByteBuffer(Object obj)
            throws Exception
Serializes an object into a byte buffer. The object has to implement interface Serializable or Externalizable

parseCommaDelimitedLongs

public static long[] parseCommaDelimitedLongs(String s)
Parses comma-delimited longs; e.g., 2000,4000,8000. Returns array of long, or null.

parseCommaDelimitedStrings

public static java.util.List parseCommaDelimitedStrings(String l)
e.g. "bela,jeannette,michelle" --> List{"bela", "jeannette", "michelle"}

pickRandomElement

public static Object pickRandomElement(Vector list)

pickSubset

public static Vector pickSubset(Vector members,
                                double subset_percentage)
Selects a random subset of members according to subset_percentage and returns them. Picks no member twice from the same membership. If the percentage is smaller than 1 -> picks 1 member.

print

public static String print(Throwable t)

printBytes

public static String printBytes(long bytes)

printEvent

public static String printEvent(Event evt)

printFragments

public static void printFragments(frags[][] )

printMembers

public static String printMembers(Vector v)

printMessage

public static String printMessage(Message msg)
Tries to read an object from the message's buffer and prints it

printMethodCall

public static String printMethodCall(Message msg)
Tries to read a MethodCall object from the message's buffer and prints it. Returns empty string if object is not a method call

printStackTrace

public static String printStackTrace(Throwable t)
Use with caution: lots of overhead

printThreads

public static void printThreads()

prompt

public static void prompt(String s)

random

public static long random(long range)
Returns a random value in the range [1 - range]

readAddress

public static Address readAddress(DataInputStream in)
            throws IOException,
                   IllegalAccessException,
                   InstantiationException

readAddresses

public static Collection readAddresses(DataInputStream in,
                                       Class cl)
            throws IOException,
                   IllegalAccessException,
                   InstantiationException
Parameters:
in -
cl - The type of Collection, e.g. Vector.class
Returns:
Collection of Address objects

readByteBuffer

public static byte[] readByteBuffer(DataInputStream in)
            throws IOException

readGenericStreamable

public static Streamable readGenericStreamable(DataInputStream in)
            throws IOException

readObject

public static Object readObject(DataInputStream in)
            throws Exception

readStreamable

public static Streamable readStreamable(Class clazz,
                                        DataInputStream in)
            throws IOException,
                   IllegalAccessException,
                   InstantiationException

readString

public static String readString(DataInputStream in)
            throws IOException

sameHost

public static boolean sameHost(Address one,
                               Address two)
Checks whether 2 Addresses are on the same host

shortName

public static String shortName(InetAddress hostname)

shortName

public static String shortName(String hostname)

size

public static long size(Collection addrs)
Returns the marshalled size of a Collection of Addresses. Assumes elements are of the same type !
Parameters:
addrs - Collection
Returns:
long size

size

public static int size(Address addr)

sizeOf

public static long sizeOf(Object inst)

sizeOf

public static long sizeOf(String classname)

sizeOf

public static long sizeOf(Streamable inst)

sleep

public static void sleep(long timeout)
Sleep for timeout msecs. Returns when timeout has elapsed or thread was interrupted

sleep

public static void sleep(long msecs,
                         boolean busy_sleep)
On most UNIX systems, the minimum sleep time is 10-20ms. Even if we specify sleep(1), the thread will sleep for at least 10-20ms. On Windows, sleep() seems to be implemented as a busy sleep, that is the thread never relinquishes control and therefore the sleep(x) is exactly x ms long.

sleepRandom

public static void sleepRandom(long timeout)
Sleeps between 1 and timeout milliseconds, chosen randomly. Timeout must be > 1

streamableFromByteBuffer

public static Streamable streamableFromByteBuffer(Class cl,
                                                  byte[] buffer)
            throws Exception

streamableToByteBuffer

public static byte[] streamableToByteBuffer(Streamable obj)
            throws Exception

tossWeightedCoin

public static boolean tossWeightedCoin(double probability)
Tosses a coin weighted with probability and returns true or false. Example: if probability=0.8, chances are that in 80% of all cases, true will be returned and false in 20%.

writeAddress

public static void writeAddress(Address addr,
                                DataOutputStream out)
            throws IOException

writeAddresses

public static void writeAddresses(Collection v,
                                  DataOutputStream out)
            throws IOException
Writes a Vector of Addresses. Can contain 65K addresses at most
Parameters:
v - A Collection
out -

writeByteBuffer

public static void writeByteBuffer(byte[] buf,
                                   DataOutputStream out)
            throws IOException

writeFully

public static void writeFully(ByteBuffer buf,
                              WritableByteChannel out)
            throws IOException
if we were to register for OP_WRITE and send the remaining data on readyOps for this channel we have to either block the caller thread or queue the message buffers that may arrive while waiting for OP_WRITE. Instead of the above approach this method will continuously write to the channel until the buffer sent fully.

writeGenericStreamable

public static void writeGenericStreamable(Streamable obj,
                                          DataOutputStream out)
            throws IOException

writeObject

public static void writeObject(Object obj,
                               DataOutputStream out)
            throws Exception

writeStreamable

public static void writeStreamable(Streamable obj,
                                   DataOutputStream out)
            throws IOException

writeString

public static void writeString(String s,
                               DataOutputStream out)
            throws IOException

Copyright B) 1998-2005 Bela Ban. All Rights Reserved.