注:本文基于阿里云双核4G服务器Ubuntu22.04完成
Get Source Code
git clone https://github.com/oceanbase/miniob.git
How To Build?
参考项目源目录下的miniob/docs/how_to_build.md,需要安装GoogleTest,cmake等依赖,可以通过位于项目顶层目录执行命令一键完成:
sudo bash build.sh init
如果执行命令后出现报错如:”error: RPC failed; curl 16 Error in the HTTP2 framing layer”,考虑执行命令:
git config --global http.version HTTP/1.1
依赖安装成功后,开始编译一个DEBUG版本的miniob,位于项目顶层目录,执行命令:
bash build.sh
How To Run?
参考项目源目录下的miniob/docs/how_to_run.md,进入miniob/build/目录,以监听unix socket的方式启动服务端程序,执行命令:
./bin/observer -f ../etc/observer.ini -s miniob.sock
出现”Successfully load ../etc/observer.ini”后,保存原终端,新建终端,到达相同目录下,以监听unix socket的方式启动服务端程序后,启动客户端程序:
./bin/obclient -s miniob.sock
或
./bin/obclient
出现”miniob >”即表示启动成功,输入”show tables;”(不要忘了冒号)即可测试
How To Debug?
开发环境搭建(本地调试, 适用 Linux 和 Mac) – MiniOB (oceanbase.github.io)
Miniob2023版代码执行逻辑
从main开始
执行g_server->serve();
到达server.cpp
int Server::serve()
执行 int retval = start();
到达server.cpp
int Server::start()
执行return start_stdin_server();
到达server.cpp
int Server::start_stdin_server()
执行session_stage_->handle_event(event);
到达session_stage.cpp:
void SessionStage::handle_event(StageEvent *event)
执行handle_request(event);
到达session_stage.cpp:
void SessionStage::handle_request(StageEvent *event)
(
执行rc = resolve_stage_.handle_request(sql_event);
到达resolve_stage.cpp
RC ResolveStage::handle_request(SQLStageEvent *sql_event)
执行rc = Stmt::create_stmt(db, *sql_node, stmt);
到达stmt.cpp
RC Stmt::create_stmt(Db *db, ParsedSqlNode &sql_node, Stmt *&stmt)
…
而后回到void SessionStage::handle_request(StageEvent *event)
)
执行(void)handle_sql(&sql_event);
到达session_stage.cpp:
RC SessionStage::handle_sql(SQLStageEvent *sql_event)
执行rc = execute_stage_.handle_request(sql_event);
到达execute_stage.cpp:
RC ExecuteStage::handle_request(SQLStageEvent *sql_event)
执行rc = command_executor.execute(sql_event);
到达command_executor.cpp:
RC CommandExecutor::execute(SQLStageEvent *sql_event)
发表回复