2016-07-25 11 views
0

1) "Remoteexception"の概念について私に助けてもらえますか?一般的にはどういう意味ですか?一般にHDFSでは "RemoteException"とは何を意味していますか?

2)unwrapRemoteExceptionとはどういう意味ですか?事前に

ありがとう:(https://github.com/apache/hadoop Hadoop_HDFS_Open_Source)

/** 
    * If this remote exception wraps up one of the lookupTypes 
    * then return this exception. 
    * <p> 
    * Unwraps any IOException. 
    * 
    * @param lookupTypes the desired exception class. 
    * @return IOException, which is either the lookupClass exception or this. 
    */ 
    public IOException unwrapRemoteException(Class<?>... lookupTypes) { 
    if(lookupTypes == null) 
     return this; 
    for(Class<?> lookupClass : lookupTypes) { 
     if(!lookupClass.getName().equals(getClassName())) 
     continue; 
     try { 
     return instantiateException(lookupClass.asSubclass(IOException.class)); 
     } catch(Exception e) { 
     // cannot instantiate lookupClass, just return this 
     return this; 
     } 
    } 
    // wrapped up exception is not in lookupTypes, just return this 
    return this; 
    } 

「このリモート例外がlookupTypesの1を包み込む場合は、」それは手段で確認されませんでした!どんな助けでも大歓迎です!

答えて

0

1) "Remoteexception"の概念についてお手伝いしますか?一般的にはどういう意味ですか?

リモート例外はサーバー側でスローされます(作成されます)。クライアントが無効な要求を送信したか、サーバーに内部エラーなどがあるため、サーバーはそのような例外をスローします。サーバー側のRPCサーバーが例外をシリアライズし、クライアント側に送信しました。クライアント側は例外を逆シリアル化し、例外を取得します。

2)unwrapRemoteExceptionとはどういう意味ですか?

質問は「例外をラップする理由」です。まず、RemoteExceptionは実際の例外ではないラッパーです。サーバーによってスローされる実際の例外は、AccessControlException(ユーザーには前書きがありません)、FileNotFoundException(無効な要求)です。我々はそれらをRemoteException内で包みます。しかし、なぜ?コードがより洗練され、より読みやすいからです。

reFileNotFoundExceptionをラップした場合DFSClient.java

public HdfsFileStatus getFileInfo(String src) throws IOException { 
    checkOpen(); 
    try { 
    return namenode.getFileInfo(src); 
    } catch(RemoteException re) { 
    throw re.unwrapRemoteException(AccessControlException.class, 
            FileNotFoundException.class, 
            UnresolvedPathException.class); 
    } 
} 

で、例えば

"このリモート例外がlookupTypesの1を包み込む場合は、" それは手段で確認されませんでしたgetFileInfoFileNotFoundExceptionを返します。ユーザーはより短い&クリーナー例外メッセージを見ることができます。ユーザーはファイルが見つからないことだけを知る必要があり、リモートであるかどうかは気にしません。

reSafeModeExceptionまたは何らかの未知の例外をラップする場合。おそらく、サーバーの内部のバグや設定のエラーです。私たちはre(RemoteException)を正確に投げます。したがって、ユーザはラップされたSafeModeException(または何らかの未知の例外)を知らないにもかかわらず、エラーがリモート(サーバ側)からであることを知ることができます。ユーザーは技術サポートに助けを求めることができます。

関連する問題