From bd91446d430b9adc9614af3a3b6df6b9c9fdcfc7 Mon Sep 17 00:00:00 2001 From: wangyunlai Date: Fri, 8 Nov 2024 10:05:25 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E5=8F=B7=E7=A0=81=20(#475)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### What problem were solved in this pull request? Problem: 邀请入SIG群改用OBCE888. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8174e07cc..2333f1414 100644 --- a/README.md +++ b/README.md @@ -100,4 +100,4 @@ MiniOB 采用 [木兰宽松许可证,第2版](https://license.coscl.org.cn/Mul - [OceanBase 社区交流群 33254054](https://h5.dingtalk.com/circle/healthCheckin.html?corpId=dingd88359ef5e4c49ef87cda005313eea7a&1fe0ca69-72d=16c86a07-83c&cbdbhh=qwertyuiop&origin=1) - [OceanBase 大赛官方交流群 35326455](https://qr.dingtalk.com/action/joingroup?code=v1,k1,g61jI0RwHQA8UMocuTbys2cyM7vck2c6jNE87vdxz9o=&_dt_no_comment=1&origin=11) - [OceanBase 官方论坛](https://ask.oceanbase.com/) -- MiniOB 开发者微信群(添加 hnwyllmm_126 为好友,备注 MiniOB,邀请入群) +- MiniOB 开发者微信群(添加 OBCE888 为好友,备注 MiniOB SIG,邀请入群) From 42925b0ad8c56d9535722246ecfce90144f35127 Mon Sep 17 00:00:00 2001 From: nauta <870284156@qq.com> Date: Wed, 13 Nov 2024 17:05:11 +0800 Subject: [PATCH 2/4] fix rollup (#478) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### What problem were solved in this pull request? Problem: ref #296 double_to_str 函数中使用print %.2f 并不会将浮点数四舍五入,导致测试时与MySQL浮点数四舍五入后结果不同。 ### What is changed and how it works? 先进行四舍五入,然后使用 %.2f 转换为字符串 --- deps/common/lang/cmath.h | 14 ++++++++++++++ deps/common/lang/string.cpp | 4 +++- docs/docs/game/miniob-output-convention.md | 2 +- 3 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 deps/common/lang/cmath.h diff --git a/deps/common/lang/cmath.h b/deps/common/lang/cmath.h new file mode 100644 index 000000000..f25cfcef2 --- /dev/null +++ b/deps/common/lang/cmath.h @@ -0,0 +1,14 @@ +/* Copyright (c) 2021 OceanBase and/or its affiliates. All rights reserved. +miniob is licensed under Mulan PSL v2. +You can use this software according to the terms and conditions of the Mulan PSL v2. +You may obtain a copy of Mulan PSL v2 at: + http://license.coscl.org.cn/MulanPSL2 +THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +See the Mulan PSL v2 for more details. */ +#pragma once + +#include + +using std::round; \ No newline at end of file diff --git a/deps/common/lang/string.cpp b/deps/common/lang/string.cpp index de8c7af1e..11a8d3593 100644 --- a/deps/common/lang/string.cpp +++ b/deps/common/lang/string.cpp @@ -22,6 +22,7 @@ See the Mulan PSL v2 for more details. */ #include "common/log/log.h" #include "common/lang/algorithm.h" +#include "common/lang/cmath.h" #include "common/lang/iomanip.h" namespace common { @@ -270,7 +271,8 @@ char *substr(const char *s, int n1, int n2) string double_to_str(double v) { char buf[256]; - snprintf(buf, sizeof(buf), "%.2f", v); + double rounded_v = round(v * 100.0) / 100.0; + snprintf(buf, sizeof(buf), "%.2f", rounded_v); size_t len = strlen(buf); while (buf[len - 1] == '0') { len--; diff --git a/docs/docs/game/miniob-output-convention.md b/docs/docs/game/miniob-output-convention.md index 15999d0c8..96d165fcf 100644 --- a/docs/docs/game/miniob-output-convention.md +++ b/docs/docs/game/miniob-output-convention.md @@ -28,7 +28,7 @@ NOTE:后台测试程序,是将预先编辑好的Case执行后,将执行结 4. 所有输出不区分大小写 5. 日期(date)输出格式使用:"YYYY-mm-DD" 6. 输出的字符串不使用单引号双引号或其它括起来 -7. 浮点数输出,不要带后面多余的0,可以参考C sprintf的%g格式输出,保留两位小数。参考函数 double_to_str +7. 浮点数输出,不要带后面多余的0,四舍五入保留两位小数。参考函数 double_to_str FAQ - 某张表或者某个查询结果一行数据都没有,但是依然需要输出表头信息 From 4d90aee5a825a7bd321f8e884712c137d28f757a Mon Sep 17 00:00:00 2001 From: wangyunlai Date: Thu, 14 Nov 2024 09:39:23 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20bplus=5Ftree=5Ftest=20?= =?UTF-8?q?=E5=8D=95=E6=B5=8B=E9=97=AE=E9=A2=98=20(#476)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### What problem were solved in this pull request? Problem: 问题1:bplus_tree_test 单测失败,内存非法访问 问题2:bplus_tree_log_test concurrency 单测失败 ### What is changed and how it works? 问题1:单测运行时ASAN报内存非法访问。由于BplusTreeMiniTransaction析构时自动调用BplusTreeLogger的析构,接着调用 BplusTreeLogger::commit,这里会访问Frame,而frame已经释放,这样造成的内存非法访问。 问题2:build.sh 没有传入-DCONCURRENCY参数 修复方法: BplusTreeMiniTransaction 构造函数不给出rc时不自动提交或回滚,BplusTreeLogger也不需要在析构时自动提交。 --- build.sh | 2 +- deps/common/log/log.h | 1 + .../storage/buffer/disk_buffer_pool.cpp | 9 ++++++--- src/observer/storage/index/.bplus_tree.h.swp | Bin 0 -> 16384 bytes src/observer/storage/index/bplus_tree_log.cpp | 2 +- 5 files changed, 9 insertions(+), 5 deletions(-) create mode 100644 src/observer/storage/index/.bplus_tree.h.swp diff --git a/build.sh b/build.sh index 13b899418..b228154b8 100755 --- a/build.sh +++ b/build.sh @@ -157,7 +157,7 @@ function build { local build_type_lower=$(echo "$1" | tr '[:upper:]' '[:lower:]') # 转换为小写 echo "Build type: $build_type_lower" # 输出构建类型 - do_build "$build_type_lower" -DCMAKE_BUILD_TYPE="$build_type_lower" # 调用 do_build + do_build $@ -DCMAKE_BUILD_TYPE="$build_type_lower" # 调用 do_build } diff --git a/deps/common/log/log.h b/deps/common/log/log.h index f51b798c8..c31983bf7 100644 --- a/deps/common/log/log.h +++ b/deps/common/log/log.h @@ -319,6 +319,7 @@ int Log::out(const LOG_LEVEL console_level, const LOG_LEVEL log_level, T &msg) do { \ if (!(expression)) { \ LOG_PANIC(description, ##__VA_ARGS__); \ + LOG_PANIC("%s", lbt()); \ assert(expression); \ } \ } while (0) diff --git a/src/observer/storage/buffer/disk_buffer_pool.cpp b/src/observer/storage/buffer/disk_buffer_pool.cpp index 92215cc7f..74a8ea497 100644 --- a/src/observer/storage/buffer/disk_buffer_pool.cpp +++ b/src/observer/storage/buffer/disk_buffer_pool.cpp @@ -115,6 +115,7 @@ Frame *BPFrameManager::get_internal(const FrameId &frame_id) (void)frames_.get(frame_id, frame); if (frame != nullptr) { frame->pin(); + LOG_DEBUG("got a frame. frame=%s", frame->to_string().c_str()); } return frame; } @@ -138,6 +139,7 @@ Frame *BPFrameManager::alloc(int buffer_pool_id, PageNum page_num) frame->set_page_num(page_num); frame->pin(); frames_.put(frame_id, frame); + LOG_DEBUG("allocate a new frame. frame=%s", frame->to_string().c_str()); } return frame; } @@ -372,6 +374,7 @@ RC DiskBufferPool::allocate_page(Frame **frame) hdr_frame_->set_lsn(lsn); + LOG_DEBUG("allocate a new page without extend buffer pool. page num=%d, buffer pool=%d", i, id()); lock_.unlock(); return get_this_page(i, frame); } @@ -401,8 +404,8 @@ RC DiskBufferPool::allocate_page(Frame **frame) return rc; } - LOG_INFO("allocate new page. file=%s, pageNum=%d, pin=%d", - file_name_.c_str(), page_num, allocated_frame->pin_count()); + LOG_INFO("allocate new page by extending bufferpool. buffer_pool_id=%d, pageNum=%d, pin=%d", + id(), page_num, allocated_frame->pin_count()); file_header_->allocated_pages++; file_header_->page_count++; @@ -705,7 +708,7 @@ RC DiskBufferPool::allocate_frame(PageNum page_num, Frame **buffer) Frame *frame = frame_manager_.alloc(id(), page_num); if (frame != nullptr) { *buffer = frame; - LOG_DEBUG("allocate frame %p, page num %d", frame, page_num); + LOG_DEBUG("allocate frame %p, page num %d, frame=%s", frame, page_num, frame->to_string().c_str()); return RC::SUCCESS; } diff --git a/src/observer/storage/index/.bplus_tree.h.swp b/src/observer/storage/index/.bplus_tree.h.swp new file mode 100644 index 0000000000000000000000000000000000000000..8858137b253ea277e40faf520f61542e4d2667c0 GIT binary patch literal 16384 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 Date: Thu, 14 Nov 2024 20:13:00 +0800 Subject: [PATCH 4/4] =?UTF-8?q?build.sh=20init=20=E4=BE=9D=E8=B5=96sudo?= =?UTF-8?q?=E5=91=BD=E4=BB=A4=20(#445)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### What problem were solved in this pull request? close #330 Problem: 普通用户,没有sudo权限,在执行build.sh init时需要使用sudo,才能把依赖安装到系统目录。 ### What is changed and how it works? 默认将第三方依赖安装到deps/3rd/usr/local下,编译miniob时, 在CMakeLists.txt文件中增加变量 CMAKE_PREFIX_PATH=deps/3rd/usr/local。 在构建docker镜像时,第三方依赖库还是安装在系统目录中,以防用户使用docker镜像时误删除自己的代码目录,在Dockerfile中使用下面的方式安装第三方依赖: ```bash THIRD_PARTY_INSTALL_PREFIX=/usr/local bash build.sh init ``` 使用 `THIRD_PARTY_INSTALL_PREFIX` 指定依赖安装的目录。 --- .gitignore | 18 +++++++----------- CMakeLists.txt | 2 +- benchmark/CMakeLists.txt | 2 +- build.sh | 15 +++++++++------ docker/Dockerfile | 2 +- docs/docs/how_to_build.md | 10 ++++++---- src/observer/CMakeLists.txt | 5 ++--- unittest/common/CMakeLists.txt | 2 +- unittest/memtracer/CMakeLists.txt | 2 +- unittest/observer/CMakeLists.txt | 2 +- 10 files changed, 30 insertions(+), 30 deletions(-) diff --git a/.gitignore b/.gitignore index 109faaeef..8cdbee1da 100644 --- a/.gitignore +++ b/.gitignore @@ -1,13 +1,9 @@ -./deps/3rd -./deps/libevent -./deps/googletest -./deps/jsoncpp -./deps/benchmark +deps/3rd/* .vscode !.vscode/tasks.json !.vscode/launch.json .VSCodeCounter/* -./docs/doxy/ +docs/doxy/ build/* build_* cmake-build-*/* @@ -17,11 +13,11 @@ build .idea .ccls-cache compile_commands.json -./.name -./miniob.iml -./vcs.xml -./workspace.xml -./modules.xml +.name +miniob.iml +vcs.xml +workspace.xml +modules.xml GRTAGS GPATH GTAGS diff --git a/CMakeLists.txt b/CMakeLists.txt index 4e7dfbb7e..17fb4e41e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,7 +7,7 @@ MESSAGE(STATUS "This is Project source dir " ${PROJECT_SOURCE_DIR}) MESSAGE(STATUS "This is PROJECT_BINARY_DIR dir " ${PROJECT_BINARY_DIR}) SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) - +SET(CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH};${PROJECT_SOURCE_DIR}/deps/3rd/usr/local") SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake) # 设置默认构建类型为 Debug diff --git a/benchmark/CMakeLists.txt b/benchmark/CMakeLists.txt index a64cfe3cb..415ccc080 100644 --- a/benchmark/CMakeLists.txt +++ b/benchmark/CMakeLists.txt @@ -8,7 +8,7 @@ FOREACH (F ${ALL_SRC}) get_filename_component(prjName ${F} NAME_WE) MESSAGE("Build ${prjName} according to ${F}") ADD_EXECUTABLE(${prjName} ${F}) - TARGET_LINK_LIBRARIES(${prjName} common pthread dl benchmark) + TARGET_LINK_LIBRARIES(${prjName} common pthread dl benchmark::benchmark) if(NOT ${prjName} STREQUAL "memtracer_performance_test") TARGET_LINK_LIBRARIES(${prjName} observer_static) endif() diff --git a/build.sh b/build.sh index b228154b8..a8f0ef5cf 100755 --- a/build.sh +++ b/build.sh @@ -4,8 +4,11 @@ TOPDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) BUILD_SH=$TOPDIR/build.sh +echo "THIRD_PARTY_INSTALL_PREFIX is ${THIRD_PARTY_INSTALL_PREFIX:=$TOPDIR/deps/3rd/usr/local}" CMAKE_COMMAND="cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1 --log-level=STATUS" +CMAKE_COMMAND_THIRD_PARTY="$CMAKE_COMMAND -DCMAKE_INSTALL_PREFIX=$THIRD_PARTY_INSTALL_PREFIX" +CMAKE_COMMAND_MINIOB="$CMAKE_COMMAND" ALL_ARGS=("$@") BUILD_ARGS=() @@ -80,7 +83,7 @@ function do_init cd ${TOPDIR}/deps/3rd/libevent && \ mkdir -p build && \ cd build && \ - ${CMAKE_COMMAND} .. -DEVENT__DISABLE_OPENSSL=ON -DEVENT__LIBRARY_TYPE=BOTH && \ + ${CMAKE_COMMAND_THIRD_PARTY} .. -DEVENT__DISABLE_OPENSSL=ON -DEVENT__LIBRARY_TYPE=BOTH && \ ${MAKE_COMMAND} -j4 && \ make install @@ -88,7 +91,7 @@ function do_init cd ${TOPDIR}/deps/3rd/googletest && \ mkdir -p build && \ cd build && \ - ${CMAKE_COMMAND} .. && \ + ${CMAKE_COMMAND_THIRD_PARTY} .. && \ ${MAKE_COMMAND} -j4 && \ ${MAKE_COMMAND} install @@ -96,7 +99,7 @@ function do_init cd ${TOPDIR}/deps/3rd/benchmark && \ mkdir -p build && \ cd build && \ - ${CMAKE_COMMAND} .. -DCMAKE_BUILD_TYPE=RelWithDebInfo -DBENCHMARK_ENABLE_TESTING=OFF -DBENCHMARK_INSTALL_DOCS=OFF -DBENCHMARK_ENABLE_GTEST_TESTS=OFF -DBENCHMARK_USE_BUNDLED_GTEST=OFF -DBENCHMARK_ENABLE_ASSEMBLY_TESTS=OFF && \ + ${CMAKE_COMMAND_THIRD_PARTY} .. -DCMAKE_BUILD_TYPE=RelWithDebInfo -DBENCHMARK_ENABLE_TESTING=OFF -DBENCHMARK_INSTALL_DOCS=OFF -DBENCHMARK_ENABLE_GTEST_TESTS=OFF -DBENCHMARK_USE_BUNDLED_GTEST=OFF -DBENCHMARK_ENABLE_ASSEMBLY_TESTS=OFF && \ ${MAKE_COMMAND} -j4 && \ ${MAKE_COMMAND} install @@ -104,7 +107,7 @@ function do_init cd ${TOPDIR}/deps/3rd/jsoncpp && \ mkdir -p build && \ cd build && \ - ${CMAKE_COMMAND} -DJSONCPP_WITH_TESTS=OFF -DJSONCPP_WITH_POST_BUILD_UNITTEST=OFF .. && \ + ${CMAKE_COMMAND_THIRD_PARTY} -DJSONCPP_WITH_TESTS=OFF -DJSONCPP_WITH_POST_BUILD_UNITTEST=OFF .. && \ ${MAKE_COMMAND} && \ ${MAKE_COMMAND} install @@ -137,8 +140,8 @@ function do_build { TYPE=$1; shift prepare_build_dir $TYPE || return - echo "${CMAKE_COMMAND} ${TOPDIR} $@" - ${CMAKE_COMMAND} -S ${TOPDIR} $@ + echo "${CMAKE_COMMAND_MINIOB} ${TOPDIR} $@" + ${CMAKE_COMMAND_MINIOB} -S ${TOPDIR} $@ } function do_clean diff --git a/docker/Dockerfile b/docker/Dockerfile index e6e7e4765..e7baaeb13 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -21,7 +21,7 @@ RUN apt-get install -y openssh-server # init miniob dependencies RUN git clone https://github.com/oceanbase/miniob /tmp/miniob \ && cd /tmp/miniob \ - && bash build.sh init \ + && THIRD_PARTY_INSTALL_PREFIX=/usr/local bash build.sh init \ && rm -rf /tmp/miniob RUN mkdir /var/run/sshd diff --git a/docs/docs/how_to_build.md b/docs/docs/how_to_build.md index 8119b4ac7..166892a38 100644 --- a/docs/docs/how_to_build.md +++ b/docs/docs/how_to_build.md @@ -26,15 +26,17 @@ MiniOB 需要使用: bash build.sh init ``` -脚本将自动拉取依赖库(可以参考 .gitmodules) 然后编译安装到系统目录。 +脚本将自动拉取依赖库(可以参考 .gitmodules) 然后编译安装到miniob源码目录的 `deps/3rd/usr/local` 下。 -如果执行用户不是root,需要在命令前加上 `sudo`: +如果你想将第三方依赖安装到其它目录,比如 `/usr/local` 下,可以这样做: ```bash -sudo bash build.sh init +THIRD_PARTY_INSTALL_PREFIX=/usr/local bash build.sh init ``` -> 如果使用 GitPod 开发,可以跳过这步,会自动执行。 +> 注意:安装到系统目录可能需要一些特殊权限,可能需要使用 `sudo` 来执行命令。 + +> 如果使用 GitPod、GitHub Devcontainer 或 miniob docker 容器开发,可以跳过这步,会自动执行。 ## 2. 编译 diff --git a/src/observer/CMakeLists.txt b/src/observer/CMakeLists.txt index 051070200..267344f87 100644 --- a/src/observer/CMakeLists.txt +++ b/src/observer/CMakeLists.txt @@ -28,10 +28,9 @@ ENDFOREACH (F) SET(LIBEVENT_STATIC_LINK TRUE) FIND_PACKAGE(Libevent CONFIG REQUIRED) +FIND_PACKAGE(jsoncpp CONFIG REQUIRED) -# JsonCpp cannot work correctly with FIND_PACKAGE - -SET(LIBRARIES common pthread dl libevent::core libevent::pthreads libjsoncpp.a) +SET(LIBRARIES common pthread dl libevent::core libevent::pthreads JsonCpp::JsonCpp) # 指定目标文件位置 SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) diff --git a/unittest/common/CMakeLists.txt b/unittest/common/CMakeLists.txt index 536870cc3..23dc1a78d 100644 --- a/unittest/common/CMakeLists.txt +++ b/unittest/common/CMakeLists.txt @@ -7,6 +7,6 @@ FOREACH (F ${ALL_SRC}) get_filename_component(prjName ${F} NAME_WE) MESSAGE("Build ${prjName} according to ${F}") ADD_EXECUTABLE(${prjName} ${F}) - TARGET_LINK_LIBRARIES(${prjName} common pthread dl gtest gtest_main) + TARGET_LINK_LIBRARIES(${prjName} common pthread dl GTest::gtest_main) add_test(NAME ${prjName} COMMAND ${prjName}) ENDFOREACH (F) diff --git a/unittest/memtracer/CMakeLists.txt b/unittest/memtracer/CMakeLists.txt index 71c317439..8048b2459 100644 --- a/unittest/memtracer/CMakeLists.txt +++ b/unittest/memtracer/CMakeLists.txt @@ -7,6 +7,6 @@ FOREACH (F ${ALL_SRC}) get_filename_component(prjName ${F} NAME_WE) MESSAGE("Build ${prjName} according to ${F}") ADD_EXECUTABLE(${prjName} ${F}) - TARGET_LINK_LIBRARIES(${prjName} pthread dl gtest gtest_main memtracer) + TARGET_LINK_LIBRARIES(${prjName} pthread dl GTest::gtest_main memtracer) add_test(NAME ${prjName} COMMAND ${prjName}) ENDFOREACH (F) diff --git a/unittest/observer/CMakeLists.txt b/unittest/observer/CMakeLists.txt index d0209e814..c737d8abd 100644 --- a/unittest/observer/CMakeLists.txt +++ b/unittest/observer/CMakeLists.txt @@ -9,6 +9,6 @@ FOREACH (F ${ALL_SRC}) get_filename_component(prjName ${F} NAME_WE) MESSAGE("Build ${prjName} according to ${F}") ADD_EXECUTABLE(${prjName} ${F}) - TARGET_LINK_LIBRARIES(${prjName} common pthread dl gtest gtest_main observer_static) + TARGET_LINK_LIBRARIES(${prjName} common pthread dl GTest::gtest_main observer_static) add_test(NAME ${prjName} COMMAND ${prjName}) ENDFOREACH (F)