Azkaban源碼閱讀之CachingFlowManager

來源:互聯網
上載者:User

CachingFlowManager這部分為Azkaban在管理job中cache管理這一部分。

    public CachingFlowManager(FlowManager baseManager, final int cacheSize)    {        this.baseManager = baseManager;        this.flowCache = Collections.synchronizedMap(                new LinkedHashMap<String, FlowExecutionHolder>((int) (cacheSize * 1.5), 0.75f, true){                    @Override                    protected boolean removeEldestEntry(Map.Entry<String, FlowExecutionHolder> eldest)                    {                        final boolean tooManyElements = super.size() > cacheSize;                        if (tooManyElements) {                            final Status status = eldest.getValue().getFlow().getStatus();                            if (status != Status.RUNNING) {                                return true;                            }                            else {                                log.warn(String.format(                                        "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",                                        super.size(),                                        status                                ));                            }                        }                        return false;                    }                }        );    }

在這個方法中涉及到幾個地方是之前沒有學習到過、也沒有遇到過的。

下面都一一來研究下。

 

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

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的支援。

在我們平常使用的時候幾乎所有情況下都會使用這些集合類無參的構造方法進行建立對象,那在這裡那三個參數又是什麼含義呢?

    public LinkedHashMap(int initialCapacity, float loadFactor,                         boolean accessOrder) {        super(initialCapacity, loadFactor);        this.accessOrder = accessOrder;    }

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.