Azkaban源码阅读之CachingFlowManager

CachingFlowManager这部分为Azkaban在管理job中cache管理这一部分。

  1. public CachingFlowManager(FlowManager baseManager, final int cacheSize)  
  2. {  
  3.     this.baseManager = baseManager;  
  4.   
  5.     this.flowCache = Collections.synchronizedMap(  
  6.             new LinkedHashMap<String, FlowExecutionHolder>((int) (cacheSize * 1.5), 0.75f, true){  
  7.                 @Override  
  8.                 protected boolean removeEldestEntry(Map.Entry<String, FlowExecutionHolder> eldest)  
  9.                 {  
  10.                     final boolean tooManyElements = super.size() > cacheSize;  
  11.   
  12.                     if (tooManyElements) {  
  13.                         final Status status = eldest.getValue().getFlow().getStatus();  
  14.   
  15.                         if (status != Status.RUNNING) {  
  16.                             return true;  
  17.                         }  
  18.                         else {  
  19.                             log.warn(String.format(  
  20.                                     "Cache is at size[%s] and should have evicted an entry, but the oldest entry wasn't completed[%s].  Perhaps the cache size is too small",  
  21.                                     super.size(),  
  22.                                     status  
  23.                             ));  
  24.                         }  
  25.                     }  
  26.   
  27.                     return false;  
  28.                 }  
  29.             }  
  30.     );  
  31. }  


在这个方法中涉及到几个地方是之前没有学习到过、也没有遇到过的。

下面都一一来研究下。

 

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1、Collections.synchronizedMap

      先来看下在JDK中对Collections的解释:

 

      接下来synchronizedMap

      顾名思义,synchronize是同步,那则为同步的map。

public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m)

      这是一个返回由指定映射支持的同步(线程安全的)映射的方法。也就是返回一个线程安全的map

 

2、new LinkedHashMap<String, FlowExecutionHolder>((int) (cacheSize * 1.5), 0.75f, true)

LinkedHashMap是JDK1.4引入的新的集合类,相信很多人都没有用到过LinkedHashMap。

LinkedHashMap相当于是一个对HashMap的扩展,它在Hash的实现有加上了对Linked的支持。

在我们平常使用的时候几乎所有情况下都会使用这些集合类无参的构造方法进行创建对象,那在这里那三个参数又是什么含义呢?

  1. public LinkedHashMap(int initialCapacity,  
  2. float loadFactor,  
  3.                      boolean accessOrder) {  
  4.     super(initialCapacity, loadFactor);  
  5.     this.accessOrder = accessOrder;  
  6. }  

a、initialCapacity  : 代表该LinkedHashMap的初始化容量

b、loadFactor   :   代表LinkedHashMap的加载因子,加载因子与LinkedHashMap resize有关。默认为0.75f

c、accessOrder  :  排序方式。true是按照最久使用到最近使用的顺序, false是插入式排序

3、

在这里传入的参数为最旧的条目,在方法中要进行判断这个条目是否需要从cache被移除。

Azkaban中判定的方法为,(前提是cache已满)如果最旧的job已不在运行,则将最旧的job移出cache,否则不进行操作。

 

 

注: 本文是由本人原创,如需引用请注明出处:http://blog.csdn.net/zhang__bing/article/details/8722072
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值