org.jgroups.util

Class Util

public class Util extends Object

Collection of various utility routines that can not be assigned to other classes.
Field Summary
static StringDIAG_GROUP
static intMAX_PORT
Method Summary
static StringactiveThreads()
static Stringarray2String(long[] array)
static Stringarray2String(int[] array)
static Stringarray2String(boolean[] array)
static LinkedListbyteBufferToMessageList(byte[] buffer, int offset, int length)
static booleancheckForLinux()
static booleancheckForSolaris()
static booleancheckForWindows()
static voidcloseInputStream(InputStream inp)
static voidcloseOutputStream(OutputStream out)
static byte[]collectionToByteBuffer(Collection c)
static ListcomputeFragOffsets(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 ListcomputeFragOffsets(byte[] buf, int frag_size)
static voidcrash()
static DatagramSocketcreateDatagramSocket(InetAddress addr, int port)
Creates a DatagramSocket bound to addr.
static ServerSocketcreateServerSocket(int start_port)
Finds first available port starting at start_port and returns server socket
static ServerSocketcreateServerSocket(InetAddress bind_addr, int start_port)
static byte[]defragmentBuffer(byte[][] fragments)
Concatenates smaller fragments into entire buffers.
static VectordetermineLeftMembers(Vector old_mbrs, Vector new_mbrs)
Returns all members that left between 2 views.
static voiddoubleWrite(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 voiddoubleWrite(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 StringdumpQueue(Queue q)
Debugging method used to dump the content of a protocol queue in a condensed form.
static voiddumpStack(boolean exit)
static booleanfileExists(String fname)
static byte[][]fragmentBuffer(byte[] buf, int frag_size, int length)
Fragments a byte buffer into smaller fragments of (max.) frag_size.
static byte[][]fragmentBuffer(byte[] buf, int frag_size)
static ListgetAllAvailableInterfaces()
static InetAddressgetFirstNonLoopbackAddress()
static StringgetHostname()
static intgetJavaVersion()
static InputStreamgetResourceAsStream(String name, Class clazz)
static StringgetStackTrace(Throwable t)
static booleanisBindAddressPropertyIgnored()
static ClassloadClass(String classname, Class clazz)
Tries to load the class from the current thread's context class loader.
static voidmain(String[] args)
static booleanmatch(Object obj1, Object obj2)
static booleanmatch(long[] a1, long[] a2)
static StringmemStats(boolean gc)
static BuffermsgListToByteBuffer(LinkedList xmit_list)
Marshalls a list of messages.
static ObjectobjectFromByteBuffer(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 ListparseCommaDelimitedStrings(String l)
e.g.
static ObjectpickRandomElement(Vector list)
static VectorpickSubset(Vector members, double subset_percentage)
Selects a random subset of members according to subset_percentage and returns them.
static Stringprint(Throwable t)
static StringprintBytes(long bytes)
static StringprintEvent(Event evt)
static voidprintFragments(byte[][] frags)
static StringprintMembers(Vector v)
static StringprintMessage(Message msg)
Tries to read an object from the message's buffer and prints it
static StringprintMethodCall(Message msg)
Tries to read a MethodCall object from the message's buffer and prints it.
static StringprintStackTrace(Throwable t)
Use with caution: lots of overhead
static voidprintThreads()
static voidprompt(String s)
static longrandom(long range)
Returns a random value in the range [1 - range]
static AddressreadAddress(DataInputStream in)
static CollectionreadAddresses(DataInputStream in, Class cl)
static byte[]readByteBuffer(DataInputStream in)
static StreamablereadGenericStreamable(DataInputStream in)
static ObjectreadObject(DataInputStream in)
static StreamablereadStreamable(Class clazz, DataInputStream in)
static StringreadString(DataInputStream in)
static booleansameHost(Address one, Address two)
Checks whether 2 Addresses are on the same host
static StringshortName(String hostname)
static StringshortName(InetAddress hostname)
static intsize(Address addr)
static longsize(Collection addrs)
Returns the marshalled size of a Collection of Addresses.
static longsizeOf(String classname)
static longsizeOf(Object inst)
static longsizeOf(Streamable inst)
static voidsleep(long timeout)
Sleep for timeout msecs.
static voidsleep(long msecs, boolean busy_sleep)
On most UNIX systems, the minimum sleep time is 10-20ms.
static voidsleepRandom(long timeout)
Sleeps between 1 and timeout milliseconds, chosen randomly.
static StreamablestreamableFromByteBuffer(Class cl, byte[] buffer)
static byte[]streamableToByteBuffer(Streamable obj)
static booleantossWeightedCoin(double probability)
Tosses a coin weighted with probability and returns true or false.
static voidwriteAddress(Address addr, DataOutputStream out)
static voidwriteAddresses(Collection v, DataOutputStream out)
Writes a Vector of Addresses.
static voidwriteByteBuffer(byte[] buf, DataOutputStream out)
static voidwriteFully(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 voidwriteGenericStreamable(Streamable obj, DataOutputStream out)
static voidwriteObject(Object obj, DataOutputStream out)
static voidwriteStreamable(Streamable obj, DataOutputStream out)
static voidwriteString(String s, DataOutputStream out)

Field Detail

DIAG_GROUP

public static final String DIAG_GROUP

MAX_PORT

public static final int MAX_PORT

Method Detail

activeThreads

public static String activeThreads()

array2String

public static String array2String(long[] array)

array2String

public static String array2String(int[] array)

array2String

public static String array2String(boolean[] array)

byteBufferToMessageList

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

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)

computeFragOffsets

public static 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

computeFragOffsets

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

crash

public static void crash()

createDatagramSocket

public static DatagramSocket createDatagramSocket(InetAddress addr, int port)
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(int start_port)
Finds first available port starting at start_port and returns server socket

createServerSocket

public static ServerSocket createServerSocket(InetAddress bind_addr, int start_port)

defragmentBuffer

public static byte[] defragmentBuffer(byte[][] fragments)
Concatenates smaller fragments into entire buffers.

Parameters: fragments An array of byte buffers (byte[])

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)
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)
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, 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[]).

fragmentBuffer

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

getAllAvailableInterfaces

public static List getAllAvailableInterfaces()

getFirstNonLoopbackAddress

public static InetAddress getFirstNonLoopbackAddress()

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)
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(String[] args)

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)
Marshalls a list of messages.

