[ 
https://issues.apache.org/jira/browse/HDFS-16880?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17653536#comment-17653536
 ] 

ASF GitHub Bot commented on HDFS-16880:
---------------------------------------

goiri commented on code in PR #5262:
URL: https://github.com/apache/hadoop/pull/5262#discussion_r1059897696


##########
hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcClient.java:
##########
@@ -865,18 +867,24 @@ public Object invokeSingleBlockPool(final String bpId, 
RemoteMethod method)
    *
    * @param nsId Target namespace for the method.
    * @param method The remote method and parameters to invoke.
+   * @param src file path, pass "" if not have.
    * @return The result of invoking the method.
    * @throws IOException If the invoke generated an error.
    */
-  public Object invokeSingle(final String nsId, RemoteMethod method)
+  public Object invokeSingle(final String nsId, RemoteMethod method, String 
src)
       throws IOException {
     UserGroupInformation ugi = RouterRpcServer.getRemoteUser();
     RouterRpcFairnessPolicyController controller = 
getRouterRpcFairnessPolicyController();
     acquirePermit(nsId, ugi, method, controller);
     try {
       boolean isObserverRead = isObserverReadEligible(nsId, 
method.getMethod());
       List<? extends FederationNamenodeContext> nns = 
getOrderedNamenodes(nsId, isObserverRead);
-      RemoteLocationContext loc = new RemoteLocation(nsId, "/", "/");
+      RemoteLocationContext loc;
+      if (org.apache.commons.lang3.StringUtils.isBlank(src)) {
+        loc = new RemoteLocation(nsId, "/", "/");
+      } else {
+        loc = new RemoteLocation(nsId, src, "/");

Review Comment:
   Couldn't we pass this in the Remote Method? 



##########
hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcClient.java:
##########
@@ -865,18 +867,24 @@ public Object invokeSingleBlockPool(final String bpId, 
RemoteMethod method)
    *
    * @param nsId Target namespace for the method.
    * @param method The remote method and parameters to invoke.
+   * @param src file path, pass "" if not have.
    * @return The result of invoking the method.
    * @throws IOException If the invoke generated an error.
    */
-  public Object invokeSingle(final String nsId, RemoteMethod method)
+  public Object invokeSingle(final String nsId, RemoteMethod method, String 
src)
       throws IOException {
     UserGroupInformation ugi = RouterRpcServer.getRemoteUser();
     RouterRpcFairnessPolicyController controller = 
getRouterRpcFairnessPolicyController();
     acquirePermit(nsId, ugi, method, controller);
     try {
       boolean isObserverRead = isObserverReadEligible(nsId, 
method.getMethod());
       List<? extends FederationNamenodeContext> nns = 
getOrderedNamenodes(nsId, isObserverRead);
-      RemoteLocationContext loc = new RemoteLocation(nsId, "/", "/");
+      RemoteLocationContext loc;
+      if (org.apache.commons.lang3.StringUtils.isBlank(src)) {

Review Comment:
   Why don't we use null as the default instead of blank? 



##########
hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcServer.java:
##########
@@ -687,7 +687,7 @@ <T> T invokeAtAvailableNs(RemoteMethod method, Class<T> 
clazz)
     // If default Ns is present return result from that namespace.
     if (!nsId.isEmpty()) {
       try {
-        return rpcClient.invokeSingle(nsId, method, clazz);
+        return rpcClient.invokeSingle(nsId, method, clazz, "");

Review Comment:
   Can we add an actual test? 



##########
hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcClient.java:
##########
@@ -865,18 +867,24 @@ public Object invokeSingleBlockPool(final String bpId, 
RemoteMethod method)
    *
    * @param nsId Target namespace for the method.
    * @param method The remote method and parameters to invoke.
+   * @param src file path, pass "" if not have.
    * @return The result of invoking the method.
    * @throws IOException If the invoke generated an error.
    */
-  public Object invokeSingle(final String nsId, RemoteMethod method)
+  public Object invokeSingle(final String nsId, RemoteMethod method, String 
src)

Review Comment:
   We should keep the old signature which sets it to "". 





> modify invokeSingleXXX interface in order to pass actual file src to namenode 
> for debug info.
> ---------------------------------------------------------------------------------------------
>
>                 Key: HDFS-16880
>                 URL: https://issues.apache.org/jira/browse/HDFS-16880
>             Project: Hadoop HDFS
>          Issue Type: Improvement
>          Components: rbf
>    Affects Versions: 3.3.4
>            Reporter: ZhangHB
>            Priority: Major
>              Labels: pull-request-available
>
> We found lots of INFO level log like below:
> {quote}2022-12-30 15:31:04,169 INFO org.apache.hadoop.hdfs.StateChange: DIR* 
> completeFile: / is closed by 
> DFSClient_attempt_1671783180362_213003_m_000077_0_1102875551_1
> 2022-12-30 15:31:04,186 INFO org.apache.hadoop.hdfs.StateChange: DIR* 
> completeFile: / is closed by DFSClient_NONMAPREDUCE_1198313144_27480
> {quote}
> It lost the real path of completeFile. Actually this is caused by : 
>  
> *org.apache.hadoop.hdfs.server.federation.router.RouterRpcClient#invokeSingle(java.lang.String,
>  org.apache.hadoop.hdfs.server.federation.router.RemoteMethod)*
> In this method, it instantiates a RemoteLocationContext object:
> *RemoteLocationContext loc = new RemoteLocation(nsId, "/", "/");*
> and then execute: *Object[] params = method.getParams(loc);*
> The problem is right here, becasuse we always use new RemoteParam(), so, 
> context.getDest() always return "/"; That's why we saw lots of incorrect logs.
>  
> After diving into invokeSingleXXX source code, I found the following RPCs 
> classified as need actual src and not need actual src.
>  
> *need src path RPC:*
> addBlock、abandonBlock、getAdditionalDatanode、complete
> *not need src path RPC:*
> updateBlockForPipeline、reportBadBlocks、getBlocks、updatePipeline、invokeAtAvailableNs(invoked
>  by: 
> getServerDefaults、getBlockKeys、getTransactionID、getMostRecentCheckpointTxId、versionRequest、getStoragePolicies)
>  
> After changes, the src can be pass to NN correctly.
>  
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to