组件hdfs 进程nameNode 内存元数据空间directory 写入元数据一段代码赏析(重试机制)

组件hdfs 进程nameNode 内存元数据空间directory 写入元数据一段代码赏析(重试机制),第1张

组件hdfs 进程nameNode 内存元数据空间directory 写入元数据一段代码赏析(重试机制)

通过客户端client向namenode写入元数据时发现了一段很有意思的重试机制特记录以待日后学习查阅:

代码如下:

boolean shouldRetry = true;
int retryCount = CREATE_RETRY_COUNT;  --10

//TODO 重试的代码结构
while (shouldRetry) {
   shouldRetry = false;
   try {
     
      stat = dfsClient.namenode.create(src, masked, dfsClient.clientName,
            new EnumSetWritable(flag), createParent, replication,          blockSize,SUPPORTED_CRYPTO_VERSIONS);
      break;
   } catch (RemoteException re) {
      IOException e = re.unwrapRemoteException(AccessControlException.class,
            DSQuotaExceededException.class, FileAlreadyExistsException.class,
            FileNotFoundException.class, ParentNotDirectoryException.class,
            NSQuotaExceededException.class, RetryStartFileException.class, SafeModeException.class,
            UnresolvedPathException.class, SnapshotAccessControlException.class,
            UnknownCryptoProtocolVersionException.class);
      if (e instanceof RetryStartFileException) {
         //TODO 重试
         if (retryCount > 0) {
            shouldRetry = true;
            retryCount--;
         } else {
            throw new IOException("Too many retries because of encryption" + " zone operations", e);
         }
      } else {
         throw e;
      }
   }
}

 可以看到代码初次运行时会初始化10次重试机会,一旦代码英文IOException(public class RetryStartFileException extends IOException)发生异常,将会被捕获,进行重试,知道运行成功或10次一会用完,这是会抛出异常。同样如果代码因为其他原因导致运行失败也会被捕获,抛出异常。

异常类图(补充):

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5656286.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存