Parameters: xmit_list LinkedList

Returns: Buffer

Throws: IOException

objectFromByteBuffer

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

objectToByteBuffer

public static byte[] objectToByteBuffer(Object obj)
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 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(byte[][] 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)

readAddresses

public static Collection readAddresses(DataInputStream in, Class cl)

Parameters: in cl The type of Collection, e.g. Vector.class

Returns: Collection of Address objects

Throws: IOException IllegalAccessException InstantiationException

readByteBuffer

public static byte[] readByteBuffer(DataInputStream in)

readGenericStreamable

public static Streamable readGenericStreamable(DataInputStream in)

readObject

public static Object readObject(DataInputStream in)

readStreamable

public static Streamable readStreamable(Class clazz, DataInputStream in)

readString

public static String readString(DataInputStream in)

sameHost

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

shortName

public static String shortName(String hostname)

shortName

public static String shortName(InetAddress hostname)

size

public static int size(Address addr)

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

sizeOf

public static long sizeOf(String classname)

sizeOf

public static long sizeOf(Object inst)

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)

streamableToByteBuffer

public static byte[] streamableToByteBuffer(Streamable obj)

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)

writeAddresses

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

Parameters: v A Collection

out

Throws: IOException

writeByteBuffer

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

writeFully

public 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. 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)

writeObject

public static void writeObject(Object obj, DataOutputStream out)

writeStreamable

public static void writeStreamable(Streamable obj, DataOutputStream out)

writeString

public static void writeString(String s, DataOutputStream out)
Copyright ? 1998-2005 Bela Ban. All Rights Reserved.