千家信息网

zk中ReferenceCountedACLCache的作用是什么

发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,这篇文章给大家介绍zk中ReferenceCountedACLCache的作用是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。作用:完成LIst与Long互相转换,DataN
千家信息网最后更新 2025年12月03日zk中ReferenceCountedACLCache的作用是什么

这篇文章给大家介绍zk中ReferenceCountedACLCache的作用是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

作用:完成LIst与Long互相转换,DataNode中acl是一个Long值,并不是ACL列表

空间复杂:内部类AtomicLongWithEquals

属性:

//日志信息private static final Logger LOG = LoggerFactory.getLogger(ReferenceCountedACLCache.class);// long ACL 列表对应关系final Map> longKeyMap = new HashMap>();//  ACL 列表 long对应关系final Map, Long> aclKeyMap = new HashMap, Long>();final Map referenceCounter = new HashMap();private static final long OPEN_UNSAFE_ACL_ID = -1L;/** * these are the number of acls that we have in the datatree */long aclIndex = 0;

方法:

记录引用次数

private static class AtomicLongWithEquals extends AtomicLong {    private static final long serialVersionUID = 3355155896813725462L;    public AtomicLongWithEquals(long i) {        super(i);    }    @Override    public boolean equals(Object o) {        if (this == o) {            return true;        }        if (o == null || getClass() != o.getClass()) {            return false;        }        return equals((AtomicLongWithEquals) o);    }    public boolean equals(AtomicLongWithEquals that) {        return get() == that.get();    }    @Override    public int hashCode() {        return 31 * Long.valueOf(get()).hashCode();    }}添加使用public synchronized void addUsage(Long acl) {    if (acl == OPEN_UNSAFE_ACL_ID) {        return;    }    if (!longKeyMap.containsKey(acl)) {        LOG.info("Ignoring acl " + acl + " as it does not exist in the cache");        return;    }    AtomicLong count = referenceCounter.get(acl);    if (count == null) {        referenceCounter.put(acl, new AtomicLongWithEquals(1));    } else {        count.incrementAndGet();    }}//移除引用public synchronized void removeUsage(Long acl) {    if (acl == OPEN_UNSAFE_ACL_ID) {        return;    }    if (!longKeyMap.containsKey(acl)) {        LOG.info("Ignoring acl " + acl + " as it does not exist in the cache");        return;    }    long newCount = referenceCounter.get(acl).decrementAndGet();    if (newCount <= 0) {        referenceCounter.remove(acl);        aclKeyMap.remove(longKeyMap.get(acl));        longKeyMap.remove(acl);    }}//如果引用计数值小于0,则移除相关信息public synchronized void purgeUnused() {    Iterator> refCountIter = referenceCounter.entrySet().iterator();    while (refCountIter.hasNext()) {        Map.Entry entry = refCountIter.next();        if (entry.getValue().get() <= 0) {            Long acl = entry.getKey();            aclKeyMap.remove(longKeyMap.get(acl));            longKeyMap.remove(acl);            refCountIter.remove();        }    }}

关于zk中ReferenceCountedACLCache的作用是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

作用 信息 内容 更多 帮助 不错 复杂 兴趣 小伙 小伙伴 属性 文章 方法 日志 次数 知识 空间 篇文章 参考 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库中实体之间的关系表示为 网络技术服务中心管理办法 基于数据库的课程设计 虹口区加工软件开发项目信息 买的云服务器如何远程登录 山东创客网络安全竞赛 ctf网络安全大赛楚慧杯 吉林java微服务架构数据库 数字转型背景下企业网络安全的书 学校网络安全宣传主题班会 宿州网络安全处邵长凯 csgo 服务器启动器 香橙派zero搭建服务器 计算机网络技术应用教学 医院挂号预约系统数据库 不同地区服务器对游戏的影响 租服务器开传奇让别人玩 数据库中score是什么 甘肃省监狱网络安全防控 13级软件开发工程师月薪 数据库系统导论 pdf 区块链存储与数据库的扩容区别 ctf网络安全大赛楚慧杯 网络安全提意见 网络安全课观后感100字 三维网络技术公司 上海常见软件开发费用 服务器ddr3 型号 数据库表加主键外键作用 自己的主机可以做小程序服务器吗
0