|
@@ -40,6 +40,7 @@ import org.apache.hadoop.hdfs.server.common.HdfsServerConstants;
|
|
import org.apache.hadoop.hdfs.server.common.StorageInfo;
|
|
import org.apache.hadoop.hdfs.server.common.StorageInfo;
|
|
import org.apache.hadoop.hdfs.server.datanode.DataNode;
|
|
import org.apache.hadoop.hdfs.server.datanode.DataNode;
|
|
import org.apache.hadoop.hdfs.server.namenode.FSNamesystem;
|
|
import org.apache.hadoop.hdfs.server.namenode.FSNamesystem;
|
|
|
|
+import org.apache.hadoop.hdfs.server.namenode.fgl.FSNamesystemLockMode;
|
|
import org.apache.hadoop.hdfs.server.protocol.DatanodeRegistration;
|
|
import org.apache.hadoop.hdfs.server.protocol.DatanodeRegistration;
|
|
import org.apache.hadoop.test.Whitebox;
|
|
import org.apache.hadoop.test.Whitebox;
|
|
import org.apache.hadoop.util.VersionInfo;
|
|
import org.apache.hadoop.util.VersionInfo;
|
|
@@ -131,7 +132,7 @@ public class TestComputeInvalidateWork {
|
|
public void testComputeInvalidateReplicas() throws Exception {
|
|
public void testComputeInvalidateReplicas() throws Exception {
|
|
final int blockInvalidateLimit = bm.getDatanodeManager()
|
|
final int blockInvalidateLimit = bm.getDatanodeManager()
|
|
.getBlockInvalidateLimit();
|
|
.getBlockInvalidateLimit();
|
|
- namesystem.writeLock();
|
|
|
|
|
|
+ namesystem.writeLock(FSNamesystemLockMode.BM);
|
|
try {
|
|
try {
|
|
for (int i=0; i<nodes.length; i++) {
|
|
for (int i=0; i<nodes.length; i++) {
|
|
for(int j=0; j<3*blockInvalidateLimit+1; j++) {
|
|
for(int j=0; j<3*blockInvalidateLimit+1; j++) {
|
|
@@ -142,7 +143,7 @@ public class TestComputeInvalidateWork {
|
|
}
|
|
}
|
|
verifyInvalidationWorkCounts(blockInvalidateLimit);
|
|
verifyInvalidationWorkCounts(blockInvalidateLimit);
|
|
} finally {
|
|
} finally {
|
|
- namesystem.writeUnlock();
|
|
|
|
|
|
+ namesystem.writeUnlock(FSNamesystemLockMode.BM, "testComputeInvalidateReplicas");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -154,7 +155,7 @@ public class TestComputeInvalidateWork {
|
|
public void testComputeInvalidateStripedBlockGroups() throws Exception {
|
|
public void testComputeInvalidateStripedBlockGroups() throws Exception {
|
|
final int blockInvalidateLimit =
|
|
final int blockInvalidateLimit =
|
|
bm.getDatanodeManager().getBlockInvalidateLimit();
|
|
bm.getDatanodeManager().getBlockInvalidateLimit();
|
|
- namesystem.writeLock();
|
|
|
|
|
|
+ namesystem.writeLock(FSNamesystemLockMode.BM);
|
|
try {
|
|
try {
|
|
int nodeCount = ecPolicy.getNumDataUnits() + ecPolicy.getNumParityUnits();
|
|
int nodeCount = ecPolicy.getNumDataUnits() + ecPolicy.getNumParityUnits();
|
|
for (int i = 0; i < nodeCount; i++) {
|
|
for (int i = 0; i < nodeCount; i++) {
|
|
@@ -167,7 +168,7 @@ public class TestComputeInvalidateWork {
|
|
}
|
|
}
|
|
verifyInvalidationWorkCounts(blockInvalidateLimit);
|
|
verifyInvalidationWorkCounts(blockInvalidateLimit);
|
|
} finally {
|
|
} finally {
|
|
- namesystem.writeUnlock();
|
|
|
|
|
|
+ namesystem.writeUnlock(FSNamesystemLockMode.BM, "testComputeInvalidateStripedBlockGroups");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -181,7 +182,7 @@ public class TestComputeInvalidateWork {
|
|
final int blockInvalidateLimit =
|
|
final int blockInvalidateLimit =
|
|
bm.getDatanodeManager().getBlockInvalidateLimit();
|
|
bm.getDatanodeManager().getBlockInvalidateLimit();
|
|
final Random random = new Random(System.currentTimeMillis());
|
|
final Random random = new Random(System.currentTimeMillis());
|
|
- namesystem.writeLock();
|
|
|
|
|
|
+ namesystem.writeLock(FSNamesystemLockMode.BM);
|
|
try {
|
|
try {
|
|
int nodeCount = ecPolicy.getNumDataUnits() + ecPolicy.getNumParityUnits();
|
|
int nodeCount = ecPolicy.getNumDataUnits() + ecPolicy.getNumParityUnits();
|
|
for (int i = 0; i < nodeCount; i++) {
|
|
for (int i = 0; i < nodeCount; i++) {
|
|
@@ -201,7 +202,7 @@ public class TestComputeInvalidateWork {
|
|
}
|
|
}
|
|
verifyInvalidationWorkCounts(blockInvalidateLimit);
|
|
verifyInvalidationWorkCounts(blockInvalidateLimit);
|
|
} finally {
|
|
} finally {
|
|
- namesystem.writeUnlock();
|
|
|
|
|
|
+ namesystem.writeUnlock(FSNamesystemLockMode.BM, "testComputeInvalidate");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -212,7 +213,7 @@ public class TestComputeInvalidateWork {
|
|
*/
|
|
*/
|
|
@Test(timeout=120000)
|
|
@Test(timeout=120000)
|
|
public void testDatanodeReformat() throws Exception {
|
|
public void testDatanodeReformat() throws Exception {
|
|
- namesystem.writeLock();
|
|
|
|
|
|
+ namesystem.writeLock(FSNamesystemLockMode.BM);
|
|
try {
|
|
try {
|
|
// Change the datanode UUID to emulate a reformat
|
|
// Change the datanode UUID to emulate a reformat
|
|
String poolId = cluster.getNamesystem().getBlockPoolId();
|
|
String poolId = cluster.getNamesystem().getBlockPoolId();
|
|
@@ -234,7 +235,7 @@ public class TestComputeInvalidateWork {
|
|
assertEquals(0, bm.computeInvalidateWork(1));
|
|
assertEquals(0, bm.computeInvalidateWork(1));
|
|
assertEquals(0, bm.getPendingDeletionBlocksCount());
|
|
assertEquals(0, bm.getPendingDeletionBlocksCount());
|
|
} finally {
|
|
} finally {
|
|
- namesystem.writeUnlock();
|
|
|
|
|
|
+ namesystem.writeUnlock(FSNamesystemLockMode.BM, "testDatanodeReformat");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -255,7 +256,7 @@ public class TestComputeInvalidateWork {
|
|
dfs.delete(ecFile, false);
|
|
dfs.delete(ecFile, false);
|
|
BlockManagerTestUtil.waitForMarkedDeleteQueueIsEmpty(
|
|
BlockManagerTestUtil.waitForMarkedDeleteQueueIsEmpty(
|
|
cluster.getNamesystem(0).getBlockManager());
|
|
cluster.getNamesystem(0).getBlockManager());
|
|
- namesystem.writeLock();
|
|
|
|
|
|
+ namesystem.writeLock(FSNamesystemLockMode.BM);
|
|
InvalidateBlocks invalidateBlocks;
|
|
InvalidateBlocks invalidateBlocks;
|
|
int totalStripedDataBlocks = totalBlockGroups * (ecPolicy.getNumDataUnits()
|
|
int totalStripedDataBlocks = totalBlockGroups * (ecPolicy.getNumDataUnits()
|
|
+ ecPolicy.getNumParityUnits());
|
|
+ ecPolicy.getNumParityUnits());
|
|
@@ -272,7 +273,7 @@ public class TestComputeInvalidateWork {
|
|
assertEquals("Unexpected invalidate count for striped block groups!",
|
|
assertEquals("Unexpected invalidate count for striped block groups!",
|
|
totalStripedDataBlocks, invalidateBlocks.getECBlocks());
|
|
totalStripedDataBlocks, invalidateBlocks.getECBlocks());
|
|
} finally {
|
|
} finally {
|
|
- namesystem.writeUnlock();
|
|
|
|
|
|
+ namesystem.writeUnlock(FSNamesystemLockMode.BM, "testDatanodeReRegistration");
|
|
}
|
|
}
|
|
// Re-register each DN and see that it wipes the invalidation work
|
|
// Re-register each DN and see that it wipes the invalidation work
|
|
int totalBlockGroupsPerDataNode = totalBlockGroups;
|
|
int totalBlockGroupsPerDataNode = totalBlockGroups;
|
|
@@ -284,14 +285,14 @@ public class TestComputeInvalidateWork {
|
|
new StorageInfo(HdfsServerConstants.NodeType.DATA_NODE),
|
|
new StorageInfo(HdfsServerConstants.NodeType.DATA_NODE),
|
|
new ExportedBlockKeys(),
|
|
new ExportedBlockKeys(),
|
|
VersionInfo.getVersion());
|
|
VersionInfo.getVersion());
|
|
- namesystem.writeLock();
|
|
|
|
|
|
+ namesystem.writeLock(FSNamesystemLockMode.BM);
|
|
try {
|
|
try {
|
|
bm.getDatanodeManager().registerDatanode(reg);
|
|
bm.getDatanodeManager().registerDatanode(reg);
|
|
expected -= (totalReplicasPerDataNode + totalBlockGroupsPerDataNode);
|
|
expected -= (totalReplicasPerDataNode + totalBlockGroupsPerDataNode);
|
|
assertEquals("Expected number of invalidate blocks to decrease",
|
|
assertEquals("Expected number of invalidate blocks to decrease",
|
|
(long) expected, invalidateBlocks.numBlocks());
|
|
(long) expected, invalidateBlocks.numBlocks());
|
|
} finally {
|
|
} finally {
|
|
- namesystem.writeUnlock();
|
|
|
|
|
|
+ namesystem.writeUnlock(FSNamesystemLockMode.BM, "testDatanodeReRegistration");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|