Skip to content

Commit a1cc014

Browse files
adminadmin
authored andcommitted
HDFS-16898. Make write lock fine-grain in method processCommandFromActor
1 parent 952d707 commit a1cc014

2 files changed

Lines changed: 19 additions & 14 deletions

File tree

hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BPOfferService.java

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -679,15 +679,20 @@ boolean processCommandFromActor(DatanodeCommand cmd,
679679
actor.reRegister();
680680
return false;
681681
}
682-
writeLock();
682+
boolean isActiveActor;
683+
InetSocketAddress nnSocketAddress;
684+
readLock();
683685
try {
684-
if (actor == bpServiceToActive) {
685-
return processCommandFromActive(cmd, actor);
686-
} else {
687-
return processCommandFromStandby(cmd, actor);
688-
}
686+
isActiveActor = (actor == bpServiceToActive);
687+
nnSocketAddress = actor.getNNSocketAddress();
689688
} finally {
690-
writeUnlock();
689+
readUnlock();
690+
}
691+
692+
if (isActiveActor) {
693+
return processCommandFromActive(cmd, nnSocketAddress);
694+
} else {
695+
return processCommandFromStandby(cmd, nnSocketAddress);
691696
}
692697
}
693698

@@ -715,7 +720,7 @@ private String blockIdArrayToString(long ids[]) {
715720
* @throws IOException
716721
*/
717722
private boolean processCommandFromActive(DatanodeCommand cmd,
718-
BPServiceActor actor) throws IOException {
723+
InetSocketAddress nnSocketAddress) throws IOException {
719724
final BlockCommand bcmd =
720725
cmd instanceof BlockCommand? (BlockCommand)cmd: null;
721726
final BlockIdCommand blockIdCmd =
@@ -768,7 +773,7 @@ assert getBlockPoolId().equals(bp) :
768773
dn.finalizeUpgradeForPool(bp);
769774
break;
770775
case DatanodeProtocol.DNA_RECOVERBLOCK:
771-
String who = "NameNode at " + actor.getNNSocketAddress();
776+
String who = "NameNode at " + nnSocketAddress;
772777
dn.getBlockRecoveryWorker().recoverBlocks(who,
773778
((BlockRecoveryCommand)cmd).getRecoveringBlocks());
774779
break;
@@ -810,11 +815,11 @@ assert getBlockPoolId().equals(bp) :
810815
* DNA_REGISTER which should be handled earlier itself.
811816
*/
812817
private boolean processCommandFromStandby(DatanodeCommand cmd,
813-
BPServiceActor actor) throws IOException {
818+
InetSocketAddress nnSocketAddress) throws IOException {
814819
switch(cmd.getAction()) {
815820
case DatanodeProtocol.DNA_ACCESSKEYUPDATE:
816821
LOG.info("DatanodeCommand action from standby NN {}: DNA_ACCESSKEYUPDATE",
817-
actor.getNNSocketAddress());
822+
nnSocketAddress);
818823
if (dn.isBlockTokenEnabled) {
819824
dn.blockPoolTokenSecretManager.addKeys(
820825
getBlockPoolId(),
@@ -831,11 +836,11 @@ private boolean processCommandFromStandby(DatanodeCommand cmd,
831836
case DatanodeProtocol.DNA_UNCACHE:
832837
case DatanodeProtocol.DNA_ERASURE_CODING_RECONSTRUCTION:
833838
LOG.warn("Got a command from standby NN {} - ignoring command: {}",
834-
actor.getNNSocketAddress(), cmd.getAction());
839+
nnSocketAddress, cmd.getAction());
835840
break;
836841
default:
837842
LOG.warn("Unknown DatanodeCommand action: {} from standby NN {}",
838-
cmd.getAction(), actor.getNNSocketAddress());
843+
cmd.getAction(), nnSocketAddress);
839844
}
840845
return true;
841846
}

hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BPServiceActor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1471,7 +1471,7 @@ private boolean processCommand(DatanodeCommand[] cmds) {
14711471
dn.getMetrics().addNumProcessedCommands(processCommandsMs);
14721472
}
14731473
if (processCommandsMs > dnConf.getProcessCommandsThresholdMs()) {
1474-
LOG.info("Took {} ms to process {} commands from NN",
1474+
LOG.warn("Took {} ms to process {} commands from NN",
14751475
processCommandsMs, cmds.length);
14761476
}
14771477
}

0 commit comments

Comments
 (0)