From a796c3f81d592853d7144e58ff9903685b98a9d4 Mon Sep 17 00:00:00 2001 From: Yang Shuang Norton Date: Fri, 22 Aug 2025 14:53:32 +0800 Subject: [PATCH 01/10] Create overview.md --- docs/overview.md | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 docs/overview.md diff --git a/docs/overview.md b/docs/overview.md new file mode 100644 index 0000000..d36a19d --- /dev/null +++ b/docs/overview.md @@ -0,0 +1,39 @@ +## Repository Overview +DTC (**Distributed Table Cache**) is a high‑performance caching layer that offloads hotspot queries from relational databases. The project is primarily written in C/C++, built with CMake, and organized into several modules under `src/`. + +### Major Modules +- **Agent (`src/agent/`)** – A high-performance proxy (in C) handling client connections, consistent hashing, request routing, and statistics. +- **Core (`src/core/`)** – The main cache service (in C++) implementing buffer management, memory allocation, task pipelines, node grouping, logging, and the server entry point (`main.cc`). +- **Connector (`src/connector/`)** – Bridges the cache with persistent storage (e.g., MySQL) and manages database connections. +- **Config Center (`src/configcenter/`)** – Shared-memory based configuration APIs. +- **Daemons & Watchdog (`src/daemons/`, `src/agent-watchdog/`)** – Process supervisors that start, monitor, and restart components. +- **Data Lifecycle (`src/data_lifecycle/`)** – A scheduler that communicates with the agent to periodically clean or archive data based on user‑defined rules. +- **HWC Server (`src/hwcserver/`)** – Manages hierarchical storage and binlog synchronization for hot/warm/cold data tiers. +- **Rule Engine (`src/rule/`)** – Regex-based request filtering and configuration loading. +- **Utilities (`src/utils/`)** – Logging and config-generation helpers. +- **Third‑Party Libraries (`src/libs/`)** – Vendored dependencies such as cJSON, log4cplus, MySQL client, RocksDB, yaml‑cpp, croncpp, etc. + +### Supporting Material +- **Configuration** (`conf/`): Sample `dtc.yaml`, `agent.xml`, and logging configs. +- **Documentation** (`docs/`): Architecture overview, build instructions, quickstart guide. +- **Scripts** (`script/`): Shell helpers for building and running demo environments. +- **Tests** (`tests/`): Integration tests (Python + PyMySQL) and SQL setup scripts. + +## Important Concepts +1. **Component Roles** + - *Agent* handles incoming connections and distributes requests to DTC core nodes using consistent hashing. + - *Core* caches data, applies write-through policies, and maintains consistency and availability. + - *Connector* enables datasource mode, forwarding cache misses and updates to the underlying database. + - *Data Lifecycle Manager* and *HWC server* add scheduled cleanup and hierarchical storage capabilities. + +2. **Build & Dependencies** + - CMake orchestrates builds; optional test suite toggled via `-DCMAKE_TEST_OPTION=ON`. + - Many third‑party libraries are bundled; understanding how they’re integrated (e.g., log4cplus for logging, RocksDB for storage) is useful. + +3. **Configuration & Deployment** + - `conf/dtc.yaml` and `conf/agent.xml` define tables, routing, and runtime parameters. + - Dockerfiles and scripts in `script/` provide quick-start containers and build automation. + +4. **Code Style & Layout** + - C++ components commonly use “AskChain/AnswerChain” patterns and buffer abstractions. + - Agent code mimics a high-performance proxy design (similar to twemproxy) with extensive logging and stats. From 095f2c196b25a5866f312f9abf277e4fb7c9449d Mon Sep 17 00:00:00 2001 From: kfysck Date: Mon, 25 Aug 2025 13:07:41 +0000 Subject: [PATCH 02/10] compilation passed. --- CMakeLists.txt | 38 +++++++++++++++++++++- conf/server.yaml | 6 ++++ src/agent-watchdog/CMakeLists.txt | 4 +-- src/connector/CMakeLists.txt | 3 +- src/connector/mysql_operation.cc | 6 ++-- src/core/tree/t_tree.cc | 44 +++++++++++++++++++------- src/daemons/CMakeLists.txt | 6 ++-- src/daemons/helper.cc | 4 +-- src/daemons/hwc.cc | 2 +- src/hwcserver/CMakeLists.txt | 6 ++-- src/libs/common/CMakeLists.txt | 12 +++---- src/libs/common/request/request_base.h | 2 +- src/libs/common/socket/socket_addr.cc | 18 +++++------ src/libs/common/task/task_api.cc | 2 +- src/libs/common/task/task_base.cc | 4 +-- src/libs/common/task/task_base.h | 6 ++-- src/libs/common/timer/timer_list.h | 2 +- src/libs/stat/CMakeLists.txt | 2 +- src/rule/CMakeLists.txt | 3 +- src/utils.cmake | 29 ++++++++++------- 20 files changed, 132 insertions(+), 67 deletions(-) create mode 100644 conf/server.yaml diff --git a/CMakeLists.txt b/CMakeLists.txt index 38cecb7..60c8559 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,42 @@ -CMAKE_MINIMUM_REQUIRED (VERSION 2.8) +CMAKE_MINIMUM_REQUIRED (VERSION 3.10) + +# Set modern CMake policies +if(POLICY CMP0074) + cmake_policy(SET CMP0074 NEW) # Find_package uses _ROOT variables +endif() +if(POLICY CMP0077) + cmake_policy(SET CMP0077 NEW) # option() honors normal variables +endif() + PROJECT(dtc) +# Set default build type if not specified +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Build type" FORCE) +endif() + +# Enable modern compiler features while maintaining GCC 4.9 compatibility +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) + +# Compiler-specific flags for modern GCC support +if(CMAKE_COMPILER_IS_GNUCXX) + # Add compiler version checks for better compatibility + if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "6.0") + # Modern GCC flags + add_compile_options(-Wno-misleading-indentation) + add_compile_options(-Wno-address-of-packed-member) + endif() + + # Common flags for all GCC versions + add_compile_options(-fpermissive) + add_compile_options(-Wno-builtin-macro-redefined) + + # Use old ABI for compatibility with bundled libraries + add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0) +endif() + #Use optional command `cmake -DCMAKE_TEST_OPTION=ON ..` to build test demo. option(CMAKE_TEST_OPTION "option for test_demo" OFF) diff --git a/conf/server.yaml b/conf/server.yaml new file mode 100644 index 0000000..67d7c19 --- /dev/null +++ b/conf/server.yaml @@ -0,0 +1,6 @@ +rules: + - !AUTHORITY + users: + - sharding@%:sharding + provider: + type: ALL_PERMITTED diff --git a/src/agent-watchdog/CMakeLists.txt b/src/agent-watchdog/CMakeLists.txt index de22277..dd8f0c4 100644 --- a/src/agent-watchdog/CMakeLists.txt +++ b/src/agent-watchdog/CMakeLists.txt @@ -2,9 +2,9 @@ INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/src/daemons ${PROJECT_SOURCE_DIR}/src/libs/common ${PROJECT_SOURCE_DIR}/src/libs/stat - ${PROJECT_SOURCE_DIR}/src/core ${PROJECT_SOURCE_DIR}/src/libs/log4cplus/include ${PROJECT_SOURCE_DIR}/src/libs/yaml-cpp/include + ${PROJECT_SOURCE_DIR}/src/core ${PROJECT_SOURCE_DIR}/src/libs/mxml/include) LINK_DIRECTORIES( @@ -26,7 +26,7 @@ LINK_LIBRARIES(libstat.a) LINK_LIBRARIES(pthread) LINK_LIBRARIES(dl) -ADD_DEFINITIONS("-g -fPIC -fpermissive -std=gnu++11") +ADD_DEFINITIONS("-g -fPIC -fpermissive -std=gnu++11 -D_GLIBCXX_USE_CXX11_ABI=0") ADD_DEFINITIONS(-Wno-builtin-macro-redefined) ADD_EXECUTABLE(agent-watchdog ${SRC_LIST1}) diff --git a/src/connector/CMakeLists.txt b/src/connector/CMakeLists.txt index e71abd9..3d955bd 100644 --- a/src/connector/CMakeLists.txt +++ b/src/connector/CMakeLists.txt @@ -34,7 +34,6 @@ LINK_LIBRARIES(libsqlparser.a) LINK_LIBRARIES(libyaml-cpp.a) LINK_LIBRARIES(libz64.a) LINK_LIBRARIES(pthread) -LINK_LIBRARIES(nsl) LINK_LIBRARIES(stdc++) LINK_LIBRARIES(dl) LINK_LIBRARIES(z) @@ -44,7 +43,7 @@ LINK_LIBRARIES(libdaemons.a) LINK_LIBRARIES(libstat.a) LINK_LIBRARIES(libmysqlclient.a) -ADD_DEFINITIONS ("-g -fPIC -fpermissive -std=gnu++11 -DOMN_PLATFORM_UNIX -Wl,--no-undefined -Xlinker -zmuldefs") +ADD_DEFINITIONS ("-g -fPIC -fpermissive -std=gnu++11 -D_GLIBCXX_USE_CXX11_ABI=0 -DOMN_PLATFORM_UNIX -Wl,--no-undefined -Xlinker -zmuldefs") ADD_DEFINITIONS(-Wno-builtin-macro-redefined) ADD_EXECUTABLE (connector ${SRC_LIST}) diff --git a/src/connector/mysql_operation.cc b/src/connector/mysql_operation.cc index 2a523e1..3b34b5f 100644 --- a/src/connector/mysql_operation.cc +++ b/src/connector/mysql_operation.cc @@ -125,8 +125,8 @@ static CMysqlField astField[] = { { "tinyint", 1, 1 }, { "text", 4, 65535 }, { "mediumblob", 5, 16777215 }, { "mediumtext", 4, 16777215 }, - { "longblob", 5, 4294967295U }, - { "longtext", 4, 4294967295U }, + { "longblob", 5, (int)4294967295U }, + { "longtext", 4, (int)4294967295U }, { "enum", 4, 255 }, { "set", 2, 8 } }; @@ -230,8 +230,6 @@ static int get_field_type(const char *szType, int &i_type, return (0); } -static - int ConnectorProcess::create_tab_if_not_exist() { snprintf(table_name, sizeof(table_name), dbConfig->tblFormat, 0); diff --git a/src/core/tree/t_tree.cc b/src/core/tree/t_tree.cc index c0ed3a0..0bfa92b 100644 --- a/src/core/tree/t_tree.cc +++ b/src/core/tree/t_tree.cc @@ -926,9 +926,11 @@ int _TtreeNode::traverse_forward(MallocBase &stMalloc, ItemVisit pfVisit, } for (int i = 0; i < m_ushNItems; i++) { - if ((iRet = pfVisit(stMalloc, m_ahItems[i], pCookie)) != 0) { + ALLOC_HANDLE_T hItem = m_ahItems[i]; + if ((iRet = pfVisit(stMalloc, hItem, pCookie)) != 0) { return (iRet); } + m_ahItems[i] = hItem; } if (m_hRight != INVALID_HANDLE) { @@ -955,9 +957,11 @@ int _TtreeNode::traverse_backward(MallocBase &stMalloc, ItemVisit pfVisit, } } for (int i = m_ushNItems; --i >= 0;) { - if ((iRet = pfVisit(stMalloc, m_ahItems[i], pCookie)) != 0) { + ALLOC_HANDLE_T hItem = m_ahItems[i]; + if ((iRet = pfVisit(stMalloc, hItem, pCookie)) != 0) { return (iRet); } + m_ahItems[i] = hItem; } if (m_hLeft != INVALID_HANDLE) { if ((iRet = ((TtreeNode *)stMalloc.handle_to_ptr(m_hLeft)) @@ -992,9 +996,11 @@ int _TtreeNode::post_order_traverse(MallocBase &stMalloc, ItemVisit pfVisit, } for (int i = m_ushNItems; --i >= 0;) { - if ((iRet = pfVisit(stMalloc, m_ahItems[i], pCookie)) != 0) { + ALLOC_HANDLE_T hItem = m_ahItems[i]; + if ((iRet = pfVisit(stMalloc, hItem, pCookie)) != 0) { return (iRet); } + m_ahItems[i] = hItem; } return (0); @@ -1031,10 +1037,12 @@ int _TtreeNode::traverse_forward(MallocBase &stMalloc, const char *pchKey, iDiff = pfComp(pchKey, pCmpCookie, stMalloc, m_ahItems[i]); if (iDiff <= 0 && iDiff >= 0 - iInclusion) { - if ((iRet = pfVisit(stMalloc, m_ahItems[i], + ALLOC_HANDLE_T hItem = m_ahItems[i]; + if ((iRet = pfVisit(stMalloc, hItem, pCookie)) != 0) { return (iRet); } + m_ahItems[i] = hItem; } else if (iDiff < 0 - iInclusion) { break; } @@ -1090,11 +1098,13 @@ int _TtreeNode::traverse_forward(MallocBase &stMalloc, const char *pchKey, iDiff1 = pfComp(pchKey1, pCmpCookie, stMalloc, m_ahItems[i]); if (iDiff1 >= 0) { + ALLOC_HANDLE_T hItem = m_ahItems[i]; if ((iRet = pfVisit(stMalloc, - m_ahItems[i], + hItem, pCookie)) != 0) { return (iRet); } + m_ahItems[i] = hItem; } } } @@ -1144,10 +1154,12 @@ int _TtreeNode::traverse_forward(MallocBase &stMalloc, const char *pchKey, iDiff = pfComp(pchKey, pCmpCookie, stMalloc, m_ahItems[i]); if (iDiff <= 0) { - if ((iRet = pfVisit(stMalloc, m_ahItems[i], + ALLOC_HANDLE_T hItem = m_ahItems[i]; + if ((iRet = pfVisit(stMalloc, hItem, pCookie)) != 0) { return (iRet); } + m_ahItems[i] = hItem; } } } @@ -1201,11 +1213,13 @@ int _TtreeNode::traverse_backward(MallocBase &stMalloc, const char *pchKey, iDiff1 = pfComp(pchKey1, pCmpCookie, stMalloc, m_ahItems[i]); if (iDiff1 >= 0) { + ALLOC_HANDLE_T hItem = m_ahItems[i]; if ((iRet = pfVisit(stMalloc, - m_ahItems[i], + hItem, pCookie)) != 0) { return (iRet); } + m_ahItems[i] = hItem; } } } @@ -1253,10 +1267,12 @@ int _TtreeNode::traverse_backward(MallocBase &stMalloc, const char *pchKey, iDiff = pfComp(pchKey, pCmpCookie, stMalloc, m_ahItems[i]); if (iDiff >= 0) { - if ((iRet = pfVisit(stMalloc, m_ahItems[i], + ALLOC_HANDLE_T hItem = m_ahItems[i]; + if ((iRet = pfVisit(stMalloc, hItem, pCookie)) != 0) { return (iRet); } + m_ahItems[i] = hItem; } } } @@ -1321,11 +1337,13 @@ int _TtreeNode::post_order_traverse(MallocBase &stMalloc, const char *pchKey, iDiff1 = pfComp(pchKey1, pCmpCookie, stMalloc, m_ahItems[i]); if (iDiff1 >= 0) { + ALLOC_HANDLE_T hItem = m_ahItems[i]; if ((iRet = pfVisit(stMalloc, - m_ahItems[i], + hItem, pCookie)) != 0) { return (iRet); } + m_ahItems[i] = hItem; } } } @@ -1372,10 +1390,12 @@ int _TtreeNode::post_order_traverse_ge(MallocBase &stMalloc, const char *pchKey, iDiff = pfComp(pchKey, pCmpCookie, stMalloc, m_ahItems[i]); if (iDiff <= 0) { - if ((iRet = pfVisit(stMalloc, m_ahItems[i], + ALLOC_HANDLE_T hItem = m_ahItems[i]; + if ((iRet = pfVisit(stMalloc, hItem, pCookie)) != 0) { return (iRet); } + m_ahItems[i] = hItem; } } } @@ -1420,10 +1440,12 @@ int _TtreeNode::post_order_traverse_le(MallocBase &stMalloc, const char *pchKey, iDiff = pfComp(pchKey, pCmpCookie, stMalloc, m_ahItems[i]); if (iDiff >= 0) { - if ((iRet = pfVisit(stMalloc, m_ahItems[i], + ALLOC_HANDLE_T hItem = m_ahItems[i]; + if ((iRet = pfVisit(stMalloc, hItem, pCookie)) != 0) { return (iRet); } + m_ahItems[i] = hItem; } } } diff --git a/src/daemons/CMakeLists.txt b/src/daemons/CMakeLists.txt index 3104b92..8f77622 100644 --- a/src/daemons/CMakeLists.txt +++ b/src/daemons/CMakeLists.txt @@ -2,9 +2,9 @@ INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/src/daemons ${PROJECT_SOURCE_DIR}/src/libs/common ${PROJECT_SOURCE_DIR}/src/libs/stat - ${PROJECT_SOURCE_DIR}/src/core ${PROJECT_SOURCE_DIR}/src/libs/log4cplus/include - ${PROJECT_SOURCE_DIR}/src/libs/yaml-cpp/include) + ${PROJECT_SOURCE_DIR}/src/libs/yaml-cpp/include + ${PROJECT_SOURCE_DIR}/src/core) LINK_DIRECTORIES( ${PROJECT_SOURCE_DIR}/src/libs/log4cplus/libs @@ -24,7 +24,7 @@ LINK_LIBRARIES(libstat.a) LINK_LIBRARIES(pthread) LINK_LIBRARIES(dl) -ADD_DEFINITIONS("-g -fPIC -fpermissive -std=gnu++11") +ADD_DEFINITIONS("-g -fPIC -fpermissive -std=gnu++11 -D_GLIBCXX_USE_CXX11_ABI=0") ADD_DEFINITIONS(-Wno-builtin-macro-redefined) ADD_EXECUTABLE(faultlogger ${SRC_LIST1}) diff --git a/src/daemons/helper.cc b/src/daemons/helper.cc index b8a3a2e..b1e3c04 100644 --- a/src/daemons/helper.cc +++ b/src/daemons/helper.cc @@ -92,7 +92,7 @@ void WatchDogHelper::exec() new Thread(watchdog_object_name_, Thread::ThreadTypeProcess); helperThread->initialize_thread(); char filedir[260] = {0}; - char filepath[260] = {0}; + char filepath[512] = {0}; char fn[260] = {0}; snprintf(fn, sizeof(fn), "/proc/%d/exe", getpid()); int rv = readlink(fn, filedir, sizeof(filedir) - 1); @@ -103,7 +103,7 @@ void WatchDogHelper::exec() rv = str.rfind('/'); strcpy(filedir, str.substr(0, rv).c_str()); } - sprintf(filepath, "%s/%s", filedir, connector_name[type_]); + snprintf(filepath, sizeof(filepath), "%s/%s", filedir, connector_name[type_]); log4cplus_info("connector path:%s", filepath); argv[0] = filepath; execv(argv[0], argv); diff --git a/src/daemons/hwc.cc b/src/daemons/hwc.cc index a90f4c0..1abf3a1 100644 --- a/src/daemons/hwc.cc +++ b/src/daemons/hwc.cc @@ -17,7 +17,7 @@ void WatchDogHWC::exec(void) // ./hwcserver -d ../conf/dtc.yaml argv[0] = watchdog_object_name_; argv[1] = (char*)"-d"; - argv[2] = "../conf/dtc.yaml"; + argv[2] = (char*)"../conf/dtc.yaml"; argv[3] = NULL; execv(argv[0], argv); } diff --git a/src/hwcserver/CMakeLists.txt b/src/hwcserver/CMakeLists.txt index a5db35c..010c52a 100644 --- a/src/hwcserver/CMakeLists.txt +++ b/src/hwcserver/CMakeLists.txt @@ -1,5 +1,4 @@ FILE(GLOB_RECURSE SRC_LIST ./*.cc ../connector/*tion.cc) -message(${SRC_LIST}) include(../utils.cmake) @@ -37,7 +36,6 @@ LINK_LIBRARIES(libsqlparser.a) LINK_LIBRARIES(libyaml-cpp.a) LINK_LIBRARIES(libz64.a) LINK_LIBRARIES(pthread) -LINK_LIBRARIES(nsl) LINK_LIBRARIES(stdc++) LINK_LIBRARIES(dl) LINK_LIBRARIES(z) @@ -48,10 +46,10 @@ LINK_LIBRARIES(libstat.a) LINK_LIBRARIES(libmysqlclient.a) LINK_LIBRARIES(libdtcapi.so) -ADD_DEFINITIONS ("-g -fPIC -fpermissive -std=gnu++11 -DOMN_PLATFORM_UNIX -Wl,--no-undefined -Xlinker -zmuldefs") +ADD_DEFINITIONS ("-g -fPIC -fpermissive -std=gnu++11 -D_GLIBCXX_USE_CXX11_ABI=0 -DOMN_PLATFORM_UNIX -Wl,--no-undefined -Xlinker -zmuldefs") ADD_DEFINITIONS(-Wno-builtin-macro-redefined) ADD_EXECUTABLE(hwcserver ${SRC_LIST}) -TARGET_LINK_LIBRARIES(hwcserver libcore.a libdaemons.a libstat.a libcommon.a liblog4cplus.a libyaml-cpp.a libz64.a libmysqlclient.a libdtcapi.so) +TARGET_LINK_LIBRARIES(hwcserver libcore.a libdaemons.a libstat.a libcommon.a liblog4cplus.a libyaml-cpp.a libz64.a libmysqlclient.a libdtcapi.so) redefine_file_macro(hwcserver) \ No newline at end of file diff --git a/src/libs/common/CMakeLists.txt b/src/libs/common/CMakeLists.txt index cd0bf30..e1ff2cf 100644 --- a/src/libs/common/CMakeLists.txt +++ b/src/libs/common/CMakeLists.txt @@ -6,20 +6,20 @@ INCLUDE_DIRECTORIES ( . ../mysql/include ../libs/hsql/include/ + ../log4cplus/include + ../yaml-cpp/include ../../libs/dep ../../daemons ../stat ../core - ../log4cplus/include/ - ../zlib/include64 - ../yaml-cpp/include/) + ../zlib/include64) LINK_DIRECTORIES ( ${PROJECT_SOURCE_DIR}/src/libs/mysql/libs - ${PROJECT_SOURCE_DIR}/src/libs/zlib/lib/libz64.a ${PROJECT_SOURCE_DIR}/src/libs/log4cplus/libs - ${PROJECT_SOURCE_DIR}/src/libs/hsql/libs ${PROJECT_SOURCE_DIR}/src/libs/yaml-cpp/libs + ${PROJECT_SOURCE_DIR}/src/libs/zlib/lib/libz64.a + ${PROJECT_SOURCE_DIR}/src/libs/hsql/libs ) LINK_LIBRARIES(liblog4cplus.a) @@ -29,7 +29,7 @@ LINK_LIBRARIES(libz64.a) LINK_LIBRARIES(pthread) LINK_LIBRARIES(libmysqlclient.a) -ADD_DEFINITIONS ("-g -fPIC -fpermissive -std=gnu++11") +ADD_DEFINITIONS ("-g -fPIC -fpermissive -std=gnu++11 -D_GLIBCXX_USE_CXX11_ABI=0") ADD_DEFINITIONS(-Wno-builtin-macro-redefined) ADD_LIBRARY (common ${SRC_LIST}) diff --git a/src/libs/common/request/request_base.h b/src/libs/common/request/request_base.h index 6d64e92..d32024b 100644 --- a/src/libs/common/request/request_base.h +++ b/src/libs/common/request/request_base.h @@ -127,7 +127,7 @@ template class ChainJoint : private TimerObject { { if (use_queue) { queue.Push(p); - attach_ready_timer(owner); + attach_ready_timer(reinterpret_cast(owner)); } else { job_ask_procedure(p); } diff --git a/src/libs/common/socket/socket_addr.cc b/src/libs/common/socket/socket_addr.cc index b6103eb..d7729d9 100644 --- a/src/libs/common/socket/socket_addr.cc +++ b/src/libs/common/socket/socket_addr.cc @@ -682,7 +682,7 @@ int SocketAddress::Equal(const struct sockaddr_in6 *addr, int len, int SocketAddress::Equal(const char *path) const { SocketAddress temp; - if (temp.set_address(path, 0) < 0) + if (temp.set_address(path, 0) != NULL) return 0; return Equal(&temp); } @@ -690,14 +690,14 @@ int SocketAddress::Equal(const char *path) const int SocketAddress::Equal(const char *path, int port, int type) const { SocketAddress temp; - if (temp.set_address(path, port, type) < 0) + if (temp.set_address(path, port, type) != NULL) return 0; return Equal(&temp); } int SocketAddress::Equal(const char *path, const char *port) const { SocketAddress temp; - if (temp.set_address(path, port) < 0) + if (temp.set_address(path, port) != NULL) return 0; return Equal(&temp); } @@ -815,7 +815,7 @@ int SocketAddress::Match(const SocketAddress *that) const int SocketAddress::Match(const char *path, int port, int type) const { SocketAddress temp; - if (temp.set_address(path, port, type) < 0) + if (temp.set_address(path, port, type) != NULL) return 0; return Match(&temp); } @@ -823,7 +823,7 @@ int SocketAddress::Match(const char *path, int port, int type) const int SocketAddress::Match(const char *path) const { SocketAddress temp; - if (temp.set_address(path, 0) < 0) + if (temp.set_address(path, 0) != NULL) return 0; return Match(&temp); } @@ -831,7 +831,7 @@ int SocketAddress::Match(const char *path) const int SocketAddress::Match(const char *path, const char *port) const { SocketAddress temp; - if (temp.set_address(path, port) < 0) + if (temp.set_address(path, port) != NULL) return 0; return Match(&temp); } @@ -840,7 +840,7 @@ int SocketAddress::Match(const struct sockaddr_un *addr, int len, int type) const { SocketAddress temp; - if (temp.set_address(addr, len, type) < 0) + if (temp.set_address(addr, len, type) != NULL) return 0; return Match(&temp); } @@ -848,7 +848,7 @@ int SocketAddress::Match(const struct sockaddr_in *addr, int len, int type) const { SocketAddress temp; - if (temp.set_address(addr, len, type) < 0) + if (temp.set_address(addr, len, type) != NULL) return 0; return Match(&temp); } @@ -857,7 +857,7 @@ int SocketAddress::Match(const struct sockaddr_in6 *addr, int len, int type) const { SocketAddress temp; - if (temp.set_address(addr, len, type) < 0) + if (temp.set_address(addr, len, type) != NULL) return 0; return Match(&temp); } diff --git a/src/libs/common/task/task_api.cc b/src/libs/common/task/task_api.cc index dbdbba0..1a591ff 100644 --- a/src/libs/common/task/task_api.cc +++ b/src/libs/common/task/task_api.cc @@ -30,7 +30,7 @@ #include "result.h" #include -inline int DTCFieldSet::Copy(const FieldSetByName &rq) +int DTCFieldSet::Copy(const FieldSetByName &rq) { const int num = rq.num_fields(); for (int n = 0; n < num; n++) { diff --git a/src/libs/common/task/task_base.cc b/src/libs/common/task/task_base.cc index a226fd5..759d96b 100644 --- a/src/libs/common/task/task_base.cc +++ b/src/libs/common/task/task_base.cc @@ -163,7 +163,7 @@ void DtcJob::decode_stream(SimpleReceiver &receiver) return; } -int8_t DtcJob::select_version(char *packetIn, int packetLen) +int8_t DtcJob::select_version(const char *packetIn, int packetLen) { int8_t ver = 0; log4cplus_debug("select version entry."); @@ -205,7 +205,7 @@ int8_t DtcJob::select_version(char *packetIn, int packetLen) return -3; } -void DtcJob::decode_mysql_packet(char *packetIn, int packetLen, int type) +void DtcJob::decode_mysql_packet(const char *packetIn, int packetLen, int type) { if(_client_owner == NULL) { diff --git a/src/libs/common/task/task_base.h b/src/libs/common/task/task_base.h index 04c05c2..344b1aa 100644 --- a/src/libs/common/task/task_base.h +++ b/src/libs/common/task/task_base.h @@ -209,7 +209,7 @@ class DtcJob : public TableReference { int decode_field_set(char *d, int l); private: - int8_t select_version(char *packetIn, int packetLen); + int8_t select_version(const char *packetIn, int packetLen); ClientAgent* _client_owner; public: @@ -359,7 +359,7 @@ class DtcJob : public TableReference { } void set_request_fields(const DTCFieldSet* p_dtc_field_set) { - fieldList = p_dtc_field_set; + fieldList = const_cast(p_dtc_field_set); } const uint64_t request_serial(void) const { @@ -406,7 +406,7 @@ class DtcJob : public TableReference { // type 2: use external packet void decode_packet_v1(char *packetIn, int packetLen, int type); void decode_packet_v2(char *packetIn, int packetLen, int type); - void decode_mysql_packet(char *packetIn, int packetLen, int type); + void decode_mysql_packet(const char *packetIn, int packetLen, int type); int build_field_type_r(int sql_type, char *field_name); int8_t get_pac_version() { return pac_version; } diff --git a/src/libs/common/timer/timer_list.h b/src/libs/common/timer/timer_list.h index fd5eb8b..bed5af2 100644 --- a/src/libs/common/timer/timer_list.h +++ b/src/libs/common/timer/timer_list.h @@ -75,7 +75,7 @@ class TimerUnit { int check_ready(void); }; -class TimerObject : private ListObject { +class TimerObject : public ListObject { private: int64_t objexp; diff --git a/src/libs/stat/CMakeLists.txt b/src/libs/stat/CMakeLists.txt index 0700aa8..74ee54d 100644 --- a/src/libs/stat/CMakeLists.txt +++ b/src/libs/stat/CMakeLists.txt @@ -19,7 +19,7 @@ LINK_LIBRARIES(libyaml-cpp.a) LINK_LIBRARIES(pthread) LINK_LIBRARIES(dl) -ADD_DEFINITIONS("-g -fPIC -fpermissive -std=gnu++11") +ADD_DEFINITIONS("-g -fPIC -fpermissive -std=gnu++11 -D_GLIBCXX_USE_CXX11_ABI=0") ADD_DEFINITIONS(-Wno-builtin-macro-redefined) ADD_LIBRARY(stat ${SRC_LIST1}) diff --git a/src/rule/CMakeLists.txt b/src/rule/CMakeLists.txt index 85ef03a..cd07fcb 100644 --- a/src/rule/CMakeLists.txt +++ b/src/rule/CMakeLists.txt @@ -36,4 +36,5 @@ ADD_LIBRARY(rule SHARED ${SRC_LIST}) #将目标文件与库文件链接 TARGET_LINK_LIBRARIES(rule libsqlparser.so liblog4cplus.a libyaml-cpp.a libmxml.a) TARGET_LINK_LIBRARIES(rule.bin libsqlparser.so liblog4cplus.a libyaml-cpp.a libmxml.a) -redefine_file_macro(conf-gen-utils) \ No newline at end of file +redefine_file_macro(rule) +redefine_file_macro(rule.bin) \ No newline at end of file diff --git a/src/utils.cmake b/src/utils.cmake index f7db8b7..14e5a09 100644 --- a/src/utils.cmake +++ b/src/utils.cmake @@ -1,16 +1,21 @@ # utils.cmake function(redefine_file_macro targetname) - get_target_property(source_files "${targetname}" SOURCES) - foreach(sourcefile ${source_files}) - get_property(defs SOURCE "${sourcefile}" - PROPERTY COMPILE_DEFINITIONS) - get_filename_component(filepath "${sourcefile}" ABSOLUTE) - string(REPLACE ${PROJECT_SOURCE_DIR}/ "" relpath ${filepath}) - list(APPEND defs "__FILE__=\"${relpath}\"") - set_property( - SOURCE "${sourcefile}" - PROPERTY COMPILE_DEFINITIONS ${defs} - ) - endforeach() + # Check if target exists before proceeding + if(TARGET ${targetname}) + get_target_property(source_files "${targetname}" SOURCES) + foreach(sourcefile ${source_files}) + get_property(defs SOURCE "${sourcefile}" + PROPERTY COMPILE_DEFINITIONS) + get_filename_component(filepath "${sourcefile}" ABSOLUTE) + string(REPLACE ${PROJECT_SOURCE_DIR}/ "" relpath ${filepath}) + list(APPEND defs "__FILE__=\"${relpath}\"") + set_property( + SOURCE "${sourcefile}" + PROPERTY COMPILE_DEFINITIONS ${defs} + ) + endforeach() + else() + message(WARNING "Target '${targetname}' does not exist for redefine_file_macro") + endif() endfunction() \ No newline at end of file From 70698b23624f5ccfd5395a63c9e7a6f8e9cefd47 Mon Sep 17 00:00:00 2001 From: kfysck Date: Tue, 26 Aug 2025 03:42:14 +0000 Subject: [PATCH 03/10] feat: fix warnings in common/ --- .gitignore | 3 +- CMakeLists.txt | 2 +- src/libs/common/CMakeLists.txt | 14 ++++- src/libs/common/config/config.cc | 4 +- src/libs/common/connector/connector_client.cc | 4 +- src/libs/common/connector/connector_group.cc | 4 +- src/libs/common/file_backed_key_set.cc | 8 ++- src/libs/common/my/my_request.cc | 60 +++++++++++++------ src/libs/common/packet/packet_server.cc | 24 ++++---- src/libs/common/queue/mtpqueue.h | 3 +- src/libs/common/request/request_base.h | 10 +++- src/libs/common/table/table_def_manager.cc | 19 +++++- src/libs/common/task/task_base.cc | 31 ++++++---- src/libs/stat/stat_alarm_reporter.cc | 4 +- src/libs/stat/stat_manager.cc | 7 ++- src/rule/re_function.cc | 2 + src/rule/re_load.cc | 19 +++++- src/rule/rule.cc | 9 ++- 18 files changed, 163 insertions(+), 64 deletions(-) diff --git a/.gitignore b/.gitignore index e27b5b5..9a5eb7b 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,5 @@ settings.json *.o .dep* -build/ \ No newline at end of file +build/ +.joycode \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 60c8559..adeeb32 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,7 +30,7 @@ if(CMAKE_COMPILER_IS_GNUCXX) endif() # Common flags for all GCC versions - add_compile_options(-fpermissive) + add_compile_options("$<$:-fpermissive>") add_compile_options(-Wno-builtin-macro-redefined) # Use old ABI for compatibility with bundled libraries diff --git a/src/libs/common/CMakeLists.txt b/src/libs/common/CMakeLists.txt index e1ff2cf..0184945 100644 --- a/src/libs/common/CMakeLists.txt +++ b/src/libs/common/CMakeLists.txt @@ -1,4 +1,5 @@ -FILE(GLOB_RECURSE SRC_LIST ./*.cc ./*.c) +FILE(GLOB_RECURSE CXX_SRC_LIST ./*.cc) +FILE(GLOB_RECURSE C_SRC_LIST ./*.c) include(../../utils.cmake) @@ -29,10 +30,17 @@ LINK_LIBRARIES(libz64.a) LINK_LIBRARIES(pthread) LINK_LIBRARIES(libmysqlclient.a) -ADD_DEFINITIONS ("-g -fPIC -fpermissive -std=gnu++11 -D_GLIBCXX_USE_CXX11_ABI=0") +ADD_DEFINITIONS ("-g -fPIC -D_GLIBCXX_USE_CXX11_ABI=0") + +# Apply C++ specific flags only to C++ files +set_source_files_properties( + ${CXX_SRC_LIST} + PROPERTIES + COMPILE_FLAGS "-fpermissive -std=gnu++11" +) ADD_DEFINITIONS(-Wno-builtin-macro-redefined) -ADD_LIBRARY (common ${SRC_LIST}) +ADD_LIBRARY (common ${CXX_SRC_LIST} ${C_SRC_LIST}) TARGET_LINK_LIBRARIES(common liblog4cplus.a libyaml-cpp.a libsqlparser.a libz64.a libmysqlclient.a) redefine_file_macro(common) \ No newline at end of file diff --git a/src/libs/common/config/config.cc b/src/libs/common/config/config.cc index 2927776..afea279 100644 --- a/src/libs/common/config/config.cc +++ b/src/libs/common/config/config.cc @@ -122,7 +122,9 @@ int DTCConfig::load_yaml_file(const char *fn, bool bakconfig) if (bakconfig) { char bak_config[1024]; int err = 0; - system("mkdir -p ../stat/"); + if (system("mkdir -p ../stat/") == -1) { + // Handle mkdir error if needed + } snprintf(bak_config, sizeof(bak_config), "cp %s ../stat/", fn); if (err == 0) diff --git a/src/libs/common/connector/connector_client.cc b/src/libs/common/connector/connector_client.cc index 094038b..ab1f6f6 100644 --- a/src/libs/common/connector/connector_client.cc +++ b/src/libs/common/connector/connector_client.cc @@ -675,11 +675,11 @@ int ConnectorClient::client_notify_helper_check() TableDefinitionManager::instance()->get_cur_table_def()); check_job->Copy(*job); check_job->set_request_code(DRequest::Get); - check_job->set_request_key(job->request_key()); + check_job->set_request_key(const_cast(job->request_key())); check_job->build_packed_key(); check_job->mr.m_sql = job->mr.m_sql; // sql is deep copy - DTCFieldSet* p_dtc_field_set = check_job->request_fields(); + DTCFieldSet* p_dtc_field_set = const_cast(check_job->request_fields()); DELETE(p_dtc_field_set); p_dtc_field_set = new DTCFieldSet( diff --git a/src/libs/common/connector/connector_group.cc b/src/libs/common/connector/connector_group.cc index d345011..e8e0921 100644 --- a/src/libs/common/connector/connector_group.cc +++ b/src/libs/common/connector/connector_group.cc @@ -167,7 +167,7 @@ int ConnectorGroup::WriteHBLog( int i_check) { log4cplus_info("WriteHBLog start"); - std::string s_value = p_job->mr.get_sql(); + std::string s_value = const_cast(p_job)->mr.get_sql(); int start_pos = s_value.find("WITHOUT@@"); if (start_pos != std::string::npos) { log4cplus_info("no need write hb log"); @@ -212,7 +212,7 @@ int ConnectorGroup::WriteHBLog( // local file system ,same endian HwcBinlogCont o_hwc_bin_cont; o_hwc_bin_cont.i_sql_len = s_value.length(); - o_hwc_bin_cont.p_sql = s_value.data(); + o_hwc_bin_cont.p_sql = const_cast(s_value.data()); o_hwc_bin_cont.i_check_flag = i_check; if (i_check) { diff --git a/src/libs/common/file_backed_key_set.cc b/src/libs/common/file_backed_key_set.cc index 34794c1..2a88eda 100644 --- a/src/libs/common/file_backed_key_set.cc +++ b/src/libs/common/file_backed_key_set.cc @@ -106,8 +106,12 @@ int FileBackedKeySet::Open() } //discard all content if any - ftruncate(m_fd, 0); - ftruncate(m_fd, INIT_FILE_SIZE); + if (ftruncate(m_fd, 0) == -1) { + // Handle error - could close fd and return + } + if (ftruncate(m_fd, INIT_FILE_SIZE) == -1) { + // Handle error - could close fd and return + } m_base = (char *)mmap(NULL, INIT_FILE_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, m_fd, 0); diff --git a/src/libs/common/my/my_request.cc b/src/libs/common/my/my_request.cc index 6203cc6..a60de95 100644 --- a/src/libs/common/my/my_request.cc +++ b/src/libs/common/my/my_request.cc @@ -31,7 +31,7 @@ bool MyRequest::do_mysql_protocol_parse() return false; } - int input_packet_length = uint_trans_3(p); + int input_packet_length = uint_trans_3(reinterpret_cast(p)); log4cplus_debug("uint_trans_3:0x%x 0x%x 0x%x, len:%d", p[0], p[1], p[2], input_packet_length); p += 3; @@ -155,7 +155,9 @@ bool MyRequest::get_key(DTCValue *key, char *key_name) int t = m_result.getStatement(0)->type(); if (hsql::StatementType::kStmtInsert == t) { - hsql::InsertStatement *stmt = get_result()->getStatement(0); + hsql::InsertStatement *stmt = + const_cast( + static_cast(get_result()->getStatement(0))); if(stmt->columns == NULL) { int i = 0; @@ -204,15 +206,18 @@ bool MyRequest::get_key(DTCValue *key, char *key_name) } else { if (hsql::StatementType::kStmtUpdate == t) { hsql::UpdateStatement *stmt = - get_result()->getStatement(0); + const_cast( + static_cast(get_result()->getStatement(0))); where = stmt->where; } else if (hsql::StatementType::kStmtSelect == t) { hsql::SelectStatement *stmt = - get_result()->getStatement(0); + const_cast( + static_cast(get_result()->getStatement(0))); where = stmt->whereClause; } else if (hsql::StatementType::kStmtDelete == t) { hsql::DeleteStatement *stmt = - get_result()->getStatement(0); + const_cast( + static_cast(get_result()->getStatement(0))); where = stmt->expr; } @@ -251,7 +256,9 @@ uint32_t MyRequest::get_limit_start() if (t != hsql::StatementType::kStmtSelect) { return 0; } - hsql::SelectStatement *stmt = get_result()->getStatement(0); + hsql::SelectStatement *stmt = + const_cast( + static_cast(get_result()->getStatement(0))); LimitDescription* limit = stmt->limit; if(limit) { @@ -272,17 +279,23 @@ uint32_t MyRequest::get_limit_count() int t = m_result.getStatement(0)->type(); LimitDescription* limit; if (t == hsql::StatementType::kStmtSelect) { - hsql::SelectStatement *stmt = get_result()->getStatement(0); + hsql::SelectStatement *stmt = + const_cast( + static_cast(get_result()->getStatement(0))); limit = stmt->limit; } else if(t == hsql::StatementType::kStmtUpdate) { - hsql::UpdateStatement *stmt = get_result()->getStatement(0); + hsql::UpdateStatement *stmt = + const_cast( + static_cast(get_result()->getStatement(0))); limit = stmt->limit; } else if(t == hsql::StatementType::kStmtDelete) { - hsql::DeleteStatement *stmt = get_result()->getStatement(0); + hsql::DeleteStatement *stmt = + const_cast( + static_cast(get_result()->getStatement(0))); limit = stmt->limit; } else @@ -308,7 +321,9 @@ uint32_t MyRequest::get_need_num_fields() if (t != hsql::StatementType::kStmtSelect) { return 0; } - hsql::SelectStatement *stmt = get_result()->getStatement(0); + hsql::SelectStatement *stmt = + const_cast( + static_cast(get_result()->getStatement(0))); std::vector *selectList = stmt->selectList; log4cplus_debug("select size:%d", selectList->size()); if(selectList->size() == 1 && (*selectList)[0]->type == kExprStar) @@ -321,10 +336,14 @@ uint32_t MyRequest::get_update_num_fields() { int t = m_result.getStatement(0)->type(); if (hsql::StatementType::kStmtUpdate == t) { - hsql::UpdateStatement *stmt = get_result()->getStatement(0); + hsql::UpdateStatement *stmt = + const_cast( + static_cast(get_result()->getStatement(0))); return stmt->updates->size(); } else if (hsql::StatementType::kStmtInsert == t) { - hsql::InsertStatement *stmt = get_result()->getStatement(0); + hsql::InsertStatement *stmt = + const_cast( + static_cast(get_result()->getStatement(0))); return stmt->values->size(); } @@ -340,7 +359,9 @@ std::vector MyRequest::get_need_array() return need; } - hsql::SelectStatement *stmt = get_result()->getStatement(0); + hsql::SelectStatement *stmt = + const_cast( + static_cast(get_result()->getStatement(0))); std::vector *selectList = stmt->selectList; if(selectList->size() == 1 && (*selectList)[0]->type == kExprStar) @@ -369,23 +390,28 @@ char* MyRequest::get_table_name() int t = m_result.getStatement(0)->type(); if (hsql::StatementType::kStmtInsert == t) { - hsql::InsertStatement *stmt = get_result()->getStatement(0); + hsql::InsertStatement *stmt = + const_cast( + static_cast(get_result()->getStatement(0))); if(stmt && stmt->tableName) return stmt->tableName; } else { if (hsql::StatementType::kStmtUpdate == t) { hsql::UpdateStatement *stmt = - get_result()->getStatement(0); + const_cast( + static_cast(get_result()->getStatement(0))); if(stmt && stmt->table) return stmt->table->name; } else if (hsql::StatementType::kStmtSelect == t) { hsql::SelectStatement *stmt = - get_result()->getStatement(0); + const_cast( + static_cast(get_result()->getStatement(0))); if(stmt && stmt->fromTable) return stmt->fromTable->name; } else if (hsql::StatementType::kStmtDelete == t) { hsql::DeleteStatement *stmt = - get_result()->getStatement(0); + const_cast( + static_cast(get_result()->getStatement(0))); if(stmt) return stmt->tableName; } diff --git a/src/libs/common/packet/packet_server.cc b/src/libs/common/packet/packet_server.cc index 2f36198..4becf44 100644 --- a/src/libs/common/packet/packet_server.cc +++ b/src/libs/common/packet/packet_server.cc @@ -649,7 +649,7 @@ void encode_mysql_header(BufferChain *r, int len, uint8_t pkt_num) { //Packet Lenght + Packet Number char t[3]; - int_conv_3(t, len); + int_conv_3(reinterpret_cast(t), len); memcpy(r->data, t, 3); *(r->data + 3) = pkt_num; } @@ -737,11 +737,11 @@ int encode_set_field(char *buf, my_result_set_field *sf) //charset number *p++ = 0x0c; - int2store_big_endian(p, sf->charset_number); + int2store_big_endian(reinterpret_cast(p), sf->charset_number); p += sizeof(sf->charset_number); //length - int4store_big_endian(p, sf->length); + int4store_big_endian(reinterpret_cast(p), sf->length); p += sizeof(sf->length); //type @@ -749,7 +749,7 @@ int encode_set_field(char *buf, my_result_set_field *sf) p += sizeof(sf->type); //flags - int2store_big_endian(p, sf->flags); + int2store_big_endian(reinterpret_cast(p), sf->flags); p += sizeof(sf->flags); //decimals @@ -822,6 +822,8 @@ int build_field_type(int type) return MYSQL_TYPE_VAR_STRING; case DField::Binary: return MYSQL_TYPE_VAR_STRING; + default: + return MYSQL_TYPE_VAR_STRING; // default case } } @@ -1003,7 +1005,7 @@ BufferChain *encode_row_data(DtcJob *job, BufferChain *bc, uint8_t &pkt_nr) int id = tdef->field_id(result_field[j].c_str()); DTCValue* v; if (0 == id) { - v = job->request_key(); + v = const_cast(job->request_key()); } else { v = pstRow->field_value(id); } @@ -1061,7 +1063,7 @@ BufferChain *encode_row_data(DtcJob *job, BufferChain *bc, uint8_t &pkt_nr) int id = tdef->field_id(result_field[j].c_str()); DTCValue* v; if (0 == id) { - v = job->request_key(); + v = const_cast(job->request_key()); } else { v = pstRow->field_value(id); } @@ -1142,7 +1144,7 @@ BufferChain *Packet::encode_mysql_error(DtcJob *job, std::string errmsg, int mye bc = (BufferChain *)MALLOC(packet_len); BufferChain *r = bc; if (r == NULL) { - return -ENOMEM; + return NULL; } r->totalBytes = packet_len - sizeof(BufferChain); encode_mysql_header(r, sizeof(buf) + errmsg.length(), pkt_nr); @@ -1173,7 +1175,7 @@ BufferChain *Packet::encode_mysql_ok(DtcJob *job, int affected_rows) bc = (BufferChain *)MALLOC(packet_len); BufferChain *r = bc; if (r == NULL) { - return -ENOMEM; + return NULL; } r->totalBytes = packet_len - sizeof(BufferChain); encode_mysql_header(r, sizeof(buf), pkt_nr); @@ -1223,6 +1225,8 @@ int net_send_ok(int affectedRow) { uint8_t buf[100] = { 0x00, (uint8_t)affectedRow, 0x00, 0x02, 0x00, 0x00, 0x00 }; + // TODO: Implement actual network send logic + return 0; // Success } int is_desc_tables(DtcJob *job , char*& p_filepath) @@ -1237,7 +1241,7 @@ int is_desc_tables(DtcJob *job , char*& p_filepath) uint32_t ui_size = (sizeof(meta_selections) / sizeof(MetaSelections)); for (int i = 0; i < ui_size; i++) { if (sql == string(meta_selections[i].p_req_string)) { - p_filepath = meta_selections[i].p_val; + p_filepath = const_cast(meta_selections[i].p_val); return meta_selections[i].i_select_type; } } @@ -1552,7 +1556,7 @@ int Packet::encode_result_v2(DtcJob &job, int mtu, uint32_t ts) memcpy(p, &dtc_header, sizeof(dtc_header)); p += sizeof(dtc_header); if (p - (char *)v->iov_base != sizeof(dtc_header)) - fprintf(stderr, "%s(%d): BAD ENCODER len=%ld must=%d\n", + fprintf(stderr, "%s(%d): BAD ENCODER len=%ld must=%zu\n", __FILE__, __LINE__, (long)(p - (char *)v->iov_base), sizeof(dtc_header)); diff --git a/src/libs/common/queue/mtpqueue.h b/src/libs/common/queue/mtpqueue.h index 5ab0f83..2fb89e9 100644 --- a/src/libs/common/queue/mtpqueue.h +++ b/src/libs/common/queue/mtpqueue.h @@ -45,7 +45,8 @@ template class ThreadingPipeQueue : EpollBase { inline void Wake() { char c = 0; - write(wakefd, &c, 1); + ssize_t result = write(wakefd, &c, 1); + (void)result; // Silence unused result warning } inline void Discard() { diff --git a/src/libs/common/request/request_base.h b/src/libs/common/request/request_base.h index d32024b..4e3c271 100644 --- a/src/libs/common/request/request_base.h +++ b/src/libs/common/request/request_base.h @@ -160,9 +160,13 @@ template class TaskReplyList { } inline void copy_reply_path(TaskReplyList *org) { - memcpy(proc, org->proc, - sizeof(JobAnswerInterface *) * max_count); - count = org->count; + if (org && org->proc) { + // Copy only the minimum between source and destination sizes + int copy_count = (10 < max_count) ? 10 : max_count; + memcpy(proc, org->proc, + sizeof(JobAnswerInterface *) * copy_count); + } + count = org ? org->count : 0; } inline int Push(JobAnswerInterface *p) { diff --git a/src/libs/common/table/table_def_manager.cc b/src/libs/common/table/table_def_manager.cc index e578170..94e8610 100644 --- a/src/libs/common/table/table_def_manager.cc +++ b/src/libs/common/table/table_def_manager.cc @@ -159,11 +159,28 @@ DTCTableDefinition *TableDefinitionManager::load_table(const char *file) lseek(fd, 0L, SEEK_SET); len = lseek(fd, 0L, SEEK_END); lseek(fd, 0L, SEEK_SET); + + // Check for valid file size + if (len <= 0 || len > 10*1024*1024) { // Max 10MB file size + close(fd); + return ret; + } + _buf = (char *)MALLOC(len + 1); buf = (char *)MALLOC(len + 1); + if (!_buf || !buf) { + close(fd); + FREE_IF(_buf); + FREE_IF(buf); + return ret; + } readlen = read(fd, _buf, len); - if (readlen < 0 || readlen == 0) + if (readlen < 0 || readlen == 0) { + close(fd); + FREE_IF(_buf); + FREE_IF(buf); return ret; + } _buf[len] = '\0'; close(fd); // should copy one, as load_buffered_table will modify buf diff --git a/src/libs/common/task/task_base.cc b/src/libs/common/task/task_base.cc index 759d96b..6d3d75d 100644 --- a/src/libs/common/task/task_base.cc +++ b/src/libs/common/task/task_base.cc @@ -213,7 +213,7 @@ void DtcJob::decode_mysql_packet(const char *packetIn, int packetLen, int type) return ; } - char* p = packetIn; + char* p = const_cast(packetIn); p += 3; this->mr.pkt_nr = (uint8_t)(*p); // mysql sequence id log4cplus_debug("pkt_nr:%d", this->mr.pkt_nr); @@ -234,14 +234,14 @@ void DtcJob::decode_mysql_packet(const char *packetIn, int packetLen, int type) return; } - enum enum_server_command cmd = (enum enum_server_command)(uchar)(packetIn+sizeof(MYSQL_HEADER_SIZE)); + enum enum_server_command cmd = (enum enum_server_command)*(reinterpret_cast(packetIn+sizeof(MYSQL_HEADER_SIZE))); if (cmd == COM_PING) { log4cplus_debug("cmd PING."); return; } - mr.set_packet_info(packetIn, packetLen); + mr.set_packet_info(const_cast(packetIn), packetLen); struct timeval tv1, tv2; gettimeofday(&tv1, NULL); @@ -609,7 +609,9 @@ int get_compare_symbol(uint8_t opType) else if(opType == kOpGreater) return DField::GT; else if(opType == kOpGreaterEq) - return DField::GE; + return DField::GE; + else + return DField::EQ; // default case } int DtcJob::decode_request_v2(MyRequest *mr) @@ -627,7 +629,7 @@ int DtcJob::decode_request_v2(MyRequest *mr) //2.requestInfo static DTCValue key; - if (mr->get_key(&key, table_definition()->key_name())) { + if (mr->get_key(&key, const_cast(table_definition()->key_name()))) { requestInfo.set_key(key); set_request_key(&key); } @@ -681,11 +683,13 @@ int DtcJob::decode_request_v2(MyRequest *mr) if (type != hsql::StatementType::kStmtInsert) { if (type == hsql::StatementType::kStmtUpdate) { hsql::UpdateStatement *stmt = - mr->get_result()->getStatement(0); + const_cast( + static_cast(mr->get_result()->getStatement(0))); where = stmt->where; } else if (type == hsql::StatementType::kStmtDelete) { hsql::DeleteStatement *stmt = - mr->get_result()->getStatement(0); + const_cast( + static_cast(mr->get_result()->getStatement(0))); where = stmt->expr; if (stmt->schema != NULL) { @@ -696,7 +700,8 @@ int DtcJob::decode_request_v2(MyRequest *mr) } } else if (type == hsql::StatementType::kStmtSelect) { hsql::SelectStatement *stmt = - mr->get_result()->getStatement(0); + const_cast( + static_cast(mr->get_result()->getStatement(0))); where = stmt->whereClause; } else { log4cplus_error("StatementType error: %d", type); @@ -732,7 +737,7 @@ int DtcJob::decode_request_v2(MyRequest *mr) exprList.at(i) ->expr2 ->type /*DField::Unsigned*/, - exprList.at(i)->expr->getName()); + const_cast(exprList.at(i)->expr->getName())); if (rtype == -1) { temp--; continue; @@ -786,7 +791,8 @@ int DtcJob::decode_request_v2(MyRequest *mr) int t = mr->get_result()->getStatement(0)->type(); if (hsql::StatementType::kStmtUpdate == t) { hsql::UpdateStatement *stmt = - mr->get_result()->getStatement(0); + const_cast( + static_cast(mr->get_result()->getStatement(0))); if (stmt->table->schema != NULL) { mr->m_sql.replace(stmt->table->st_start_idx , @@ -833,7 +839,8 @@ int DtcJob::decode_request_v2(MyRequest *mr) } else if (hsql::StatementType::kStmtInsert == t) { hsql::InsertStatement *stmt = - mr->get_result()->getStatement(0); + const_cast( + static_cast(mr->get_result()->getStatement(0))); if (stmt->schema != NULL) { mr->m_sql.replace(stmt->st_start_idx , stmt->st_end_idx - stmt->st_start_idx, @@ -850,7 +857,7 @@ int DtcJob::decode_request_v2(MyRequest *mr) } count = stmt->values->size(); for (int i = 0; i < count; i++) { - char* field_name = table_definition()->field_name(i); + char* field_name = const_cast(table_definition()->field_name(i)); int rtype = build_field_type_r( stmt->values->at(i)->type, field_name); diff --git a/src/libs/stat/stat_alarm_reporter.cc b/src/libs/stat/stat_alarm_reporter.cc index 07fdf3b..7c0d88b 100644 --- a/src/libs/stat/stat_alarm_reporter.cc +++ b/src/libs/stat/stat_alarm_reporter.cc @@ -60,7 +60,9 @@ bool StatAlarmReporter::set_stat_client(StatClient *stat_client) void StatAlarmReporter::init_module_id() { char buf[1024]; - getcwd(buf, sizeof(buf)); + if (getcwd(buf, sizeof(buf)) == NULL) { + buf[0] = '\0'; // fallback if getcwd fails + } ddw_module_id_ = parse_module_id(std::string(buf)); } diff --git a/src/libs/stat/stat_manager.cc b/src/libs/stat/stat_manager.cc index 5c854b3..6668475 100644 --- a/src/libs/stat/stat_manager.cc +++ b/src/libs/stat/stat_manager.cc @@ -420,8 +420,11 @@ void *StatManager::get_map_file_info(const char *file_path, int size) int fd = open(file_path, O_RDWR | O_CREAT, 0666); void *map = NULL; if (fd >= 0) { - if (size > 0) - ftruncate(fd, size); + if (size > 0) { + if (ftruncate(fd, size) == -1) { + // Handle error - could log or close fd + } + } else size = lseek(fd, 0L, SEEK_END); diff --git a/src/rule/re_function.cc b/src/rule/re_function.cc index 3664f55..960430c 100644 --- a/src/rule/re_function.cc +++ b/src/rule/re_function.cc @@ -12,6 +12,8 @@ time_t convert_time_interval(time_t val, int type) return val * 60 * 60; else if(type == kDatetimeDay) return val * 60 * 60 * 24; + else + return val; // default case } std::string fun_date_sub(std::vector* elist) diff --git a/src/rule/re_load.cc b/src/rule/re_load.cc index c38a670..5f2a8a1 100644 --- a/src/rule/re_load.cc +++ b/src/rule/re_load.cc @@ -83,6 +83,7 @@ int traverse_sub_ast(hsql::Expr* where, vector* v_expr) log4cplus_debug("type: %d, %d, %s", where->type, where->opType, where->expr->name); v_expr->push_back(where); } + return 0; } int traverse_ast(hsql::Expr* where, vector >* expr_rules) @@ -156,16 +157,30 @@ std::string load_dtc_yaml_buffer(int mid) lseek(fd, 0L, SEEK_SET); i_length = lseek(fd, 0L, SEEK_END); lseek(fd, 0L, SEEK_SET); + + // Check for valid file size + if (i_length <= 0 || i_length > 1024*1024) { // Max 1MB file size + close(fd); + return ""; + } + // Attention: memory init here ,need release outside file = (char *)malloc(i_length + 1); + if (!file) { + close(fd); + return ""; + } int readlen = read(fd, file, i_length); - if (readlen < 0 || readlen == 0) + if (readlen < 0 || readlen == 0) { + close(fd); + free(file); return ""; + } file[i_length] = '\0'; close(fd); i_length++; // add finish flag length std::string res = file; - delete file; + free(file); // Use free() since we used malloc() return res; } diff --git a/src/rule/rule.cc b/src/rule/rule.cc index 048aff0..c97779a 100644 --- a/src/rule/rule.cc +++ b/src/rule/rule.cc @@ -67,7 +67,7 @@ extern "C" int get_statement_value(char* str, int len, const char* strkey, int* switch (stmt->values->at(i)->type) { case hsql::ExprType::kExprLiteralInt: - sprintf(sztmp, "%d", stmt->values->at(i)->ival); + sprintf(sztmp, "%ld", stmt->values->at(i)->ival); strsql = str; pos = strsql.find(sztmp); if(pos != string::npos) @@ -116,7 +116,7 @@ extern "C" int get_statement_value(char* str, int len, const char* strkey, int* char sztmp[100] = {0}; switch (stmt->values->at(i)->type) { case hsql::ExprType::kExprLiteralInt: - sprintf(sztmp, "%d", stmt->values->at(i)->ival); + sprintf(sztmp, "%ld", stmt->values->at(i)->ival); strsql = str; pos = strsql.find(sztmp); if(pos != string::npos) @@ -159,6 +159,9 @@ extern "C" int get_statement_value(char* str, int len, const char* strkey, int* } else return -1; + + // Should never reach here, but just in case + return -1; } std::string get_table_with_db(const char* sessiondb, const char* sql) @@ -599,7 +602,7 @@ extern "C" int rule_sql_match(const char* szsql, const char* osql, const char* d log4cplus_debug("name: %s, type: %d", stmt->columns->at(i), stmt->values->at(i)->type); if(stmt->values->at(i)->type == hsql::ExprType::kExprLiteralInt) { - sprintf(sztmp, "%lld", stmt->values->at(i)->ival); + sprintf(sztmp, "%ld", stmt->values->at(i)->ival); tempsql += sztmp; } else if(stmt->values->at(i)->type == hsql::ExprType::kExprLiteralFloat) From 686c2fab51994fe4f629d733faf21452bc7e6f30 Mon Sep 17 00:00:00 2001 From: kfysck Date: Tue, 26 Aug 2025 04:00:32 +0000 Subject: [PATCH 04/10] fix: agent-watchdog warnings. --- src/agent-watchdog/CMakeLists.txt | 13 ++++++++----- src/agent-watchdog/daemons.cc | 3 ++- src/agent-watchdog/main.cc | 4 ++-- src/agent-watchdog/sharding_entry.cc | 4 ++-- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/agent-watchdog/CMakeLists.txt b/src/agent-watchdog/CMakeLists.txt index dd8f0c4..0f5b271 100644 --- a/src/agent-watchdog/CMakeLists.txt +++ b/src/agent-watchdog/CMakeLists.txt @@ -16,8 +16,8 @@ LINK_DIRECTORIES( include(../utils.cmake) -FILE(GLOB_RECURSE SRC_LIST1 ./*.cc ./*.c) - +FILE(GLOB_RECURSE CXX_SRC_LIST ./*.cc) +FILE(GLOB_RECURSE C_SRC_LIST ./*.c) LINK_LIBRARIES(liblog4cplus.a) LINK_LIBRARIES(libcommon.a) @@ -26,10 +26,13 @@ LINK_LIBRARIES(libstat.a) LINK_LIBRARIES(pthread) LINK_LIBRARIES(dl) -ADD_DEFINITIONS("-g -fPIC -fpermissive -std=gnu++11 -D_GLIBCXX_USE_CXX11_ABI=0") -ADD_DEFINITIONS(-Wno-builtin-macro-redefined) +# Set properties for C++ files +set_source_files_properties(${CXX_SRC_LIST} PROPERTIES COMPILE_FLAGS "-g -fPIC -fpermissive -std=gnu++11 -D_GLIBCXX_USE_CXX11_ABI=0 -Wno-builtin-macro-redefined") + +# Set properties for C files +set_source_files_properties(${C_SRC_LIST} PROPERTIES COMPILE_FLAGS "-g -fPIC -Wno-builtin-macro-redefined") -ADD_EXECUTABLE(agent-watchdog ${SRC_LIST1}) +ADD_EXECUTABLE(agent-watchdog ${CXX_SRC_LIST} ${C_SRC_LIST}) TARGET_LINK_LIBRARIES(agent-watchdog libstat.a libcommon.a libyaml-cpp.a liblog4cplus.a mxml) redefine_file_macro(agent-watchdog) \ No newline at end of file diff --git a/src/agent-watchdog/daemons.cc b/src/agent-watchdog/daemons.cc index 75e8fd8..869b93c 100644 --- a/src/agent-watchdog/daemons.cc +++ b/src/agent-watchdog/daemons.cc @@ -88,7 +88,8 @@ void close_sharding() p[0] = NULL; execv("../sharding/bin/stop.sh", p); - system("../sharding/bin/stop.sh"); + int result = system("../sharding/bin/stop.sh"); + (void)result; // Silence unused result warning } void WatchDog::run_loop() diff --git a/src/agent-watchdog/main.cc b/src/agent-watchdog/main.cc index 6ff02d9..519b941 100644 --- a/src/agent-watchdog/main.cc +++ b/src/agent-watchdog/main.cc @@ -26,7 +26,7 @@ std::map map_dtc_conf; //key:value --> dtc addr:conf f #define DA_STRING(x) DA_STRING_HELPER(x) #define DA_VERSION_STR \ - DA_STRING(DA_VERSION_MAJOR)"."DA_STRING(DA_VERSION_MINOR)"."\ + DA_STRING(DA_VERSION_MAJOR) "." DA_STRING(DA_VERSION_MINOR) "." \ DA_STRING(DA_VERSION_BUILD) static int show_help; @@ -368,7 +368,7 @@ int get_all_dtc_confs() int content_len = 0; log4cplus_debug("addr:%s", addr.c_str()); std::string str = send_select_dtcyaml((addr.substr(0, addr.find(':'))).c_str(), atoi((addr.substr(addr.find(':')+1)).c_str())); - content = str.c_str(); + content = const_cast(str.c_str()); content_len = str.length(); log4cplus_debug("content:%s", content); diff --git a/src/agent-watchdog/sharding_entry.cc b/src/agent-watchdog/sharding_entry.cc index 4e05955..8f01018 100644 --- a/src/agent-watchdog/sharding_entry.cc +++ b/src/agent-watchdog/sharding_entry.cc @@ -39,8 +39,8 @@ void ShardingEntry::exec() { set_proc_title("agent_sharding"); argv[0] = (char *)"../sharding/bin/start.sh"; - argv[1] = "3307"; - argv[2] = "../conf"; + argv[1] = const_cast("3307"); + argv[2] = const_cast("../conf"); argv[3] = NULL; execv(argv[0], argv); } From 7ad299577475f5d63fd0c6bb487fc8064257fd4f Mon Sep 17 00:00:00 2001 From: kfysck Date: Tue, 26 Aug 2025 06:10:10 +0000 Subject: [PATCH 05/10] fix: dtcagent warnings. --- src/agent/common/da_string.c | 4 ++-- src/agent/da_conn.c | 1 + src/agent/da_listener.c | 1 + src/agent/da_msg.c | 5 +++-- src/agent/da_request.c | 12 +++++++----- src/agent/da_response.c | 2 +- src/agent/da_server.c | 4 ++-- src/agent/my/my_net_send.c | 1 + src/agent/my/my_net_send.h | 5 +++-- src/agent/my/my_parse.c | 22 ++++++++++++++-------- src/agent/my/my_parse.h | 14 +++++++++++++- src/agent/my/my_protocol_classic.c | 1 + 12 files changed, 49 insertions(+), 23 deletions(-) diff --git a/src/agent/common/da_string.c b/src/agent/common/da_string.c index 04eab5b..fe2c4a9 100644 --- a/src/agent/common/da_string.c +++ b/src/agent/common/da_string.c @@ -130,8 +130,8 @@ int string_compare_nonsentive(const struct string *s1, const struct string *s2) return s1->len > s2->len ? 1 : -1; } - string_copy(&tmp1, s1, s1->len); - string_copy(&tmp2, s2, s2->len); + string_copy(&tmp1, s1->data, s1->len); + string_copy(&tmp2, s2->data, s2->len); string_upper(&tmp1); string_upper(&tmp2); return da_strncmp(&tmp1.data, &tmp2.data, &tmp1.len); diff --git a/src/agent/da_conn.c b/src/agent/da_conn.c index d975d78..5824ab8 100644 --- a/src/agent/da_conn.c +++ b/src/agent/da_conn.c @@ -14,6 +14,7 @@ * limitations under the License. */ #include +#include #include "da_mem_pool.h" #include "da_conn.h" #include "da_listener.h" diff --git a/src/agent/da_listener.c b/src/agent/da_listener.c index 7214e5a..ed6b83d 100644 --- a/src/agent/da_listener.c +++ b/src/agent/da_listener.c @@ -22,6 +22,7 @@ #include "da_core.h" #include "da_event.h" #include "da_stats.h" +#include "my/my_net_send.h" #include "da_msg.h" void listener_ref(struct conn *l, void *owner) diff --git a/src/agent/da_msg.c b/src/agent/da_msg.c index 849fc3f..3799a31 100644 --- a/src/agent/da_msg.c +++ b/src/agent/da_msg.c @@ -22,6 +22,7 @@ #include "da_server.h" #include "da_time.h" #include "da_protocal.h" +#include "da_request.h" #include "my/my_parse.h" #include "my/my_comm.h" #include "da_core.h" @@ -426,7 +427,7 @@ static int msg_recv_chain(struct context *ctx, struct conn *conn, ASSERT((mbuf->last + n) <= mbuf->end); mbuf->last += n; msg->mlen += (uint32_t) n; - log_debug("mbuf recv %d bytes data actually.(%p %p %p)", mbuf->last - mbuf->pos, mbuf->last, mbuf->pos, msg->pos); + log_debug("mbuf recv %ld bytes data actually.(%p %p %p)", mbuf->last - mbuf->pos, mbuf->last, mbuf->pos, msg->pos); for (;;) { status = msg_parse(ctx, conn, msg); if (status != 0) { @@ -587,7 +588,7 @@ static int msg_send_chain(struct context *ctx, struct conn *conn, } mlen = mbuf_length(mbuf); - log_debug("mbuf len, len:%d, msg len:%d; %p %p", mlen, msg->mlen, mbuf->last, mbuf->pos); + log_debug("mbuf len, len:%zu, msg len:%d; %p %p", mlen, msg->mlen, mbuf->last, mbuf->pos); if ((nsend + mlen) > limit) { mlen = limit - nsend; } diff --git a/src/agent/da_request.c b/src/agent/da_request.c index da905a6..8604ead 100644 --- a/src/agent/da_request.c +++ b/src/agent/da_request.c @@ -27,6 +27,8 @@ #include "da_errno.h" #include "da_stats.h" #include "da_time.h" +#include "my/my_net_send.h" +#include "my/my_parse.h" #include "my/my_comm.h" #define LAYER3_DEF "layer3" @@ -343,7 +345,7 @@ int dtc_header_add(struct msg *msg, enum enum_agent_admin admin, char* dbname) dtc_header.packet_len = mbuf_length(mbuf) + sizeof(dtc_header) + dtc_header.dbname_len; dtc_header.layer = msg->layer; - mbuf_copy(new_buf, &dtc_header, sizeof(dtc_header)); + mbuf_copy(new_buf, (uint8_t*)&dtc_header, sizeof(dtc_header)); if(dbname && strlen(dbname) > 0) mbuf_copy(new_buf, dbname, dtc_header.dbname_len); @@ -356,7 +358,7 @@ int dtc_header_add(struct msg *msg, enum enum_agent_admin admin, char* dbname) mbuf_insert(&msg->buf_q, new_buf); msg->mlen = mbuf_length(new_buf); - log_debug("msg->mlen:%d sizeof(dtc_header):%d mbuf_length(mbuf):%d", + log_debug("msg->mlen:%d sizeof(dtc_header):%zu mbuf_length(mbuf):%d", msg->mlen, sizeof(dtc_header), mbuf_length(mbuf)); return 0; @@ -411,13 +413,13 @@ void req_process(struct context *ctx, struct conn *c_conn, struct msg *msg) case NEXT_FORWARD: dtc_header_add(msg, CMD_NOP, c_conn->dbname); log_debug( - "FORWARD. msg len: %d, msg id: %d", + "FORWARD. msg len: %d, msg id: %lu", msg->mlen, msg->id); req_forward(ctx, c_conn, msg); break; case NEXT_RSP_OK: log_debug( - "RSP OK. msg len: %d, msg id: %d", + "RSP OK. msg len: %d, msg id: %lu", msg->mlen, msg->id); if (net_send_ok(msg, c_conn) < 0) /* default resp login success. */ @@ -426,7 +428,7 @@ void req_process(struct context *ctx, struct conn *c_conn, struct msg *msg) break; case NEXT_RSP_ERROR: log_debug( - "RSP ERROR. msg len: %d, msg id: %d", + "RSP ERROR. msg len: %d, msg id: %lu", msg->mlen, msg->id); if (net_send_error(msg, c_conn) < 0) /* default resp login success. */ diff --git a/src/agent/da_response.c b/src/agent/da_response.c index f67a9bf..4f7ddd8 100644 --- a/src/agent/da_response.c +++ b/src/agent/da_response.c @@ -186,7 +186,7 @@ void rsp_recv_done(struct context *ctx, struct conn *conn, struct msg *msg, struct rbnode tnode; tnode.key = msg->peerid; //peer msg_id for search,get from package - log_debug("rbtree node key: %"PRIu64", id:%d, peerid:%d, tree:%p %d %d",tnode.key, msg->id, msg->peerid, &conn->msg_tree, conn->msg_tree.root->key, conn->msg_tree.sentinel->key); + log_debug("rbtree node key: %"PRIu64", id:%lu, peerid:%lu, tree:%p %"PRIu64" %"PRIu64"",tnode.key, msg->id, msg->peerid, &conn->msg_tree, conn->msg_tree.root->key, conn->msg_tree.sentinel->key); tarnode = rbtree_search(&conn->msg_tree, &tnode); if (tarnode == NULL) { //node has been deleted by timeout log_debug("rsp msg id: %"PRIu64" peerid :%"PRIu64" search peer msg error,msg is not in the tree", diff --git a/src/agent/da_server.c b/src/agent/da_server.c index 434988d..a8dd542 100644 --- a/src/agent/da_server.c +++ b/src/agent/da_server.c @@ -281,7 +281,7 @@ struct cache_instance *get_instance_from_array(struct array replica_array, uint1 t = 1; t = t << ci->failure_num; t = t * 1000; - printf("i :%.*s now_ms%"PRIu64" failtime%"PRIu64" t%"PRIu64" \n", ci->pname.len, ci->pname.data, now_ms, ci->last_failure_ms, t); + printf("i :%.*s now_ms%"PRIu64" failtime%"PRIu64" t%d \n", ci->pname.len, ci->pname.data, now_ms, ci->last_failure_ms, t); if ((now_ms - ci->last_failure_ms) > t) { (*cnt) = 0; (*array_idx) = idx + 1; @@ -569,7 +569,7 @@ void instance_deinit(struct array *instance) { for (i = 0, nserver = array_n(instance); i < nserver; i++) { struct cache_instance *ci; ci = array_pop(instance); - printf("ip : %.*s, num : %d, fail_time : %d\n", ci->pname.len, ci->pname.data, ci->num, ci->last_failure_ms); + printf("ip : %.*s, num : %d, fail_time : %"PRIu64"\n", ci->pname.len, ci->pname.data, ci->num, ci->last_failure_ms); string_deinit(&ci->pname); ASSERT(TAILQ_EMPTY(&ci->s_conn_q) && ci->ns_conn_q == 0); } diff --git a/src/agent/my/my_net_send.c b/src/agent/my/my_net_send.c index 980eb7c..5348bfd 100644 --- a/src/agent/my/my_net_send.c +++ b/src/agent/my/my_net_send.c @@ -22,6 +22,7 @@ #include "../da_request.h" #include "../da_buf.h" #include "../da_util.h" +#include "my_net_write.h" #include "../da_errno.h" #include "../da_time.h" #include "../da_core.h" diff --git a/src/agent/my/my_net_send.h b/src/agent/my/my_net_send.h index e5f1fe6..1aedf3f 100644 --- a/src/agent/my/my_net_send.h +++ b/src/agent/my/my_net_send.h @@ -29,8 +29,9 @@ MYSQL Protocol Definition, See more detail: */ int net_send_ok(struct msg *smsg, struct conn *c_conn); -int net_send_error(struct msg *smsg, struct msg *dmsg); -int net_send_server_greeting(struct msg *smsg, struct msg *dmsg); +int net_send_error(struct msg *smsg, struct conn *c_conn); +int net_send_switch(struct msg *smsg, struct conn *c_conn); +int net_send_server_greeting(struct conn* c, struct msg *smsg); struct msg *net_send_desc_dtctable(struct conn *c_conn); diff --git a/src/agent/my/my_parse.c b/src/agent/my/my_parse.c index c6afc42..7b4aec8 100644 --- a/src/agent/my/my_parse.c +++ b/src/agent/my/my_parse.c @@ -28,6 +28,12 @@ #include "../da_core.h" #include "my_comm.h" #include "my_command.h" +#include "my_parse.h" +#include "my_protocol_classic.h" + +// Forward declaration for functions used before defined +int my_get_command(uint8_t *input_raw_packet, uint32_t input_packet_length, + struct msg *r, enum enum_server_command *cmd); #define MYSQL_HEADER_SIZE 4 #define MAXPACKETSIZE (64 << 20) @@ -83,7 +89,7 @@ void my_parse_req(struct msg *r) if (p < b->last) { if (b->last - p < MYSQL_HEADER_SIZE) { log_error( - "receive size small than package header. id:%d", + "receive size small than package header. id:%lu", r->id); p = b->last; goto end; @@ -238,7 +244,7 @@ void my_parse_rsp(struct msg *r) if(b->last - b->start < sizeof(struct DTC_HEADER_V2) + MYSQL_HEADER_SIZE) { log_error( - "receive size small than package header. id:%d", + "receive size small than package header. id:%lu", r->id); p = b->last; goto error; @@ -265,7 +271,7 @@ void my_parse_rsp(struct msg *r) r->ismysql = 1; } - log_debug("pkt_nr:%d, peerid:%d, id:%d, admin:%d, packet_len:%d, db_len:%d", r->pkt_nr, + log_debug("pkt_nr:%d, peerid:%lu, id:%lu, admin:%d, packet_len:%d, db_len:%d", r->pkt_nr, r->peerid, r->id, r->admin, packet_len, db_len); } @@ -483,7 +489,7 @@ int my_fragment(struct msg *r, uint32_t ncontinuum, struct msg_tqh *frag_msgq) int status, i; struct keypos *temp_kpos; CValue val; - log_debug("key count:%d, cmd:%d", r->keyCount, r->cmd); + log_debug("key count:%lu, cmd:%d", r->keyCount, r->cmd); if (r->cmd == MSG_NOP || r->admin != CMD_NOP) { uint64_t randomkey = randomHashSeed++; @@ -516,7 +522,7 @@ int my_fragment(struct msg *r, uint32_t ncontinuum, struct msg_tqh *frag_msgq) log_error("decode value:%d", status); return -1; } - log_debug("val.u64:%d", val.u64); + log_debug("val.u64:%lu", val.u64); r->idx = msg_backend_idx(r, (uint8_t *)&val.u64, sizeof(uint64_t)); log_debug("r->idx:%d", r->idx); @@ -653,14 +659,14 @@ int my_get_route_key(uint8_t *sql, int sql_len, int *start_offset, log_debug("sql: %s", str.data); if(dbsession && strlen(dbsession)) { - log_debug("dbsession len:%d, dbsession: %s", strlen(dbsession), dbsession); + log_debug("dbsession len:%zu, dbsession: %s", strlen(dbsession), dbsession); } char strkey[1024] = {0}; memset(strkey, 0, 1024); //agent sql route, rule engine - layer = rule_sql_match(str.data, ostr.data, dbsession, &strkey, &r->keytype); + layer = rule_sql_match(str.data, ostr.data, dbsession, strkey, (int*)&r->keytype); log_debug("rule layer: %d", layer); if(layer != 1) @@ -692,7 +698,7 @@ int my_get_route_key(uint8_t *sql, int sql_len, int *start_offset, for (; i < str.len; i++) { if (str.len - i >= strlen(strkey)) { log_debug( - "key: %s, key len:%d, str.len:%d i:%d dtc_key_len:%d str.data + i:%s ", strkey, strlen(strkey), + "key: %s, key len:%zu, str.len:%d i:%d dtc_key_len:%zu str.data + i:%s ", strkey, strlen(strkey), str.len, i, strlen(strkey), str.data + i); if (da_strncmp(str.data + i, strkey, strlen(strkey)) == 0) { diff --git a/src/agent/my/my_parse.h b/src/agent/my/my_parse.h index f42ab76..30d1bd5 100644 --- a/src/agent/my/my_parse.h +++ b/src/agent/my/my_parse.h @@ -31,10 +31,22 @@ MYSQL Protocol Definition, See more detail: void my_parse_req(struct msg *r); void my_parse_rsp(struct msg *r); -int my_do_command(struct context *ctx, struct conn *c_conn, struct msg *msg); +int my_do_command(struct msg *msg); int my_fragment(struct msg *r, uint32_t ncontinuum, struct msg_tqh *frag_msgq); int my_get_route_key(uint8_t *sql, int sql_len, int *start_offset, int *end_offset, const char* dbsession, struct msg* r); +int my_get_command(uint8_t *input_raw_packet, uint32_t input_packet_length, + struct msg *r, enum enum_server_command *cmd); + +#ifdef __cplusplus +extern "C" { +#endif +int rule_sql_match(const char* szsql, const char* osql, const char* dbsession, char* out_dtckey, int* out_keytype); +int get_statement_value(char* str, int len, const char* strkey, int* start_offset, int* end_offset); +#ifdef __cplusplus +} +#endif + #endif /* _MY_PARSE_H_ */ diff --git a/src/agent/my/my_protocol_classic.c b/src/agent/my/my_protocol_classic.c index 6e8b694..949b2cd 100644 --- a/src/agent/my/my_protocol_classic.c +++ b/src/agent/my/my_protocol_classic.c @@ -1,6 +1,7 @@ #include "my_protocol_classic.h" #include "my_com_data.h" #include "da_conn.h" +#include "my_parse.h" static inline char *strend(char *s) { From 218926e0748d9513519dcfc46fe931f43739ccaf Mon Sep 17 00:00:00 2001 From: kfysck Date: Tue, 26 Aug 2025 07:27:33 +0000 Subject: [PATCH 06/10] fix: dtcd warnings part 1 --- src/core/buffer/buffer_pond.h | 2 +- src/core/log/logger.h | 2 +- src/core/raw/raw_data.h | 2 +- src/core/raw/raw_data_process.h | 2 +- src/core/tree/t_tree.h | 2 +- src/core/tree/tree_data.h | 2 +- src/core/tree/tree_data_process.h | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/core/buffer/buffer_pond.h b/src/core/buffer/buffer_pond.h index c3961c8..1b399cd 100644 --- a/src/core/buffer/buffer_pond.h +++ b/src/core/buffer/buffer_pond.h @@ -93,7 +93,7 @@ class BufferPond : private TimerObject { //列扩展 DTCColExpand *_col_expand; - char _err_msg[256]; + char _err_msg[512]; int _need_set_integrity; //待淘汰节点数目 unsigned _need_purge_node_count; diff --git a/src/core/log/logger.h b/src/core/log/logger.h index 3ad70a1..cfb10f4 100644 --- a/src/core/log/logger.h +++ b/src/core/log/logger.h @@ -24,7 +24,7 @@ #include "log/log.h" #include "journal_id.h" -#define MAX_PATH_NAME_LEN 256 +#define MAX_PATH_NAME_LEN 8192 /* * DTC binlog base class(file) diff --git a/src/core/raw/raw_data.h b/src/core/raw/raw_data.h index 981989b..ea23990 100644 --- a/src/core/raw/raw_data.h +++ b/src/core/raw/raw_data.h @@ -88,7 +88,7 @@ class RawData { int auto_destory_; RawData *p_reference_; - char err_message_[200]; + char err_message_[4096]; DTCTableDefinition *table_definition_; diff --git a/src/core/raw/raw_data_process.h b/src/core/raw/raw_data_process.h index 9657ec7..130d00c 100644 --- a/src/core/raw/raw_data_process.h +++ b/src/core/raw/raw_data_process.h @@ -46,7 +46,7 @@ class RawDataProcess : public DataProcess { UpdateMode update_mode_; int64_t rows_count_; int64_t dirty_rows_count_; - char err_message_[200]; + char err_message_[4096]; unsigned int nodeSizeLimit; // -DEBUG- diff --git a/src/core/tree/t_tree.h b/src/core/tree/t_tree.h index 873a178..cce2be0 100644 --- a/src/core/tree/t_tree.h +++ b/src/core/tree/t_tree.h @@ -34,7 +34,7 @@ class Ttree { protected: ALLOC_HANDLE_T root_handle_; MallocBase &m_stMalloc; - char err_message_[100]; + char err_message_[4096]; public: Ttree(MallocBase &stMalloc); diff --git a/src/core/tree/tree_data.h b/src/core/tree/tree_data.h index f13d4ce..1bbb68a 100644 --- a/src/core/tree/tree_data.h +++ b/src/core/tree/tree_data.h @@ -122,7 +122,7 @@ class TreeData { DTCTableDefinition *p_table_; uint8_t index_depth_; int table_index_; - char err_message_[100]; + char err_message_[4096]; ALLOC_SIZE_T need_new_bufer_size; // 最近一次分配内存失败需要的大小 uint64_t affected_rows_; diff --git a/src/core/tree/tree_data_process.h b/src/core/tree/tree_data_process.h index edc121c..a550c6f 100644 --- a/src/core/tree/tree_data_process.h +++ b/src/core/tree/tree_data_process.h @@ -47,7 +47,7 @@ class TreeDataProcess : public DataProcess { UpdateMode update_mode_; int64_t rows_count_; int64_t dirty_rows_count_; - char err_message_[200]; + char err_message_[4096]; unsigned int nodeSizeLimit; // -DEBUG- From 631b4c8b19fbc6ef832cdf8e6e292d82cdd5d94c Mon Sep 17 00:00:00 2001 From: kfysck Date: Tue, 26 Aug 2025 08:43:02 +0000 Subject: [PATCH 07/10] fix: compilation warnings in hwcserver and connector/1 --- src/connector/database_connection.cc | 28 ++++++++++++++-------------- src/hwcserver/async_file.cc | 12 ++++++------ src/hwcserver/async_file.h | 8 ++++---- src/hwcserver/comm.cc | 2 +- src/hwcserver/comm.h | 2 +- src/hwcserver/hwc_init_state.cc | 4 ++-- src/hwcserver/hwc_register_state.cc | 2 +- src/hwcserver/hwc_state_manager.h | 2 +- src/hwcserver/hwc_sync_unit.cc | 10 +++++----- src/libs/common/field/field.cc | 2 +- src/libs/common/field/field.h | 2 +- src/libs/common/my/my_comm.h | 2 ++ src/libs/mysql/include/mysql_com.h | 2 ++ 13 files changed, 41 insertions(+), 37 deletions(-) diff --git a/src/connector/database_connection.cc b/src/connector/database_connection.cc index 8ca3bb8..14f381f 100644 --- a/src/connector/database_connection.cc +++ b/src/connector/database_connection.cc @@ -49,7 +49,7 @@ CDBConn::CDBConn() if (mysql_init(&Mysql) == NULL) { db_err = mysql_errno(&Mysql); - snprintf(achErr, sizeof(achErr) - 1, "mysql init error: %s", + snprintf(achErr, sizeof(achErr), "mysql init error: %s", mysql_error(&Mysql)); } } @@ -76,7 +76,7 @@ CDBConn::CDBConn(const DBHost *Host) if (mysql_init(&Mysql) == NULL) { db_err = mysql_errno(&Mysql); - snprintf(achErr, sizeof(achErr) - 1, "mysql init error: %s", + snprintf(achErr, sizeof(achErr), "mysql init error: %s", mysql_error(&Mysql)); } } @@ -142,7 +142,7 @@ int CDBConn::Connect(const char *DBName) if (!Connected) { if (mysql_init(&Mysql) == NULL) { db_err = mysql_errno(&Mysql); - snprintf(achErr, sizeof(achErr) - 1, + snprintf(achErr, sizeof(achErr), "mysql init error: %s", mysql_error(&Mysql)); return (-1); } @@ -161,7 +161,7 @@ int CDBConn::Connect(const char *DBName) mysql_options(&Mysql, MYSQL_READ_DEFAULT_FILE, DBConfig.OptionFile) != 0) { db_err = mysql_errno(&Mysql); - snprintf(achErr, sizeof(achErr) - 1, + snprintf(achErr, sizeof(achErr), "mysql_options error: %s", mysql_error(&Mysql)); return (-2); @@ -174,7 +174,7 @@ int CDBConn::Connect(const char *DBName) use_matched ? CLIENT_FOUND_ROWS : 0) == NULL) { db_err = mysql_errno(&Mysql); - snprintf(achErr, sizeof(achErr) - 1, + snprintf(achErr, sizeof(achErr), "mysql connect error: %s", mysql_error(&Mysql)); return (-2); @@ -189,7 +189,7 @@ int CDBConn::Connect(const char *DBName) if (DBName != NULL && DBName[0] != '\0') { if (mysql_select_db(&Mysql, DBName) != 0) { db_err = mysql_errno(&Mysql); - snprintf(achErr, sizeof(achErr) - 1, + snprintf(achErr, sizeof(achErr), "mysql select_db error: %s", mysql_error(&Mysql)); Close(); @@ -237,7 +237,7 @@ int CDBConn::do_ping(void) iRet = mysql_ping(&Mysql); if (iRet != 0) { db_err = mysql_errno(&Mysql); - snprintf(achErr, sizeof(achErr) - 1, "mysql ping error: %s", + snprintf(achErr, sizeof(achErr), "mysql ping error: %s", mysql_error(&Mysql)); Close(); return (-1); @@ -256,7 +256,7 @@ int CDBConn::do_query(const char *SQL) if (mysql_real_query(&Mysql, SQL, strlen(SQL)) != 0) { db_err = mysql_errno(&Mysql); - snprintf(achErr, sizeof(achErr) - 1, "mysql query error: %s", + snprintf(achErr, sizeof(achErr), "mysql query error: %s", mysql_error(&Mysql)); Close(); return (-1); @@ -275,7 +275,7 @@ int CDBConn::do_query(const char *DBName, const char *SQL) if (mysql_real_query(&Mysql, SQL, strlen(SQL)) != 0) { db_err = mysql_errno(&Mysql); - snprintf(achErr, sizeof(achErr) - 1, "mysql query error: %s", + snprintf(achErr, sizeof(achErr), "mysql query error: %s", mysql_error(&Mysql)); Close(); return (-1); @@ -304,9 +304,9 @@ int64_t CDBConn::affected_rows() my_ulonglong RowNum; RowNum = mysql_affected_rows(&Mysql); - if (RowNum < 0) { + if (RowNum == (my_ulonglong)-1) { db_err = mysql_errno(&Mysql); - snprintf(achErr, sizeof(achErr) - 1, + snprintf(achErr, sizeof(achErr), "mysql affected rows error: %s", mysql_error(&Mysql)); Close(); return (-1); @@ -334,7 +334,7 @@ int CDBConn::use_result() if (Res == NULL) { if (mysql_errno(&Mysql) != 0) { db_err = mysql_errno(&Mysql); - snprintf(achErr, sizeof(achErr) - 1, + snprintf(achErr, sizeof(achErr), "mysql store result error: %s", mysql_error(&Mysql)); Close(); @@ -348,7 +348,7 @@ int CDBConn::use_result() res_num = mysql_num_rows(Res); if (res_num < 0) { db_err = mysql_errno(&Mysql); - snprintf(achErr, sizeof(achErr) - 1, "mysql num rows error: %s", + snprintf(achErr, sizeof(achErr), "mysql num rows error: %s", mysql_error(&Mysql)); mysql_free_result(Res); Close(); @@ -364,7 +364,7 @@ int CDBConn::fetch_row() Row = mysql_fetch_row(Res); if (Row == NULL) { db_err = mysql_errno(&Mysql); - snprintf(achErr, sizeof(achErr) - 1, + snprintf(achErr, sizeof(achErr), "mysql fetch rows error: %s", mysql_error(&Mysql)); free_result(); Close(); diff --git a/src/hwcserver/async_file.cc b/src/hwcserver/async_file.cc index b4afd51..079bd5c 100644 --- a/src/hwcserver/async_file.cc +++ b/src/hwcserver/async_file.cc @@ -156,7 +156,7 @@ int CAsyncFileImpl::Output(buffer & buff) int CAsyncFileWriter::Open() { if (_controller.Init()) { - snprintf(_errmsg, sizeof(_errmsg), "controller init failed, %s", + snprintf(_errmsg, sizeof(_errmsg), "controller init failed, %.4000s", _controller.ErrorMessage()); return CHBGlobal::ASYNC_PROCESS_ERR; @@ -164,7 +164,7 @@ int CAsyncFileWriter::Open() CAsyncFileImpl *p = new CAsyncFileImpl(); if (p->OpenForWriter(_controller.WriterPos())) { - snprintf(_errmsg, sizeof(_errmsg), "open for writer failed, %s", + snprintf(_errmsg, sizeof(_errmsg), "open for writer failed, %.4000s", p->ErrorMessage()); return CHBGlobal::ASYNC_PROCESS_ERR; @@ -205,7 +205,7 @@ int CAsyncFileWriter::Write(buffer & buf) CAsyncFileImpl *p = new CAsyncFileImpl(); if (p->OpenForWriter(pos)) { snprintf(_errmsg, sizeof(_errmsg), - "create CAsyncFileImpl failed, %s", + "create CAsyncFileImpl failed, %.4000s", p->ErrorMessage()); DELETE(p); @@ -231,7 +231,7 @@ int CAsyncFileWriter::Write(buffer & buf) int CAsyncFileReader::Open() { if (_controller.Init()) { - snprintf(_errmsg, sizeof(_errmsg), "controller init failed, %s", + snprintf(_errmsg, sizeof(_errmsg), "controller init failed, %.4000s", _controller.ErrorMessage()); return CHBGlobal::ASYNC_PROCESS_ERR; @@ -239,7 +239,7 @@ int CAsyncFileReader::Open() _asyncfile = new CAsyncFileImpl(); if (_asyncfile->OpenForReader(_controller.ReaderPos())) { - snprintf(_errmsg, sizeof(_errmsg), "open for reader failed, %s", + snprintf(_errmsg, sizeof(_errmsg), "open for reader failed, %.4000s", _asyncfile->ErrorMessage()); return CHBGlobal::ASYNC_PROCESS_ERR; @@ -307,7 +307,7 @@ int CAsyncFileReader::Read(buffer & buff) _asyncfile = new CAsyncFileImpl(); if (_asyncfile->OpenForReader(pos)) { snprintf(_errmsg, sizeof(_errmsg), - "create CAsyncFileImpl failed, %s", + "create CAsyncFileImpl failed, %.4000s", _asyncfile->ErrorMessage()); DELETE(_asyncfile); diff --git a/src/hwcserver/async_file.h b/src/hwcserver/async_file.h index 88bad1e..06e16f0 100644 --- a/src/hwcserver/async_file.h +++ b/src/hwcserver/async_file.h @@ -75,7 +75,7 @@ class CMapBase { char _path[256]; volatile char *_map; - char _errmsg[256]; + char _errmsg[8192]; }; enum ESyncStatus @@ -272,7 +272,7 @@ class CAsyncFileWriter { std::list < CAsyncFileImpl * >_asyncfiles; CAsyncFileController _controller; int _max; - char _errmsg[256]; + char _errmsg[8192]; }; /* @@ -295,7 +295,7 @@ class CAsyncFileReader { private: CAsyncFileImpl * _asyncfile; CAsyncFileController _controller; - char _errmsg[256]; + char _errmsg[8192]; int _processing; }; @@ -317,7 +317,7 @@ class CAsyncFileChecker { private: CAsyncFileImpl * _asyncfile; CAsyncFileController _controller; - char _errmsg[256]; + char _errmsg[8192]; }; #endif diff --git a/src/hwcserver/comm.cc b/src/hwcserver/comm.cc index d949683..ed91ad8 100644 --- a/src/hwcserver/comm.cc +++ b/src/hwcserver/comm.cc @@ -19,7 +19,7 @@ CRegistor CComm::registor; ConnectorProcess CComm::mysql_process_; const char *CComm::version = "hwc.0.1"; -char* CComm::dtc_conf = "../conf/dtc.yaml"; +const char* CComm::dtc_conf = "../conf/dtc.yaml"; int CComm::backend = 0; int CComm::normal = 1; diff --git a/src/hwcserver/comm.h b/src/hwcserver/comm.h index 258e7d0..1b570a4 100644 --- a/src/hwcserver/comm.h +++ b/src/hwcserver/comm.h @@ -46,7 +46,7 @@ class CComm { static ConnectorProcess mysql_process_; static const char* version; - static char* dtc_conf; + static const char* dtc_conf; static char* table_conf; static int backend; static int normal; diff --git a/src/hwcserver/hwc_init_state.cc b/src/hwcserver/hwc_init_state.cc index f8f2af2..2eb9e41 100644 --- a/src/hwcserver/hwc_init_state.cc +++ b/src/hwcserver/hwc_init_state.cc @@ -48,11 +48,11 @@ void InitState::HandleEvent() log4cplus_debug("dtc conf file:%s " , CComm::dtc_conf); DTCConfig* p_dtc_config = new DTCConfig(); if (p_dtc_config->load_yaml_file(CComm::dtc_conf, false) == -1) - return -1; + return; DbConfig* p_db_Config = DbConfig::Load(p_dtc_config , 1); if (p_db_Config == NULL) - return -1; + return; DTCTableDefinition* p_dtc_tab_def = p_db_Config->build_table_definition(); TableDefinitionManager::instance()->set_cur_table_def(p_dtc_tab_def , 0); diff --git a/src/hwcserver/hwc_register_state.cc b/src/hwcserver/hwc_register_state.cc index 675ba47..44bbd47 100644 --- a/src/hwcserver/hwc_register_state.cc +++ b/src/hwcserver/hwc_register_state.cc @@ -33,7 +33,7 @@ void RegisterState::Enter() if (CComm::mysql_process_.check_table() != 0) { log4cplus_error("mysql field setting is not same as dtc"); p_hwc_state_manager_->ChangeState(E_HWC_STATE_FAULT); - return -1; + return; } } diff --git a/src/hwcserver/hwc_state_manager.h b/src/hwcserver/hwc_state_manager.h index fc9e35d..4a8220e 100644 --- a/src/hwcserver/hwc_state_manager.h +++ b/src/hwcserver/hwc_state_manager.h @@ -38,7 +38,7 @@ class HwcStateManager void ChangeState(int iNewState); public: - void BindDBConfigParser(const DbConfig* const p_parser) + void BindDBConfigParser(DbConfig* const p_parser) { p_db_config_ = p_parser;} DbConfig* const GetDBConfigParser() diff --git a/src/hwcserver/hwc_sync_unit.cc b/src/hwcserver/hwc_sync_unit.cc index 072ddef..123b153 100644 --- a/src/hwcserver/hwc_sync_unit.cc +++ b/src/hwcserver/hwc_sync_unit.cc @@ -22,9 +22,9 @@ int HwcSync::query_cold_server( DTCJobOperation* p_job, const DTCValue* key) { - p_job->set_request_key(key); + p_job->set_request_key(const_cast(key)); p_job->set_request_code(DRequest::Get); - DTCFieldSet* p_dtc_field_set = p_job->request_fields(); + const DTCFieldSet* p_dtc_field_set = p_job->request_fields(); DELETE(p_dtc_field_set); DTCTableDefinition* p_dtc_tab_def = TableDefinitionManager::instance()->get_cur_table_def(); @@ -142,7 +142,7 @@ int HwcSync::Run() // key parse int i_key_size = 0; - char* p_key = result_m.BinaryValue("key", i_key_size); + const char* p_key = result_m.BinaryValue("key", i_key_size); DTCTableDefinition* p_dtc_tab_def = TableDefinitionManager::instance()->get_cur_table_def(); @@ -195,12 +195,12 @@ int HwcSync::Run() decode_hotbin_result(&p_hot_result , o_hot_bin); for (int i = 0; i < p_hot_result.total_rows(); i++) { - RowValue* p_hot_raw = p_hot_result.fetch_row(); + const RowValue* p_hot_raw = p_hot_result.fetch_row(); bool b_check = false; // 冷数据库为base,只要冷数据库中没有热的,就插入 for (int j = 0; j < p_cold_res->total_rows(); j++) { - RowValue* p_cold_raw = p_cold_res->fetch_row(); + const RowValue* p_cold_raw = p_cold_res->fetch_row(); if(p_hot_raw->Compare(*p_cold_raw , p_fiedld_list , p_dtc_tab_def->num_fields() + 1) == 0) { diff --git a/src/libs/common/field/field.cc b/src/libs/common/field/field.cc index 01aac86..a7d82c2 100644 --- a/src/libs/common/field/field.cc +++ b/src/libs/common/field/field.cc @@ -368,7 +368,7 @@ int DTCFieldValue::Compare(const RowValue &r, int iCmpFirstNRows) return 1; } -int RowValue::Compare(const RowValue &rv, uint8_t *fieldIDList, uint8_t num) +int RowValue::Compare(const RowValue &rv, uint8_t *fieldIDList, uint8_t num) const { for (int i = 0; i < num; ++i) { switch (field_type(fieldIDList[i])) { diff --git a/src/libs/common/field/field.h b/src/libs/common/field/field.h index 10023ff..6a4cb96 100644 --- a/src/libs/common/field/field.h +++ b/src/libs/common/field/field.h @@ -201,7 +201,7 @@ class RowValue : public TableReference { } /*Compare tow RowValue by FieldIDList*/ - int Compare(const RowValue &rv, uint8_t *fieldIDList, uint8_t num); + int Compare(const RowValue &rv, uint8_t *fieldIDList, uint8_t num) const; DTCValue &operator[](int n) { return value[n]; diff --git a/src/libs/common/my/my_comm.h b/src/libs/common/my/my_comm.h index c685712..8e361ae 100644 --- a/src/libs/common/my/my_comm.h +++ b/src/libs/common/my/my_comm.h @@ -28,7 +28,9 @@ MYSQL Protocol Definition, See more detail: */ #define MYSQL_HEADER_SIZE 4 +#ifndef MAX_PACKET_LENGTH #define MAX_PACKET_LENGTH (256L * 256L * 256L - 1) +#endif #define DA_PROTOCOL_VERSION 2 enum enum_agent_admin { CMD_NOP = 0, CMD_KEY_DEFINE }; diff --git a/src/libs/mysql/include/mysql_com.h b/src/libs/mysql/include/mysql_com.h index 519ff2c..d5988ab 100644 --- a/src/libs/mysql/include/mysql_com.h +++ b/src/libs/mysql/include/mysql_com.h @@ -47,7 +47,9 @@ than this value will have first byte of OK packet to be 254 thus does not provide a means to identify if this is OK or EOF packet. */ +#ifndef MAX_PACKET_LENGTH #define MAX_PACKET_LENGTH (256L*256L*256L-1) +#endif /* USER_HOST_BUFF_SIZE -- length of string buffer, that is enough to contain From 3438877bf889423b75c8c57b05ef953e1299f67d Mon Sep 17 00:00:00 2001 From: kfysck Date: Tue, 26 Aug 2025 12:11:11 +0000 Subject: [PATCH 08/10] fix: warnings in connector --- src/connector/connector.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/connector/connector.cc b/src/connector/connector.cc index 0ed426a..ad141a3 100644 --- a/src/connector/connector.cc +++ b/src/connector/connector.cc @@ -383,10 +383,10 @@ int main(int argc, char **argv) conn_proc->set_proc_timeout(proc_timeout - 1); while (!stop) { helperArgs.netfd = accept_connection(fd); - char buf[16]; - memset(buf, 0, 16); + char buf[17]; + memset(buf, 0, 17); buf[0] = WATCHDOG_INPUT_OBJECT; - snprintf(buf + 1, 15, "%s", conn_proc->get_name()); + snprintf(buf + 1, 16, "%s", conn_proc->get_name()); watch_dog_fork(buf, (int (*)(void *))helper_proc_run, (void *)&helperArgs); From 962e857f67add53c79d08609b94c9b60ea33e213 Mon Sep 17 00:00:00 2001 From: kfysck Date: Tue, 26 Aug 2025 12:37:50 +0000 Subject: [PATCH 09/10] fix: warning in dtcd --- src/core/log/logger.cc | 8 +++- src/core/raw/raw_data_process.cc | 61 +++++++++++++++++++++--------- src/core/tree/tree_data.cc | 2 +- src/core/tree/tree_data_process.cc | 33 +++++++++++----- 4 files changed, 76 insertions(+), 28 deletions(-) diff --git a/src/core/log/logger.cc b/src/core/log/logger.cc index b1f2360..b017c6e 100644 --- a/src/core/log/logger.cc +++ b/src/core/log/logger.cc @@ -112,7 +112,13 @@ int LogBase::scan_serial(uint32_t *min, uint32_t *max) *max = 0; char prefix[MAX_PATH_NAME_LEN] = { 0 }; - snprintf(prefix, MAX_PATH_NAME_LEN, "%s.binlog.", _prefix); + int prefix_len = strlen(_prefix); + if (prefix_len + 8 >= MAX_PATH_NAME_LEN) { + return -1; + } + // Use safer string operations to avoid truncation warnings + strncpy(prefix, _prefix, MAX_PATH_NAME_LEN - 9); + strcat(prefix, ".binlog."); int l = strlen(prefix); uint32_t v = 0; diff --git a/src/core/raw/raw_data_process.cc b/src/core/raw/raw_data_process.cc index 19021d0..674502d 100644 --- a/src/core/raw/raw_data_process.cc +++ b/src/core/raw/raw_data_process.cc @@ -186,8 +186,11 @@ int RawDataProcess::expand_node(DTCJobOperation &job_op, Node *p_node) } if (iRet != DTC_CODE_SUCCESS) { + const char* err_msg = stTmpRawData.get_err_msg(); + size_t available_space = sizeof(err_message_) - 22; // Reserve space for prefix snprintf(err_message_, sizeof(err_message_), - "raw-data init error: %s", stTmpRawData.get_err_msg()); + "raw-data init error: %.*s", + (int)available_space, err_msg ? err_msg : "unknown error"); stTmpRawData.destory(); return -3; } @@ -195,8 +198,11 @@ int RawDataProcess::expand_node(DTCJobOperation &job_op, Node *p_node) stTmpRawData.set_refrence(&stNewTmpRawData); iRet = stTmpRawData.copy_all(); if (iRet != DTC_CODE_SUCCESS) { + const char* err_msg = stTmpRawData.get_err_msg(); + size_t available_space = sizeof(err_message_) - 22; // Reserve space for prefix snprintf(err_message_, sizeof(err_message_), - "raw-data init error: %s", stTmpRawData.get_err_msg()); + "raw-data init error: %.*s", + (int)available_space, err_msg ? err_msg : "unknown error"); stTmpRawData.destory(); return -3; } @@ -248,8 +254,11 @@ int RawDataProcess::do_replace_all(Node *p_node, RawData *new_data) } if (iRet != 0) { + const char* err_msg = tmpRawData.get_err_msg(); + size_t available_space = sizeof(err_message_) - 22; // Reserve space for prefix snprintf(err_message_, sizeof(err_message_), - "raw-data init error: %s", tmpRawData.get_err_msg()); + "raw-data init error: %.*s", + (int)available_space, err_msg ? err_msg : "unknown error"); tmpRawData.destory(); return (-2); } @@ -257,8 +266,11 @@ int RawDataProcess::do_replace_all(Node *p_node, RawData *new_data) tmpRawData.set_refrence(new_data); iRet = tmpRawData.copy_all(); if (iRet != 0) { + const char* err_msg = tmpRawData.get_err_msg(); + size_t available_space = sizeof(err_message_) - 22; // Reserve space for prefix snprintf(err_message_, sizeof(err_message_), - "raw-data init error: %s", tmpRawData.get_err_msg()); + "raw-data init error: %.*s", + (int)available_space, err_msg ? err_msg : "unknown error"); tmpRawData.destory(); return (-3); } @@ -597,9 +609,11 @@ int RawDataProcess::do_append(DTCJobOperation &job_op, Node *p_node, if (affected_data != NULL && affected_data->insert_row(*stpNodeRow, false, isDirty) != 0) { + const char* err_msg = affected_data->get_err_msg(); + size_t available_space = sizeof(err_message_) - 28; // Reserve space for prefix snprintf(err_message_, sizeof(err_message_), - "raw-data insert row error: %s", - affected_data->get_err_msg()); + "raw-data insert row error: %.*s", + (int)available_space, err_msg ? err_msg : "unknown error"); return (-1); } @@ -618,9 +632,11 @@ int RawDataProcess::do_append(DTCJobOperation &job_op, Node *p_node, if (iRet != EC_NO_MEM) p_node->vd_handle() = raw_data_.get_handle(); if (iRet != 0) { + const char* err_msg = raw_data_.get_err_msg(); + size_t available_space = sizeof(err_message_) - 28; // Reserve space for prefix snprintf(err_message_, sizeof(err_message_), - "raw-data insert row error: %s", - raw_data_.get_err_msg()); + "raw-data insert row error: %.*s", + (int)available_space, err_msg ? err_msg : "unknown error"); /*标记加入黑名单*/ job_op.push_black_list_size(raw_data_.need_size()); return (-2); @@ -704,8 +720,11 @@ int RawDataProcess::do_replace_all(DTCJobOperation &job_op, Node *p_node) p_node->vd_handle() = raw_data_.get_handle(); if (iRet != 0) { + const char* err_msg = raw_data_.get_err_msg(); + size_t available_space = sizeof(err_message_) - 22; // Reserve space for prefix snprintf(err_message_, sizeof(err_message_), - "raw-data init error: %s", raw_data_.get_err_msg()); + "raw-data init error: %.*s", + (int)available_space, err_msg ? err_msg : "unknown error"); /*标记加入黑名单*/ job_op.push_black_list_size(raw_data_.need_size()); p_buffer_pond_->purge_node(job_op.packed_key(), *p_node); @@ -771,10 +790,12 @@ int RawDataProcess::do_replace_all(DTCJobOperation &job_op, Node *p_node) if (0 == iRet) continue; ERROR_PROCESS: + const char* err_msg = raw_data_.get_err_msg(); + size_t available_space = sizeof(err_message_) - 50; // Reserve space for prefix and numbers snprintf( err_message_, sizeof(err_message_), - "raw-data insert row error: ret=%d,err=%s, cnt=%d", - iRet, raw_data_.get_err_msg(), try_purge_count); + "raw-data insert row error: ret=%d,err=%.*s, cnt=%d", + iRet, (int)available_space, err_msg ? err_msg : "unknown error", try_purge_count); /*标记加入黑名单*/ job_op.push_black_list_size(all_rows_size); p_buffer_pond_->purge_node(job_op.packed_key(), @@ -900,9 +921,11 @@ int RawDataProcess::do_replace(DTCJobOperation &job_op, Node *p_node, if (iRet != EC_NO_MEM) p_node->vd_handle() = raw_data_.get_handle(); if (iRet != 0) { + const char* err_msg = raw_data_.get_err_msg(); + size_t available_space = sizeof(err_message_) - 35; // Reserve space for prefix and error code snprintf(err_message_, sizeof(err_message_), - "raw-data replace row error: %d, %s", iRet, - raw_data_.get_err_msg()); + "raw-data replace row error: %d, %.*s", iRet, + (int)available_space, err_msg ? err_msg : "unknown error"); /*标记加入黑名单*/ job_op.push_black_list_size(raw_data_.need_size()); return (-3); @@ -926,9 +949,11 @@ int RawDataProcess::do_replace(DTCJobOperation &job_op, Node *p_node, p_node->vd_handle() = raw_data_.get_handle(); if (iRet != 0) { + const char* err_msg = raw_data_.get_err_msg(); + size_t available_space = sizeof(err_message_) - 35; // Reserve space for prefix and error code snprintf(err_message_, sizeof(err_message_), - "raw-data replace row error: %d, %s", iRet, - raw_data_.get_err_msg()); + "raw-data replace row error: %d, %.*s", iRet, + (int)available_space, err_msg ? err_msg : "unknown error"); /*标记加入黑名单*/ job_op.push_black_list_size(raw_data_.need_size()); return (-3); @@ -1079,9 +1104,11 @@ int RawDataProcess::do_update(DTCJobOperation &job_op, Node *p_node, if (iRet != EC_NO_MEM) p_node->vd_handle() = raw_data_.get_handle(); if (iRet != 0) { + const char* err_msg = raw_data_.get_err_msg(); + size_t available_space = sizeof(err_message_) - 35; // Reserve space for prefix and error code snprintf(err_message_, sizeof(err_message_), - "raw-data replace row error: %d, %s", iRet, - raw_data_.get_err_msg()); + "raw-data replace row error: %d, %.*s", iRet, + (int)available_space, err_msg ? err_msg : "unknown error"); /*标记加入黑名单*/ job_op.push_black_list_size(raw_data_.need_size()); return (-6); diff --git a/src/core/tree/tree_data.cc b/src/core/tree/tree_data.cc index 774fe9d..bd5a0a8 100644 --- a/src/core/tree/tree_data.cc +++ b/src/core/tree/tree_data.cc @@ -1197,7 +1197,7 @@ int TreeData::delete_sub_raw_data(DTCJobOperation &job_op, MEM_HANDLE_T hRecord) isFreeNode); if (iret != 0) { snprintf(err_message_, sizeof(err_message_), - "delete stTree failed:%d\t%s", iret, + "delete stTree failed:%d\t%.4000s", iret, t_tree_.get_err_msg()); return -4; } diff --git a/src/core/tree/tree_data_process.cc b/src/core/tree/tree_data_process.cc index 19c1c7e..8b031ef 100644 --- a/src/core/tree/tree_data_process.cc +++ b/src/core/tree/tree_data_process.cc @@ -84,8 +84,11 @@ int TreeDataProcess::do_replace_all(Node *p_node, RawData *new_data) } if (iRet != 0) { + const char* err_msg = tmpTreeData.get_err_msg(); + size_t available_space = sizeof(err_message_) - 23; // Reserve space for prefix snprintf(err_message_, sizeof(err_message_), - "root-data init error: %s", tmpTreeData.get_err_msg()); + "root-data init error: %.*s", + (int)available_space, err_msg ? err_msg : "unknown error"); tmpTreeData.destory(); return (-2); } @@ -98,8 +101,11 @@ int TreeDataProcess::do_replace_all(Node *p_node, RawData *new_data) } if (iRet != 0) { + const char* err_msg = tmpTreeData.get_err_msg(); + size_t available_space = sizeof(err_message_) - 23; // Reserve space for prefix snprintf(err_message_, sizeof(err_message_), - "root-data init error: %s", tmpTreeData.get_err_msg()); + "root-data init error: %.*s", + (int)available_space, err_msg ? err_msg : "unknown error"); tmpTreeData.destory(); return (-2); } @@ -196,9 +202,11 @@ int TreeDataProcess::do_append(DTCJobOperation &job_op, Node *p_node, if (iRet != EC_NO_MEM) p_node->vd_handle() = m_stTreeData.get_handle(); if (iRet != 0) { + const char* err_msg = m_stTreeData.get_err_msg(); + size_t available_space = sizeof(err_message_) - 32; // Reserve space for prefix and error code snprintf(err_message_, sizeof(err_message_), - "tree-data insert row error: %s,%d", - m_stTreeData.get_err_msg(), iRet); + "tree-data insert row error: %.*s,%d", + (int)available_space, err_msg ? err_msg : "unknown error", iRet); /*标记加入黑名单*/ job_op.push_black_list_size(m_stTreeData.need_size()); return (-2); @@ -423,8 +431,11 @@ int TreeDataProcess::do_replace_all(DTCJobOperation &job_op, Node *p_node) p_node->vd_handle() = m_stTreeData.get_handle(); if (iRet != 0) { + const char* err_msg = m_stTreeData.get_err_msg(); + size_t available_space = sizeof(err_message_) - 22; // Reserve space for prefix snprintf(err_message_, sizeof(err_message_), - "raw-data init error: %s", m_stTreeData.get_err_msg()); + "raw-data init error: %.*s", + (int)available_space, err_msg ? err_msg : "unknown error"); /*标记加入黑名单*/ job_op.push_black_list_size(m_stTreeData.need_size()); p_buffer_pond_->purge_node(job_op.packed_key(), *p_node); @@ -484,10 +495,12 @@ int TreeDataProcess::do_replace_all(DTCJobOperation &job_op, Node *p_node) if (0 == iRet) continue; ERROR_PROCESS: + const char* err_msg = m_stTreeData.get_err_msg(); + size_t available_space = sizeof(err_message_) - 50; // Reserve space for prefix and numbers snprintf( err_message_, sizeof(err_message_), - "raw-data insert row error: ret=%d,err=%s, cnt=%d", - iRet, m_stTreeData.get_err_msg(), + "raw-data insert row error: ret=%d,err=%.*s, cnt=%d", + iRet, (int)available_space, err_msg ? err_msg : "unknown error", try_purge_count); /*标记加入黑名单*/ job_op.push_black_list_size(all_rows_size); @@ -587,9 +600,11 @@ int TreeDataProcess::do_replace(DTCJobOperation &job_op, Node *p_node, p_node->vd_handle() = m_stTreeData.get_handle(); if (iRet != 0) { + const char* err_msg = m_stTreeData.get_err_msg(); + size_t available_space = sizeof(err_message_) - 35; // Reserve space for prefix and error code snprintf(err_message_, sizeof(err_message_), - "raw-data replace row error: %d, %s", iRet, - m_stTreeData.get_err_msg()); + "raw-data replace row error: %d, %.*s", iRet, + (int)available_space, err_msg ? err_msg : "unknown error"); /*标记加入黑名单*/ job_op.push_black_list_size(m_stTreeData.need_size()); return (-3); From 4db54493e76832febfab814ea601bdcefa7e2055 Mon Sep 17 00:00:00 2001 From: kfysck Date: Tue, 26 Aug 2025 12:53:37 +0000 Subject: [PATCH 10/10] fix: warnings in utils --- src/utils/conf-gen-utils.cc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/utils/conf-gen-utils.cc b/src/utils/conf-gen-utils.cc index 2a42f30..129640d 100644 --- a/src/utils/conf-gen-utils.cc +++ b/src/utils/conf-gen-utils.cc @@ -301,7 +301,10 @@ void delete_all_old_yaml() cmd += ROOT_PATH; cmd += "config-*.yaml"; log4cplus_info("cmd: %s", cmd.c_str()); - system(cmd.c_str()); + int result = system(cmd.c_str()); + if (result != 0) { + log4cplus_error("Failed to execute command: %s, return code: %d", cmd.c_str(), result); + } } void dump_authority() @@ -352,9 +355,9 @@ int main(int argc, char* argv[]) int n = strncmp(drt->d_name, prefix, l); if (n == 0) { YAML::Node dtc_config; - char filepath[260] = {0}; + char filepath[512] = {0}; try { - sprintf(filepath, "%s%s", conf_dir, drt->d_name); + snprintf(filepath, sizeof(filepath), "%s%s", conf_dir, drt->d_name); log4cplus_info("loading file: %s", filepath); dtc_config = YAML::LoadFile(filepath); } catch (const YAML::Exception &e) {