HDFS-8147. StorageGroup in Dispatcher should override equals nad hashCode. Contributed by surendra singh lilhore
This commit is contained in:
parent
b2568d69fc
commit
5b4eda7573
|
@ -41,6 +41,9 @@ Release 2.7.1 - UNRELEASED
|
||||||
HDFS-8163. Using monotonicNow for block report scheduling causes
|
HDFS-8163. Using monotonicNow for block report scheduling causes
|
||||||
test failures on recently restarted systems. (Arpit Agarwal)
|
test failures on recently restarted systems. (Arpit Agarwal)
|
||||||
|
|
||||||
|
HDFS-8147. StorageGroup in Dispatcher should override equals nad hashCode.
|
||||||
|
(surendra singh lilhore via szetszwo)
|
||||||
|
|
||||||
Release 2.7.0 - 2015-04-20
|
Release 2.7.0 - 2015-04-20
|
||||||
|
|
||||||
INCOMPATIBLE CHANGES
|
INCOMPATIBLE CHANGES
|
||||||
|
|
|
@ -471,6 +471,25 @@ public class Dispatcher {
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return getDisplayName();
|
return getDisplayName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return getStorageType().hashCode() ^ getDatanodeInfo().hashCode();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (this == obj) {
|
||||||
|
return true;
|
||||||
|
} else if (obj == null || !(obj instanceof StorageGroup)) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
final StorageGroup that = (StorageGroup) obj;
|
||||||
|
return this.getStorageType() == that.getStorageType()
|
||||||
|
&& this.getDatanodeInfo().equals(that.getDatanodeInfo());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
final DatanodeInfo datanode;
|
final DatanodeInfo datanode;
|
||||||
|
@ -755,6 +774,16 @@ public class Dispatcher {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return super.hashCode();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
return super.equals(obj);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Dispatcher(NameNodeConnector nnc, Set<String> includedNodes,
|
public Dispatcher(NameNodeConnector nnc, Set<String> includedNodes,
|
||||||
|
|
|
@ -277,4 +277,51 @@ public class TestMover {
|
||||||
cluster.shutdown();
|
cluster.shutdown();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test(timeout = 300000)
|
||||||
|
public void testTwoReplicaSameStorageTypeShouldNotSelect() throws Exception {
|
||||||
|
// HDFS-8147
|
||||||
|
final Configuration conf = new HdfsConfiguration();
|
||||||
|
final MiniDFSCluster cluster = new MiniDFSCluster.Builder(conf)
|
||||||
|
.numDataNodes(3)
|
||||||
|
.storageTypes(
|
||||||
|
new StorageType[][] { { StorageType.DISK, StorageType.ARCHIVE },
|
||||||
|
{ StorageType.DISK, StorageType.DISK },
|
||||||
|
{ StorageType.DISK, StorageType.ARCHIVE } }).build();
|
||||||
|
try {
|
||||||
|
cluster.waitActive();
|
||||||
|
final DistributedFileSystem dfs = cluster.getFileSystem();
|
||||||
|
final String file = "/testForTwoReplicaSameStorageTypeShouldNotSelect";
|
||||||
|
// write to DISK
|
||||||
|
final FSDataOutputStream out = dfs.create(new Path(file), (short) 2);
|
||||||
|
out.writeChars("testForTwoReplicaSameStorageTypeShouldNotSelect");
|
||||||
|
out.close();
|
||||||
|
|
||||||
|
// verify before movement
|
||||||
|
LocatedBlock lb = dfs.getClient().getLocatedBlocks(file, 0).get(0);
|
||||||
|
StorageType[] storageTypes = lb.getStorageTypes();
|
||||||
|
for (StorageType storageType : storageTypes) {
|
||||||
|
Assert.assertTrue(StorageType.DISK == storageType);
|
||||||
|
}
|
||||||
|
// move to ARCHIVE
|
||||||
|
dfs.setStoragePolicy(new Path(file), "COLD");
|
||||||
|
int rc = ToolRunner.run(conf, new Mover.Cli(),
|
||||||
|
new String[] { "-p", file.toString() });
|
||||||
|
Assert.assertEquals("Movement to ARCHIVE should be successfull", 0, rc);
|
||||||
|
|
||||||
|
// Wait till namenode notified
|
||||||
|
Thread.sleep(3000);
|
||||||
|
lb = dfs.getClient().getLocatedBlocks(file, 0).get(0);
|
||||||
|
storageTypes = lb.getStorageTypes();
|
||||||
|
int archiveCount = 0;
|
||||||
|
for (StorageType storageType : storageTypes) {
|
||||||
|
if (StorageType.ARCHIVE == storageType) {
|
||||||
|
archiveCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Assert.assertEquals(archiveCount, 2);
|
||||||
|
} finally {
|
||||||
|
cluster.shutdown();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue