调试 mserver5 的问题

Problems debugging mserver5

我最近开始调试 mserver5 应用程序,使用 vscode 和一个非常舒适的 cmake 插件 CMake Tools。此外,我正在使用 gcc 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04) 作为编译器以及 vscodemserver5 的以下 launch.json 调试配置:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) mserver5 triangleDB",
            "type": "cppdbg",
            "request": "launch",
            // Resolved by CMake Tools:
            "program": "${command:cmake.launchTargetPath}",
            "args": ["--dbpath=/home/mledl/dbfarm/triangleDB", "--set", "mapi_port=0"],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}/build",
            "environment": [
                {
                    // add the directory where our target was built to the PATHs
                    // it gets resolved by CMake Tools:
                    "name": "PATH",
                    "value": "$PATH:${command:cmake.launchTargetDirectory}"
                },
            ],
            "externalConsole": true,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {   "description":"In this mode GDB will be attached to both processes after a call to fork() or vfork().",
                    "text": "-gdb-set detach-on-fork off",
                    "ignoreFailures": true
                },
                {   "description": "The new process is debugged after a fork. The parent process runs unimpeded.",
                    "text": "-gdb-set follow-fork-mode child",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

我要连接的数据库(这里是 triangleDB)是在 dbfarm 中使用 monetdb 应用程序创建的,我将使用 [=24] 连接到它=] 使用默认用户名和密码组合 monetdb 的应用程序。使用带有 运行 dbfarm.

monetdb 应用程序启动它时,我可以成功连接并查询我的 triangleDB

当使用上述 launch.json 文件从 vscode 启动 mserver5 进行调试并使用 mclientmonetdb 用户连接到它时,我无法以某种方式进行身份验证并将以下错误打印到 mserver5 日志中:

client1: createExceptionInternal: !ERROR: InvalidCredentialsException:checkCredentials:invalid credentials for user 'monetdb'

有人知道为什么 mserver5 无法检索默认用户吗?它是否依赖守护进程 monetdbd 从中检索用户数据?有人可以告诉我我遗漏了什么或者我如何有效地调试 mserver5?

另一点是我需要设置 mapi_port=0 以使 mserver5 绑定到可用端口,因为它在使用 vscode 调试时以某种方式打开两个 mapi connectionsCLion。使用特定端口时应用程序崩溃,因为第二次绑定尝试将在已使用的地址上。下面一段显示调试时打开了两个连接:

# MonetDB 5 server v11.40.0
# This is an unreleased version
# Serving database 'triangleDB', using 24 threads
# Compiled for x86_64-pc-linux-gnu/64bit with 128bit integers
# Found 31.349 GiB available main-memory of which we use 25.549 GiB
# Copyright (c) 1993 - July 2008 CWI.
# Copyright (c) August 2008 - 2021 MonetDB B.V., all rights reserved
# Visit https://www.monetdb.org/ for further information
# Listening for connection requests on mapi:monetdb://localhost:46093/
# Listening for connection requests on mapi:monetdb://localhost:40387/

提前感谢所有可以帮助我解决这个问题的人。期待收到您的来信并确保大家安全。

如果您的数据库是使用 monetdb 创建的,并且您想直接使用 mserver5 启动它,您需要告诉 mserver5 .vaultkey 在哪里。

在你dbfarm里做一个grep monet_vault_key merovingian.log,复制整个--set monet_vault_key=/<path-to>/dbfarm/demo/.vaultkey然后把这个选项添加到你mserver5.[=18的启动命令里=]

我在这里给出一个额外的答案,因为我想弄清楚我必须做什么才能使用 vscode 调试 mserver5 并使用 [=14= 与之交互]申请。

在尝试弄清楚为什么无法加载某些 modules/libraries 时,我注意到 GDK kernel 缺少一个名为 monet_mod_path 的环境变量,可以使用 --set monet_mod_path=/usr/local/lib/monetdb5 mserver5 的选项。缺少的 monet_mod_path 也是 mserver5mapi connection.

监听两个地址的原因

我现在使用以下命令启动mserver5进行调试:

mserver5 --dbpath=/home/mledl/dbfarm/triangleDB --set monet_vault_key=/home/mledl/dbfarm/triangleDB/.vaultkey --set monet_mod_path=/usr/local/lib/monetdb5 --set gdk_nr_threads=24 --set max_clients=64 --set sql_optimizer=default_pipe

最低工作配置如下:

mserver5 --dbpath=/path/to/your/db --set monet_vault_key=/path/to/your/db/.vaultkey --set monet_mod_path=/usr/local/lib/monetdb5 

注意:我将应用程序安装到默认安装目录。如果您选择自定义的,则 monet 模块路径具有以下模式: monet_mod_path=/path/to/install/lib/monetdb5


我希望这个答案对以后的人有所帮助,并节省我不得不投入的所有调查时间。