Doris数据库FE——FeServer

news2024/11/16 23:31:55

在这里插入图片描述

            FeServer feServer = new FeServer(Config.rpc_port);
            feServer.start();

FeServer(Doris frontend thrift server)职责是负责FE和BE之间通信。如下即为初始化中关于FeServer类的构造函数和start函数的具体代码。其start函数流程和构建thrift server行为一致,这里不介绍,仅说明其提供的接口。

public class FeServer {
    private static final Logger LOG = LogManager.getLogger(FeServer.class);
    private int port;  private ThriftServer server;
    public FeServer(int port) { this.port = port; }

    public void start() throws IOException {
        FrontendServiceImpl service = new FrontendServiceImpl(ExecuteEnv.getInstance());
        Logger feServiceLogger = LogManager.getLogger(FrontendServiceImpl.class);
        FrontendService.Iface instance = (FrontendService.Iface) Proxy.newProxyInstance(
                FrontendServiceImpl.class.getClassLoader(), FrontendServiceImpl.class.getInterfaces(),
                (proxy, method, args) -> {
                    long begin = System.currentTimeMillis();
                    String name = method.getName();
                    if (MetricRepo.isInit) { MetricRepo.THRIFT_COUNTER_RPC_ALL.getOrAdd(name).increase(1L); }
                    feServiceLogger.debug("receive request for {}", name);
                    Object r = null;
                    try {  r = method.invoke(service, args);
                    } catch (Throwable t) {
                        feServiceLogger.warn("errors while process request for {}", name, t);
                        // If exception occurs, do not deal it, just keep as the previous
                        throw t;
                    } finally {
                        feServiceLogger.debug("finish process request for {}", name);
                        if (MetricRepo.isInit) {
                            long end = System.currentTimeMillis();
                            MetricRepo.THRIFT_COUNTER_RPC_LATENCY.getOrAdd(name).increase(end - begin);
                        }
                    }
                    return r;
                });
        // setup frontend server
        TProcessor tprocessor = new FrontendService.Processor<>(instance);
        server = new ThriftServer(port, tprocessor);
        server.start();
        LOG.info("thrift server started.");
    }
}

Frontend service用于服务通过thrift协议过来的所有请求。其构造函数主要关注exeEnv和MasterImple两个类。

// Frontend service used to serve all request for this frontend through thrift protocol
public class FrontendServiceImpl implements FrontendService.Iface {
    private static final Logger LOG = LogManager.getLogger(FrontendServiceImpl.class);
    private MasterImpl masterImpl;
    private ExecuteEnv exeEnv;
    // key is txn id,value is index of plan fragment instance, it's used by multi table request plan
    private ConcurrentHashMap<Long, Integer> multiTableFragmentInstanceIdIndexMap =
            new ConcurrentHashMap<>(64);

