HDFS-15579. RBF: The constructor of PathLocation may got some misunderstanding. Contributed by Janus Chow.
This commit is contained in:
parent
364b958085
commit
8eba922bb3
|
@ -99,8 +99,9 @@ public class MultipleDestinationMountTableResolver extends MountTableResolver {
|
|||
|
||||
// Change the order of the name spaces according to the policy
|
||||
if (firstNamespace != null) {
|
||||
// This is the entity in the tree, we need to create our own copy
|
||||
mountTableResult = new PathLocation(mountTableResult, firstNamespace);
|
||||
// Create our own prioritized copy based on the entity in the tree.
|
||||
mountTableResult = PathLocation.prioritizeDestination(
|
||||
mountTableResult, firstNamespace);
|
||||
LOG.debug("Ordered locations following {} are {}",
|
||||
order, mountTableResult);
|
||||
} else {
|
||||
|
|
|
@ -87,12 +87,28 @@ public class PathLocation {
|
|||
* @param other Other path location to copy from.
|
||||
* @param firstNsId Identifier of the namespace to place first.
|
||||
*/
|
||||
@Deprecated
|
||||
public PathLocation(PathLocation other, String firstNsId) {
|
||||
this.sourcePath = other.sourcePath;
|
||||
this.destOrder = other.destOrder;
|
||||
this.destinations = orderedNamespaces(other.destinations, firstNsId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a path location with the prioritized destinations based on
|
||||
* the current path location.
|
||||
*
|
||||
* @param base The base path location we'd like to prioritize on.
|
||||
* @param firstNsId Identifier of the namespace to place first.
|
||||
*/
|
||||
public static PathLocation prioritizeDestination(
|
||||
PathLocation base, String firstNsId) {
|
||||
List<RemoteLocation> prioritizedDestinations = orderedNamespaces(
|
||||
base.destinations, firstNsId);
|
||||
return new PathLocation(base.sourcePath, prioritizedDestinations,
|
||||
base.destOrder);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prioritize a location/destination by its name space/nameserviceId.
|
||||
* This destination might be used by other threads, so the source is not
|
||||
|
|
|
@ -360,6 +360,15 @@ public class TestMultipleDestinationResolver {
|
|||
assertEquals(3, destinations.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPrioritizeDestination() throws IOException {
|
||||
PathLocation dest0 = resolver.getDestinationForPath("/hashall/file0.txt");
|
||||
assertDest("subcluster0", dest0);
|
||||
PathLocation prioritizedDest = PathLocation.prioritizeDestination(dest0,
|
||||
"subcluster1");
|
||||
assertDest("subcluster1", prioritizedDest);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that a path has files distributed across destinations evenly.
|
||||
* @param path Path to check.
|
||||
|
|
Loading…
Reference in New Issue