Trino418版本动态加载catalog不需要重启集群修改思路及实现2

     原来没事的时候改了一个这样的功能,当时也没有仔细研究,后来也没继续弄。详细可以参考 https://www.cnblogs.com/liuzx8888/p/17635913.html

当时有2个问题:新增数据源需要每一个节点都去调取API注册跟数据源注册过了删除Catalog后再新增一模一样的就会提示Catalog存在,这样非常麻烦,最近闲下来又研究了一下,在原先的基础上做了一些改造。

具体流程:

 主要的修改思路:

1.CoordinatorDynamicCatalogManager 跟 WorkerDynamicCatalogManager 都在实现具体的Catalog的新增、删除功能,2者的功能要保持一致,让Worker 跟 Coordinator有一样的功能

2.API同时需要在Coordinator 跟Worker 同时注入,API的功能就参考上一篇文章的,Github 2个推送

3.参考CatalogPruneTask实现WorkerCatalogSyncTask,实现通知Worker的功能

4.Coordinator 负责数据库Status操作与本身的Catalog的新增、删除操作,Worker对应的操作都是通过上面自己开发的API来完成

 

具体的一些代码实现截图给大家参考下,前前后后调试了很多,写的有点乱,总之就是让Worker跟Coordinator有一样的API功能注入,通过Coordinator控制流程实现

1.在CatalogManager 接口里面新增新增、删除Catalog方法,WorkerDynamicCatalogManager、CoordinatorDynamicCatalogManager 实现具体的方法

2. 让Worker 跟 Coordinator 一样有加载catalog目录的功能,把WorkerDynamicCatalogManager 跟 CoordinatorDynamicCatalogManager 不一样的地方实现一下,参考CoordinatorDynamicCatalogManager就行,

3. 把Worker跟Coordinator 一样的服务启动的时候注入,让Worker跟Coordinator有一样的功能,不然Worker初始化不会自动加载Catalog、和新增、删除Catalog的功能

 

4.WorkerCatalogSyncTask,参考CatalogPruneTask ,只要API的部分改造完成,这个地方就很好弄了,仿照一个就可以自动固定时间去访问各个Worker节点的API信息进行注册,这样就只需要跟Coordinator 通信就可以了

 实践效果:

 定时获取是否有新增的Catalog

 API注册

 Coordinator:数据库会捕获到新增了1个Catalog,Worker注册完,数量从1变成0

 Worker:新增了相同的Catalog

 删除Catalog

  Coordinator:

  Worker:

 再次新增一模一样的Catalog,不会再报Catalog已经存在

Coordinator:

   Worker:

 

这样就能完成了动态加载catalog不重启集群同时还能随意的增加、修改、删除Catalog的功能。在上次的基础上解决了2个遗留问题,其实跟一些老铁做的定时刷新一个原理,欢迎有想法的老铁一起交流。

 

posted @ 2024-04-18 19:39  liuzx8888  阅读(261)  评论(0编辑  收藏  举报