@@ -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 }
0 commit comments