public class GUIDHelper extends Object
A persistence GUID must at minimum reflect the partition-id and a monotonically increasing partition-version that could be used to determine, given a set of GUIDs representing the same partition, a total ordering of the GUIDs over time.
| Modifier and Type | Class and Description |
|---|---|
static class |
GUIDHelper.GUIDResolver
Resolver used during a recovery to discover the newest available GUID
for a given partition.
|
| Constructor and Description |
|---|
GUIDHelper() |
| Modifier and Type | Method and Description |
|---|---|
static Map<Integer,String[]> |
assignStores(Map<Integer,Object[]> mapConstraints,
int cDistinctStores)
Return a Map containing assignments of member id to stores based on the
given constraints.
|
protected static <K> Map.Entry<K,Object[]>[] |
createSortedEntries(Map<K,Object[]> map)
Return an array of
entries based on the provided map
ensuring the value (Object[]) is sorted. |
protected static void |
evaluateGUID(String sGUID,
String[] asGUIDNewest,
Set<String> setPrevGUIDs,
int cPartitions)
Evaluate the provided GUID ensuring
asGUIDNewest references the
latest and setPrevGUIDs references previous GUIDs. |
static String |
generateGUID(int nPartition,
long lVersion,
long ldt,
Member member)
Generate and return a new GUID for the specified partition.
|
static int |
getMemberId(String sGUID)
Parse the specified GUID and return the originating member-id.
|
static int |
getPartition(String sGUID)
Parse the specified GUID and return the partition-id.
|
static PartitionSet |
getPartitions(Map<Integer,Object[]> mapStores,
int cParts)
Return a
PartitionSet with all partitions present in the provided
mapStores. |
static long |
getServiceJoinTime(String sGUID)
Parse the specified GUID and return the service join time.
|
static long |
getVersion(String sGUID)
Parse the specified GUID and return the partition-version.
|
protected static List<String> |
intersects(Object[] aoLHS,
Object[] aoRHS)
Return a List of stores (GUIDs) that allows the caller to derive whether
the provided sets are disjoint, intersect or equal.
|
static void |
main(String[] asArg)
Utility that outputs information about a given GUID.
|
protected static String |
parseAttribute(String sGUID,
int id)
Return the specified (0-based) attribute from the GUID.
|
static String[] |
resolveNewest(Collection<String> colGUID,
int cPartitions)
Deprecated.
Replaced by
resolveNewest(Map, Set, int). |
protected static String[] |
resolveNewest(Map<Member,String[]> mapGUID,
Set<String> setPrevGUIDs,
int cPartitions)
Return an array of the newest GUID for each partition, indexed by the
partition-id and collect previous GUIDs into the provided set.
|
static boolean |
validateGUID(String sGUID)
Validate the given GUID.
|
public static String generateGUID(int nPartition, long lVersion, long ldt, Member member)
nPartition - the partition to return a GUID forlVersion - the creation version of the partitionldt - the creation timestamp; informational onlymember - the member generating the GUID; informational onlypublic static boolean validateGUID(String sGUID)
sGUID - the GUID to validatepublic static int getPartition(String sGUID)
sGUID - the GUID to return the partition-id forpublic static long getVersion(String sGUID)
sGUID - the GUID to return the partition-version forpublic static long getServiceJoinTime(String sGUID)
sGUID - the GUID used to return the service join timepublic static int getMemberId(String sGUID)
sGUID - the GUID to return the originating member-id for@Deprecated public static String[] resolveNewest(Collection<String> colGUID, int cPartitions)
resolveNewest(Map, Set, int).colGUID - the collection of GUIDs to resolvecPartitions - the partition-countprotected static String[] resolveNewest(Map<Member,String[]> mapGUID, Set<String> setPrevGUIDs, int cPartitions)
mapGUID - the map of GUIDs to resolvesetPrevGUIDs - the set that holds old GUIDscPartitions - the partition-countprotected static void evaluateGUID(String sGUID, String[] asGUIDNewest, Set<String> setPrevGUIDs, int cPartitions)
asGUIDNewest references the
latest and setPrevGUIDs references previous GUIDs.sGUID - the GUID to be evaluatedasGUIDNewest - the array that contains the newest GUIDssetPrevGUIDs - the set that contains the old GUIDscPartitions - the partition-countpublic static Map<Integer,String[]> assignStores(Map<Integer,Object[]> mapConstraints, int cDistinctStores)
The algorithm will attempt to fairly distribute assignment of stores across members while abiding to the given constraints. For example:
| Member Id | Constraints | Assignments |
|---|---|---|
| 1 | {a,b,c,d} | {a,c} |
| 2 | {a,b,c,d} | {b,d} |
| 3 | {e,f,g,h} | {e,g} |
| 4 | {e,f,g,h} | {f,h} |
mapConstraints - the constraints to perform assignments withincDistinctStores - the number of expected distinct storespublic static PartitionSet getPartitions(Map<Integer,Object[]> mapStores, int cParts)
PartitionSet with all partitions present in the provided
mapStores.mapStores - a Map of member id to storescParts - the partition countprotected static String parseAttribute(String sGUID, int id)
sGUID - the GUIDid - the (0-based) attribute indexprotected static List<String> intersects(Object[] aoLHS, Object[] aoRHS)
| Result | Reason |
|---|---|
| null | disjoint sets |
| listReturn | shared elements across LHS and RHS |
| listReturn.size() == aoLHS.length == aoRHS.length | LHS and RHS are equal |
aoLHS - the first set in the comparisonaoRHS - the second set in the comparisonprotected static <K> Map.Entry<K,Object[]>[] createSortedEntries(Map<K,Object[]> map)
entries based on the provided map
ensuring the value (Object[]) is sorted.K - - the key typemap - a map to base the Entry[] onentries ensuring the value (Object[]) is sortedpublic static void main(String[] asArg)
asArg - command line arguments