    public FrontendServiceImpl(ExecuteEnv exeEnv) {
        masterImpl = new MasterImpl();  this.exeEnv = exeEnv;
    }

在这里插入图片描述
在 FE 端与 BE 端均存在一个任务 Queue,如上图所示,从当前版本来看 thrift 实现的与 BE 之间的交互主要是用 AgentClient 来承载,而查看代码仅用于 snapshot 的管理过程,其他的并非通过该接口实现。注 这里存在疑问 gRpc 和 thrift 接口混着用的目的,不太明确


public TConfirmUnusedRemoteFilesResult confirmUnusedRemoteFiles(TConfirmUnusedRemoteFilesRequest request)
public TGetDbsResult getDbNames(TGetDbsParams params) throws TException
private static ColumnDef initColumnfromThrift(TColumnDesc tColumnDesc, String comment)
public TAddColumnsResult addColumns(TAddColumnsRequest request) throws TException
public TGetTablesResult getTableNames(TGetTablesParams params) throws TException
public TListTableStatusResult listTableStatus(TGetTablesParams params) throws TException
public TListPrivilegesResult listTablePrivilegeStatus(TGetTablesParams params) throws TException
public TListPrivilegesResult listSchemaPrivilegeStatus(TGetTablesParams params) throws TException
public TListPrivilegesResult listUserPrivilegeStatus(TGetTablesParams params) throws TException
public TDescribeTableResult describeTable(TDescribeTableParams params) throws TExceptionpublic
TDescribeTablesResult describeTables(TDescribeTablesParams params) throws TException
public TFetchSchemaTableDataResult fetchSchemaTableData(TFetchSchemaTableDataRequest request) throws TException
public TInitExternalCtlMetaResult initExternalCtlMeta(TInitExternalCtlMetaRequest request) throws TException
public TQueryStatsResult getQueryStats(TGetQueryStatsRequest request) throws TException
public TGetTabletReplicaInfosResult getTabletReplicaInfos(TGetTabletReplicaInfosRequest request)
public TStatus updateStatsCache(TUpdateFollowerStatsCacheRequest request) throws TException


public TShowVariableResult showVariables(TShowVariableRequest params) throws TException
public TMasterOpResult forward(TMasterOpRequest params) throws TException
public TMySqlLoadAcquireTokenResult acquireToken() throws TException
public TCheckAuthResult checkAuth(TCheckAuthRequest request) throws TException


public TFeResult updateExportTaskStatus(TUpdateExportTaskStatusRequest request) throws TException
public TReportExecStatusResult reportExecStatus(TReportExecStatusParams params) throws TException
public TMasterResult finishTask(TFinishTaskRequest request) throws TException
public TMasterResult report(TReportRequest request) throws TException
public TStreamLoadPutResult streamLoadPut(TStreamLoadPutRequest request)
public TStreamLoadMultiTablePutResult streamLoadMultiTablePut(TStreamLoadPutRequest request)


public TLoadTxnBeginResult loadTxnBegin(TLoadTxnBeginRequest request) throws TException
public TBeginTxnResult beginTxn(TBeginTxnRequest request) throws TException
public TLoadTxnCommitResult loadTxnPreCommit(TLoadTxnCommitRequest request) throws TException
public TLoadTxn2PCResult loadTxn2PC(TLoadTxn2PCRequest request) throws TException
public TLoadTxnCommitResult loadTxnCommit(TLoadTxnCommitRequest request) throws TException
public TCommitTxnResult commitTxn(TCommitTxnRequest request) throws TException
public TLoadTxnRollbackResult loadTxnRollback(TLoadTxnRollbackRequest request) throws TException
public TRollbackTxnResult rollbackTxn(TRollbackTxnRequest request) throws TException
public TWaitingTxnStatusResult waitingTxnStatus(TWaitingTxnStatusRequest request) throws TException
public TStatus snapshotLoaderReport(TSnapshotLoaderReportRequest request) throws TException
public TGetBinlogResult getBinlog(TGetBinlogRequest request) throws TException
public TGetSnapshotResult getSnapshot(TGetSnapshotRequest request) throws TException
public TRestoreSnapshotResult restoreSnapshot(TRestoreSnapshotRequest request) throws TException
public TGetBinlogLagResult getBinlogLag(TGetBinlogRequest request) throws TException


public TFrontendPingFrontendResult ping(TFrontendPingFrontendRequest request) throws TException
public TGetMasterTokenResult getMasterToken(TGetMasterTokenRequest request) throws TException

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1152165.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot网上商城购物系统

第1章 绪论 1.1背景及意义 随着社会的快速发展&#xff0c;计算机的影响是全面且深入的。人们生活水平的不断提高&#xff0c;日常生活中人们对网上商城购物系统方面的要求也在不断提高&#xff0c;购物的人数更是不断增加&#xff0c;使得网上商城购物系统的开发成为必需而且…

synchronized 同步锁的思考

经过前面的分析&#xff0c;我们大概对同步锁有了一些基本的认识&#xff0c;同步锁的本质就是实现多线程的互斥&#xff0c;保证同一时刻只有一个线程能够访问加了同步锁的代码&#xff0c;使得线程安全性得到保证。下面我们思考一下&#xff0c;为了达到这个目的&#xff0c;…

毕业工作之后,没有在学校中考试排名这种方式,那如何确定自己是不是一直在退步还是在进步

在职场中衡量自己是否在进步或者退步&#xff0c;相较于学校里通过考试排名来判断要复杂得多。因为职场的评价标准更为多样&#xff0c;同时还涉及到个人职业发展、工作满意度等方面。下面是一些你可以用来判断自己是否在进步的方法&#xff1a; 1. 目标设定与达成 给自己设定…

【数据结构与算法】二叉树基础OJ--下(巩固提高)

前言&#xff1a; 上一篇文章我们讲到二叉树基础oj题目的练习&#xff0c;此篇文章是完成基础oj练习的完结篇。 传送-->【数据结构与算法】二叉树基础OJ -- 上 (巩固提高)-CSDN博客 &#x1f4a5;&#x1f388;个人主页:​​​​​​Dream_Chaser&#xff5e; &#x1f388…

分类预测 | Matlab实现SSA-ELM麻雀优化算法优化极限学习机分类预测

分类预测 | Matlab实现SSA-ELM麻雀优化算法优化极限学习机分类预测 目录 分类预测 | Matlab实现SSA-ELM麻雀优化算法优化极限学习机分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现SSA-ELM麻雀优化算法优化极限学习机分类预测&#xff08;Matlab完整…

微信小程序云开发如何实现多条件多字段模糊查询

之前的博文中&#xff0c;已经跟大家介绍过&#xff0c;微信小程序云开发如何实现单条件单字段的模糊查询&#xff0c;这个是很常见的业务需求。在一些更复杂的场景下&#xff0c;我们需要实现多条件多字段的模糊查询&#xff0c;比如同时兼容对商品名称、类别、产地等多条件的…

Canvas录制视频

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

AI:41-基于基于深度学习的YOLO模型的玉米病害检测

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌本专栏包含以下学习方向: 机器学习、深度学…

idea使用MyBatisX插件

1.MyBatisX功能 (1).实现mapper和xml的跳转 (2).自动生成java文件&#xff0c;比如mapper、service、dao、pojo 2.安装MyBatisX插件 install后然后重启idea即可 3.使用MyBatieX实现mapper和xml跳转 &#xff08;1&#xff09;.点击mapper中的红色图标即可跳转到对应的xml方…

算法通过村第十八关-回溯|青铜笔记|什么叫回溯(初篇)

文章目录 前言从N叉树说起为什么有的问题暴力搜索也不行总结 前言 提示&#xff1a;我对你透露一个大密码&#xff0c;这是人类最古老的玩笑。往哪走&#xff0c;都是往前走。 --米兰昆德拉 回溯是非常重要的算法思想之一&#xff0c;主要解决一些暴力枚举也搞不定的问题&#…

第五章 I/O管理 五、输入/输出应用程序接口设备驱动程序接口

目录 一、应用程序接口 二、阻塞和非阻塞I/O 阻塞I/O: 非阻塞I/O: 三、设备驱动程序 一、应用程序接口 以前的统一接口不适用了&#xff0c;现在改为了几种不同的接口 二、阻塞和非阻塞I/O 阻塞I/O: 应用程序发出I/O系统调用&#xff0c;进程需转为阻塞态等待。 eg:字符…

40 深度学习(四):卷积神经网络|深度可分离卷积|colab和kaggle的基础使用

文章目录 卷积神经网络为什么要卷积卷积的具体流程池化tensorflow代码 深度可分离卷积原理介绍计算量对比代码参数计算例子 colab 和 kagglecolabkaggle如何在colab上使用kaggle的数据 卷积神经网络 卷积神经网络的基本结构 1&#xff1a; (卷积层(可选)池化层) * N全连接层 *…

保险公司【Hamilton Insurance】申请1亿美元纽交所IPO上市

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;总部位于美国的保险公司Hamilton Insurance Group, Ltd&#xff08;简称&#xff1a;Hamilton Insurance&#xff09;近期已向美国证券交易委员会&#xff08;SEC&#xff09;提交招股书&#xff…

力扣每日一题86:分隔链表

题目描述&#xff1a; 给你一个链表的头节点 head 和一个特定值 x &#xff0c;请你对链表进行分隔&#xff0c;使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 示例 1&#xff1a; 输入&#xff1a;head [1,4,…

陷阱,实时IO判断避坑!

这是题面&#xff1a; 然后我写了如下代码: #include<iostream> #include<map> #include<vector> #include<algorithm> using namespace std; #define int long long int const int maxLine50010; map<char,char> mymap; int arr[maxLine]{1,2…

数据结构Demo——简单计算器

简单计算器 一、项目介绍二、技术使用三、具体代码实现1.前端部分2.后端部分 一、项目介绍 本项目实现了一个通过网页访问的简单计算器&#xff0c;它可以对带括号的加减乘除表达式进行计算并将计算结果返回给用户&#xff0c;并且可以对用户输入的表达式进行合法性判断&#…

SV-10A-4G IP网络报警非可视终端 (4G版)

SV-10A-4G IP网络报警非可视终端 &#xff08;4G版&#xff09; https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.621e3d0dpv5knb&ftt&id745728046948 产品简介&#xff1a; 通过局域网/广域网网组网的网络报警系统&#xff0c;改变传统局域网组网…

【MySql】10- 实践篇(八)

文章目录 1. 用动态的观点看加锁1.1 不等号条件里的等值查询1.2 等值查询的过程1.3 怎么看死锁&#xff1f;1.4 怎么看锁等待&#xff1f;1.5 update 的例子 2. 误删数据后怎么办?2.1 删除行2.2 误删库/表2.3 延迟复制备库2.4 预防误删库 / 表的方法2.4.1 账号分离2.4.2 制定操…

人工智能(8):Numpy的使用

1 Numpy介绍 Numpy&#xff08;Numerical Python&#xff09;是一个开源的Python科学计算库&#xff0c;用于快速处理任意维度的数组。 Numpy支持常见的数组和矩阵操作。对于同样的数值计算任务&#xff0c;使用Numpy比直接使用Python要简洁的多。 Numpy使用ndarray对象来处理…

NSGA-II 遗传多目标算法(python示例)

一、前言 最近在准备毕业论文&#xff0c;研究了一下主流的多目标算法&#xff0c;对于NSGA-II&#xff0c;网上大部分代码是全部是面向过程来实现的&#xff0c;本人更喜欢采用面向对象的方式&#xff0c;故采用python面向对象实现了一个示例&#xff0c;实现了对于二元多目标…