Azkaban源码阅读之CachingFlowManager

2023-10-28

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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Azkaban源码阅读之CachingFlowManager 的相关文章

随机推荐

  • 第一章 网络子系统初始化--基于Linux3.10

    下载地址 http download csdn net detail shichaog 8620701 网络初始化函数调用顺序 Linux系统启动那些事 基于Linux 3 10内核 提到系统启动时会调用一系列的初始化函数 初始化函数使用i
  • JavaEE学习记录day10 IO流01 File类、字节流

    1 File类 1 1File类概述和构造方法 应用 File类介绍 它是文件和目录路径名的抽象表示 文件和目录是可以通过File封装成对象的 对于File而言 其封装的并不是一个真正存在的文件 仅仅是一个路径名而已 它可以是存在的 也可以
  • shell在while循环中使用ssh命令提前退出的问题

    我想编写一个xcall sh脚本 用于快速向集群中的所有节点执行相同的命令 集群的节点信息放在hosts文件中 root localhost cat hosts 10 4 7 81 root 10 4 7 82 root 10 4 7 83
  • elementUI el-table表格列排序的三种方法

    1 官方排序
  • 算术表达式的validation

    经典的基于单调栈的表达式求值算法是没有validate表达式是否正确的 1 2 1 2 都是可以evaluate出来的 因为它们的op栈和operand栈都是一样的 和json validator一样 框架都是都是输入字符驱动的状态转移 合
  • 解决同步验证码模拟登录问题

    1 如何识别验证码 前言 识别验证码借助第三方库很好识别 主要是获得验证码识别后又相当一次request请求 这就会导致与当前页面的验证码不同 即使成功识别也会因为验证码的不统一而登录不了 1 1模拟登录 通过selenium自动化测试工具
  • cohens d 的effect值

    Very small 0 01 Sawilowsky 2009 Small 0 20 Cohen 1988 Medium 0 50 Cohen 1988 Large 0 80 Cohen 1988 Very large 1 20 Sawil
  • DMA简单总结

    文章目录 一 基础概念 1 1 DMA Direct Memory Access 直接存储器访问 目的减少CPU资源占用 二 典型DMA硬件模型 2 1 基本硬件特性 通道数 源 目标类型 地址与累加方式 数据位宽 搬移长度 循环模式 中断
  • MyBatis-Plus 字段为Null时不更新解决方案,MyBatis-Plus 更新空字段

    Copyright 蕃薯耀 2022 06 25 https www cnblogs com fanshuyao 一 问题描述 使用这两个方法 不会对实体中值为Null的属性 字段 进行更新 this updateById entity t
  • (2023进阶版)vue+h5 通过高德地图(原生) 获取当前位置定位

    前言 因为也是用的上一个版本的代码 为了描述清楚所以就直接复制文章来更改了 这一版更加完善简洁 高德地图精确度也更高 2021年写过的一版上线了挺长时间 2023年突然被应用市场下架 说流程走不通 就卡在获取定位失败 改了之后已上线运行 经
  • 阿里面经总结:阿里三面+交叉面+hr面试

    这里写的是我面试的阿里供应链平台事业部的面经 前面的几面 就不写了 最近太忙 身体状态一直不好 没怎么及时的总结 因为最近面试的太多了 觉得都是差不多的吧 除了笔试 中间还经历了两次在线编程 一面 二面 都需要在线编程 阿里三面 35分钟左
  • Windows 对文件做MD5值校验

    没想到Windows 自带MD5校验工具 场景 使用MD5校验算法 检测文件的是否损坏或被修改过 输入cmd 进入命令行界面 输入命令 certutil hashfile 文件路径 md5 还支持其他的哈希算法 实例 在D Desktop
  • SAP MM MIGO移动类型311试图做批次确定,系统报错-Stock Determination or batch determination not possible-

    SAP MM MIGO移动类型311试图做批次确定 系统报错 Stock Determination or batch determination not possible SAP系统里的批次确定功能很有用 在很多场景流程中 都可以启用这个
  • 链式线性表的就地逆置

    include
  • 简单的html网页标签

    一些网页标签
  • dayjs获取当月的第一天和最后一天

    利用dayjs获取当月第一天和最后一天 startDate dayjs this chooseMonth startOf month format YYYY MM DD endDate dayjs this chooseMonth endO
  • 电脑连接HDMI显示器后没声音

    通常电脑上自带音响声音不是很清晰 许多人选择将电脑用HDMI来连接音响 但有时连接上音响后显示器没声音 小编在此讲解链接HDMI显示器没声音方法 若是HDMI接口损坏 则此法不适用 材料 工具 HDMI 电脑 方法一 1 打开电脑 鼠标右键
  • Spring5笔记

    一 Spring概述 Spring是一个轻量级的 控制反转 IoC 和面向切面 AOP 的容器 框架 组成 核心容器 core 核心容器提供 Spring 框架的基本功能 核心容器的主要组件是 BeanFactory 它 是工厂模式的实现
  • centos7系统被入侵,挂载挖矿木马-pamdicks-(1)临时处理

    故障说明 故障环境配置 开发测试服务器 腾讯云 系统 centos7 程序启动模式 root用户直接启动 网络环境 所有端口全部对外开放 使用仅屏蔽部分关键端口ssh redis rabbitmq等 为方便服务器间数据传输方便 采用了ssh
  • Azkaban源码阅读之CachingFlowManager

    CachingFlowManager这部分为Azkaban在管理job中cache管理这一部分 public CachingFlowManager FlowManager baseManager final int cacheSize th