Merge branch '3.0' into fix/coverity_glzhao
This commit is contained in:
commit
3db012b9a3
|
@ -2,7 +2,7 @@
|
||||||
# taos-tools
|
# taos-tools
|
||||||
ExternalProject_Add(taos-tools
|
ExternalProject_Add(taos-tools
|
||||||
GIT_REPOSITORY https://github.com/taosdata/taos-tools.git
|
GIT_REPOSITORY https://github.com/taosdata/taos-tools.git
|
||||||
GIT_TAG 4d02980
|
GIT_TAG 9284147
|
||||||
SOURCE_DIR "${TD_SOURCE_DIR}/tools/taos-tools"
|
SOURCE_DIR "${TD_SOURCE_DIR}/tools/taos-tools"
|
||||||
BINARY_DIR ""
|
BINARY_DIR ""
|
||||||
#BUILD_IN_SOURCE TRUE
|
#BUILD_IN_SOURCE TRUE
|
||||||
|
|
|
@ -116,7 +116,7 @@ Note: TDengine only supports Windows Server 2016/2019 and Windows 10/11 on the W
|
||||||
|
|
||||||
1. Download the macOS installation package.
|
1. Download the macOS installation package.
|
||||||
<PkgListV3 type={7}/>
|
<PkgListV3 type={7}/>
|
||||||
2. Run the downloaded package to install TDengine.
|
2. Run the downloaded package to install TDengine. If the installation is blocked, you can right-click or ctrl-click on the installation package and select `Open`.
|
||||||
|
|
||||||
</TabItem>
|
</TabItem>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
@ -179,12 +179,20 @@ The following `systemctl` commands can help you manage TDengine service:
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
|
## Command Line Interface (CLI)
|
||||||
|
|
||||||
|
You can use the TDengine CLI to monitor your TDengine deployment and execute ad hoc queries. To open the CLI, you can execute `taos` in terminal.
|
||||||
|
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
|
||||||
<TabItem label="Windows" value="windows">
|
<TabItem label="Windows" value="windows">
|
||||||
|
|
||||||
After the installation is complete, run `C:\TDengine\taosd.exe` to start TDengine Server.
|
After the installation is complete, run `C:\TDengine\taosd.exe` to start TDengine Server.
|
||||||
|
|
||||||
|
## Command Line Interface (CLI)
|
||||||
|
|
||||||
|
You can use the TDengine CLI to monitor your TDengine deployment and execute ad hoc queries. To open the CLI, you can run `taos.exe` in the `C:\TDengine` directory of the Windows terminal to start the TDengine command line.
|
||||||
|
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
|
||||||
<TabItem label="macOS" value="macos">
|
<TabItem label="macOS" value="macos">
|
||||||
|
@ -206,12 +214,12 @@ The following `launchctl` commands can help you manage TDengine service:
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
</TabItem>
|
|
||||||
</Tabs>
|
|
||||||
|
|
||||||
## Command Line Interface (CLI)
|
## Command Line Interface (CLI)
|
||||||
|
|
||||||
You can use the TDengine CLI to monitor your TDengine deployment and execute ad hoc queries. To open the CLI, you can execute `taos` in the Linux/macOS terminal where TDengine is installed, or you can run `taos.exe` in the `C:\TDengine` directory of the Windows terminal where TDengine is installed to start the TDengine command line.
|
You can use the TDengine CLI to monitor your TDengine deployment and execute ad hoc queries. To open the CLI, you can execute `taos` in terminal.
|
||||||
|
|
||||||
|
</TabItem>
|
||||||
|
</Tabs>
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
taos
|
taos
|
||||||
|
|
|
@ -15,10 +15,12 @@ import ConnCSNative from "./_connect_cs.mdx";
|
||||||
import ConnC from "./_connect_c.mdx";
|
import ConnC from "./_connect_c.mdx";
|
||||||
import ConnR from "./_connect_r.mdx";
|
import ConnR from "./_connect_r.mdx";
|
||||||
import ConnPHP from "./_connect_php.mdx";
|
import ConnPHP from "./_connect_php.mdx";
|
||||||
import InstallOnWindows from "../../14-reference/03-connector/_linux_install.mdx";
|
import InstallOnLinux from "../../14-reference/03-connector/_linux_install.mdx";
|
||||||
import InstallOnLinux from "../../14-reference/03-connector/_windows_install.mdx";
|
import InstallOnWindows from "../../14-reference/03-connector/_windows_install.mdx";
|
||||||
|
import InstallOnMacOS from "../../14-reference/03-connector/_macos_install.mdx";
|
||||||
import VerifyLinux from "../../14-reference/03-connector/_verify_linux.mdx";
|
import VerifyLinux from "../../14-reference/03-connector/_verify_linux.mdx";
|
||||||
import VerifyWindows from "../../14-reference/03-connector/_verify_windows.mdx";
|
import VerifyWindows from "../../14-reference/03-connector/_verify_windows.mdx";
|
||||||
|
import VerifyMacOS from "../../14-reference/03-connector/_verify_macos.mdx";
|
||||||
|
|
||||||
Any application running on any platform can access TDengine through the REST API provided by TDengine. For information, see [REST API](/reference/rest-api/). Applications can also use the connectors for various programming languages, including C/C++, Java, Python, Go, Node.js, C#, and Rust, to access TDengine. These connectors support connecting to TDengine clusters using both native interfaces (taosc). Some connectors also support connecting over a REST interface. Community developers have also contributed several unofficial connectors, such as the ADO.NET connector, the Lua connector, and the PHP connector.
|
Any application running on any platform can access TDengine through the REST API provided by TDengine. For information, see [REST API](/reference/rest-api/). Applications can also use the connectors for various programming languages, including C/C++, Java, Python, Go, Node.js, C#, and Rust, to access TDengine. These connectors support connecting to TDengine clusters using both native interfaces (taosc). Some connectors also support connecting over a REST interface. Community developers have also contributed several unofficial connectors, such as the ADO.NET connector, the Lua connector, and the PHP connector.
|
||||||
|
|
||||||
|
@ -44,10 +46,13 @@ If you are choosing to use the native connection and the the application is not
|
||||||
|
|
||||||
<Tabs defaultValue="linux" groupId="os">
|
<Tabs defaultValue="linux" groupId="os">
|
||||||
<TabItem value="linux" label="Linux">
|
<TabItem value="linux" label="Linux">
|
||||||
<InstallOnWindows />
|
<InstallOnLinux />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem value="windows" label="Windows">
|
<TabItem value="windows" label="Windows">
|
||||||
<InstallOnLinux />
|
<InstallOnWindows />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem value="macos" label="MacOS">
|
||||||
|
<InstallOnMacOS />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|
||||||
|
@ -62,6 +67,9 @@ After the above installation and configuration are done and making sure TDengine
|
||||||
<TabItem value="windows" label="Windows">
|
<TabItem value="windows" label="Windows">
|
||||||
<VerifyWindows />
|
<VerifyWindows />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
<TabItem value="macos" label="MacOS">
|
||||||
|
<VerifyMacOS />
|
||||||
|
</TabItem>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|
||||||
## Install Connectors
|
## Install Connectors
|
||||||
|
|
|
@ -945,7 +945,7 @@ MIN(expr)
|
||||||
MODE(expr)
|
MODE(expr)
|
||||||
```
|
```
|
||||||
|
|
||||||
**Description**:The value which has the highest frequency of occurrence. NULL is returned if there are multiple values which have highest frequency of occurrence.
|
**Description**:The value which has the highest frequency of occurrence. One random value is returned if there are multiple values which have highest frequency of occurrence.
|
||||||
|
|
||||||
**Return value type**: Same as the input data
|
**Return value type**: Same as the input data
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,6 @@ title: TDengine Go Connector
|
||||||
import Tabs from '@theme/Tabs';
|
import Tabs from '@theme/Tabs';
|
||||||
import TabItem from '@theme/TabItem';
|
import TabItem from '@theme/TabItem';
|
||||||
|
|
||||||
import Preparition from "./_preparation.mdx"
|
|
||||||
import GoInsert from "../../07-develop/03-insert-data/_go_sql.mdx"
|
import GoInsert from "../../07-develop/03-insert-data/_go_sql.mdx"
|
||||||
import GoInfluxLine from "../../07-develop/03-insert-data/_go_line.mdx"
|
import GoInfluxLine from "../../07-develop/03-insert-data/_go_line.mdx"
|
||||||
import GoOpenTSDBTelnet from "../../07-develop/03-insert-data/_go_opts_telnet.mdx"
|
import GoOpenTSDBTelnet from "../../07-develop/03-insert-data/_go_opts_telnet.mdx"
|
||||||
|
@ -176,6 +175,37 @@ func main() {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
<TabItem value="WebSocket" label="WebSocket connection">
|
||||||
|
|
||||||
|
_taosRestful_ implements Go's `database/sql/driver` interface via `http client`. You can use the [`database/sql`](https://golang.org/pkg/database/sql/) interface by simply introducing the driver (driver-go minimum version 3.0.2).
|
||||||
|
|
||||||
|
Use `taosWS` as `driverName` and use a correct [DSN](#DSN) as `dataSourceName` with the following parameters supported by the DSN.
|
||||||
|
|
||||||
|
* `writeTimeout` The timeout to send data via WebSocket.
|
||||||
|
* `readTimeout` The timeout to receive response data via WebSocket.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
```go
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"database/sql"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
_ "github.com/taosdata/driver-go/v3/taosWS"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
var taosUri = "root:taosdata@ws(localhost:6041)/"
|
||||||
|
taos, err := sql.Open("taosWS", taosUri)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("failed to connect TDengine, err:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
</TabItem>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|
||||||
## Usage examples
|
## Usage examples
|
||||||
|
@ -331,7 +361,7 @@ Creates consumer group.
|
||||||
|
|
||||||
* `func (c *Consumer) Subscribe(topics []string) error`
|
* `func (c *Consumer) Subscribe(topics []string) error`
|
||||||
|
|
||||||
Subscribes to a topic.
|
Subscribes to topics.
|
||||||
|
|
||||||
* `func (c *Consumer) Poll(timeout time.Duration) (*Result, error)`
|
* `func (c *Consumer) Poll(timeout time.Duration) (*Result, error)`
|
||||||
|
|
||||||
|
@ -409,6 +439,30 @@ Close consumer.
|
||||||
|
|
||||||
Closes the parameter binding.
|
Closes the parameter binding.
|
||||||
|
|
||||||
|
### Subscribe via WebSocket
|
||||||
|
|
||||||
|
* `func NewConsumer(config *Config) (*Consumer, error)`
|
||||||
|
|
||||||
|
Creates consumer group.
|
||||||
|
|
||||||
|
* `func (c *Consumer) Subscribe(topic []string) error`
|
||||||
|
|
||||||
|
Subscribes to topics.
|
||||||
|
|
||||||
|
* `func (c *Consumer) Poll(timeout time.Duration) (*Result, error)`
|
||||||
|
|
||||||
|
Polling information.
|
||||||
|
|
||||||
|
* `func (c *Consumer) Commit(messageID uint64) error`
|
||||||
|
|
||||||
|
Commit information.
|
||||||
|
|
||||||
|
* `func (c *Consumer) Close() error`
|
||||||
|
|
||||||
|
Close consumer.
|
||||||
|
|
||||||
|
For a complete example see [GitHub sample file](https://github.com/taosdata/driver-go/blob/3.0/examples/tmqoverws/main.go)
|
||||||
|
|
||||||
## API Reference
|
## API Reference
|
||||||
|
|
||||||
Full API see [driver-go documentation](https://pkg.go.dev/github.com/taosdata/driver-go/v3)
|
Full API see [driver-go documentation](https://pkg.go.dev/github.com/taosdata/driver-go/v3)
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
import PkgListV3 from "/components/PkgListV3";
|
||||||
|
|
||||||
|
1. Download the client installation package
|
||||||
|
|
||||||
|
<PkgListV3 type={8} sys="macOS" />
|
||||||
|
|
||||||
|
[All Downloads](../../releases/tdengine)
|
||||||
|
|
||||||
|
2. Execute the installer, select the default value as prompted, and complete the installation. If the installation is blocked, you can right-click or ctrl-click on the installation package and select `Open`.
|
||||||
|
3. configure taos.cfg
|
||||||
|
|
||||||
|
Edit `taos.cfg` file (full path is `/etc/taos/taos.cfg` by default), modify `firstEP` with actual TDengine server's End Point, for example `h1.tdengine.com:6030`
|
||||||
|
|
||||||
|
:::tip
|
||||||
|
|
||||||
|
1. If the computer does not run the TDengine service but installs the TDengine client driver, then you need to config `firstEP` in `taos.cfg` only, and there is no need to configure `FQDN`;
|
||||||
|
2. If you encounter the "Unable to resolve FQDN" error, please make sure the FQDN in the `/etc/hosts` file of the current computer is correctly configured, or the DNS service is correctly configured.
|
||||||
|
|
||||||
|
:::
|
|
@ -0,0 +1,15 @@
|
||||||
|
Execute TDengine CLI program `taos` directly from the macOS shell to connect to the TDengine service and enter the TDengine CLI interface, as shown in the following example.
|
||||||
|
|
||||||
|
```text
|
||||||
|
$ taos
|
||||||
|
|
||||||
|
taos> show databases;
|
||||||
|
name |
|
||||||
|
=================================
|
||||||
|
information_schema |
|
||||||
|
performance_schema |
|
||||||
|
db |
|
||||||
|
Query OK, 3 rows in database (0.019154s)
|
||||||
|
|
||||||
|
taos>
|
||||||
|
```
|
|
@ -10,12 +10,14 @@ import PkgListV3 from "/components/PkgListV3";
|
||||||
|
|
||||||
The default installation path is C:\TDengine, including the following files (directories).
|
The default installation path is C:\TDengine, including the following files (directories).
|
||||||
|
|
||||||
- _taos.exe_ : TDengine CLI command-line program
|
- _taos.exe_: TDengine CLI command-line program
|
||||||
- _cfg_ : configuration file directory
|
- _taosadapter.exe_: server-side executable that provides RESTful services and accepts writing requests from a variety of other softwares
|
||||||
|
- _taosBenchmark.exe_: TDengine testing tool
|
||||||
|
- _cfg_: configuration file directory
|
||||||
- _driver_: client driver dynamic link library
|
- _driver_: client driver dynamic link library
|
||||||
- _examples_: sample programs bash/C/C#/go/JDBC/Python/Node.js
|
- _examples_: sample programs bash/C/C#/go/JDBC/Python/Node.js
|
||||||
- _include_: header files
|
- _include_: header files
|
||||||
- _log_ : log file
|
- _log_: log file
|
||||||
- _unins000.exe_: uninstaller
|
- _unins000.exe_: uninstaller
|
||||||
|
|
||||||
4. configure taos.cfg
|
4. configure taos.cfg
|
||||||
|
|
|
@ -74,10 +74,12 @@ The different database framework specifications for various programming language
|
||||||
|
|
||||||
import Tabs from "@theme/Tabs";
|
import Tabs from "@theme/Tabs";
|
||||||
import TabItem from "@theme/TabItem";
|
import TabItem from "@theme/TabItem";
|
||||||
import InstallOnWindows from "./_linux_install.mdx";
|
import InstallOnLinux from "./_linux_install.mdx";
|
||||||
import InstallOnLinux from "./_windows_install.mdx";
|
import InstallOnWindows from "./_windows_install.mdx";
|
||||||
|
import InstallOnMacOS from "./_macos_install.mdx";
|
||||||
import VerifyWindows from "./_verify_windows.mdx";
|
import VerifyWindows from "./_verify_windows.mdx";
|
||||||
import VerifyLinux from "./_verify_linux.mdx";
|
import VerifyLinux from "./_verify_linux.mdx";
|
||||||
|
import VerifyMacOS from "./_verify_macos.mdx";
|
||||||
|
|
||||||
## Install Client Driver
|
## Install Client Driver
|
||||||
|
|
||||||
|
@ -90,10 +92,13 @@ The client driver needs to be installed if you use the native interface connecto
|
||||||
|
|
||||||
<Tabs defaultValue="linux" groupId="os">
|
<Tabs defaultValue="linux" groupId="os">
|
||||||
<TabItem value="linux" label="Linux">
|
<TabItem value="linux" label="Linux">
|
||||||
<InstallOnWindows />
|
<InstallOnLinux />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem value="windows" label="Windows">
|
<TabItem value="windows" label="Windows">
|
||||||
<InstallOnLinux />
|
<InstallOnWindows />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem value="macos" label="MacOS">
|
||||||
|
<InstallOnMacOS />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|
||||||
|
@ -108,5 +113,8 @@ After completing the above installation and configuration and you have confirmed
|
||||||
<TabItem value="windows" label="Windows">
|
<TabItem value="windows" label="Windows">
|
||||||
<VerifyWindows />
|
<VerifyWindows />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
<TabItem value="macos" label="MacOS">
|
||||||
|
<VerifyMacOS />
|
||||||
|
</TabItem>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|
||||||
|
|
|
@ -222,12 +222,12 @@ TDengine provides a variety of query processing functions for tables and STables
|
||||||
|
|
||||||
### Query Process
|
### Query Process
|
||||||
|
|
||||||
1. TDEngine client driver `taosc` parses the SQL statement and generates an abstract syntax tree (AST), then check and verify the AST according to metadata. During this stage, the metadata management module in `taosc` (Catalog) requests the metadata of the involved database and table from mnode and vnode.
|
1. TDengine client driver `taosc` parses the SQL statement and generates an abstract syntax tree (AST), then checks and verifies the AST according to metadata. During this stage, the metadata management module in `taosc` (Catalog) requests the metadata of the involved database and table from mnode and vnode.
|
||||||
2. After the verification passes, `taosc` generates distributed query plan and optimizes the plan.
|
2. After the verification passes, `taosc` generates distributed query plan and optimizes the plan.
|
||||||
3. `taosc` schedules the tasks according to configured query policy, a query sub-task may be scheduled to a vnode or qnode according to data relative and system load. Please be noted that both vnode and qnode are logic execution unit, the physical execution node is dnode (data node).
|
3. `taosc` schedules the tasks according to configured query policy, a query sub-task may be scheduled to a vnode or qnode according to data relative and system load. Please be noted that both vnode and qnode are logic execution unit, the physical execution node is dnode (data node).
|
||||||
4. When a dnode receives a query request, it identifies which vnode or qnode this query request is targeted, and forwards the request to the query execution queue of the identified vnode or qnode.
|
4. When a dnode receives a query request, it identifies which vnode or qnode this query request is targeted, and forwards the request to the query execution queue of the identified vnode or qnode.
|
||||||
5. The query execution thread of the vnode or qnode establishes fundamental query execution context, and executes the query, and notifies the client once obtaining a part of result data.
|
5. The query execution thread of the vnode or qnode establishes fundamental query execution context, and executes the query, and notifies the client once obtaining a part of result data.
|
||||||
6. TDengine client driver `taosc` will initiates next level query tasks or obtain the result simply.
|
6. TDengine client driver `taosc` will initiate next level query tasks or obtain the result simply.
|
||||||
|
|
||||||
### Aggregation by Time Axis, Downsampling, Interpolation
|
### Aggregation by Time Axis, Downsampling, Interpolation
|
||||||
|
|
||||||
|
|
|
@ -115,7 +115,7 @@ apt-get 方式只适用于 Debian 或 Ubuntu 系统。
|
||||||
|
|
||||||
1. 从列表中下载获得 pkg 安装程序;
|
1. 从列表中下载获得 pkg 安装程序;
|
||||||
<PkgListV3 type={7}/>
|
<PkgListV3 type={7}/>
|
||||||
2. 运行可执行程序来安装 TDengine。
|
2. 运行可执行程序来安装 TDengine。如果安装被阻止,可以右键或者按 Ctrl 点击安装包,选择 `打开`。
|
||||||
|
|
||||||
</TabItem>
|
</TabItem>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
@ -178,12 +178,20 @@ Active: inactive (dead)
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
|
## TDengine 命令行(CLI)
|
||||||
|
|
||||||
|
为便于检查 TDengine 的状态,执行数据库(Database)的各种即席(Ad Hoc)查询,TDengine 提供一命令行应用程序(以下简称为 TDengine CLI)taos。要进入 TDengine 命令行,您只要在终端执行 `taos` 即可。
|
||||||
|
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
|
||||||
<TabItem label="Windows 系统" value="windows">
|
<TabItem label="Windows 系统" value="windows">
|
||||||
|
|
||||||
安装后,在 `C:\TDengine` 目录下,运行 `taosd.exe` 来启动 TDengine 服务进程。
|
安装后,在 `C:\TDengine` 目录下,运行 `taosd.exe` 来启动 TDengine 服务进程。
|
||||||
|
|
||||||
|
## TDengine 命令行(CLI)
|
||||||
|
|
||||||
|
为便于检查 TDengine 的状态,执行数据库(Database)的各种即席(Ad Hoc)查询,TDengine 提供一命令行应用程序(以下简称为 TDengine CLI)taos。要进入 TDengine 命令行,您只要在终端执行 `taos` 即可。
|
||||||
|
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
|
||||||
<TabItem label="macOS 系统" value="macos">
|
<TabItem label="macOS 系统" value="macos">
|
||||||
|
@ -205,12 +213,12 @@ Active: inactive (dead)
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
</TabItem>
|
|
||||||
</Tabs>
|
|
||||||
|
|
||||||
## TDengine 命令行(CLI)
|
## TDengine 命令行(CLI)
|
||||||
|
|
||||||
为便于检查 TDengine 的状态,执行数据库(Database)的各种即席(Ad Hoc)查询,TDengine 提供一命令行应用程序(以下简称为 TDengine CLI)taos。要进入 TDengine 命令行,您只要在安装有 TDengine 的 Linux、macOS 终端执行 `taos` 即可,也可以在安装有 TDengine 的 Windows 终端的 C:\TDengine 目录下,运行 taos.exe 来启动 TDengine 命令行。
|
为便于检查 TDengine 的状态,执行数据库(Database)的各种即席(Ad Hoc)查询,TDengine 提供一命令行应用程序(以下简称为 TDengine CLI)taos。要进入 TDengine 命令行,您只要在 Windows 终端的 C:\TDengine 目录下,运行 taos.exe 来启动 TDengine 命令行。
|
||||||
|
|
||||||
|
</TabItem>
|
||||||
|
</Tabs>
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
taos
|
taos
|
||||||
|
|
|
@ -14,9 +14,11 @@ import ConnCSNative from "./_connect_cs.mdx";
|
||||||
import ConnC from "./_connect_c.mdx";
|
import ConnC from "./_connect_c.mdx";
|
||||||
import ConnR from "./_connect_r.mdx";
|
import ConnR from "./_connect_r.mdx";
|
||||||
import ConnPHP from "./_connect_php.mdx";
|
import ConnPHP from "./_connect_php.mdx";
|
||||||
import InstallOnWindows from "../../08-connector/_linux_install.mdx";
|
import InstallOnLinux from "../../08-connector/_linux_install.mdx";
|
||||||
import InstallOnLinux from "../../08-connector/_windows_install.mdx";
|
import InstallOnWindows from "../../08-connector/_windows_install.mdx";
|
||||||
|
import InstallOnMacOS from "../../08-connector/_macos_install.mdx";
|
||||||
import VerifyLinux from "../../08-connector/_verify_linux.mdx";
|
import VerifyLinux from "../../08-connector/_verify_linux.mdx";
|
||||||
|
import VerifyMacOS from "../../08-connector/_verify_macos.mdx";
|
||||||
import VerifyWindows from "../../08-connector/_verify_windows.mdx";
|
import VerifyWindows from "../../08-connector/_verify_windows.mdx";
|
||||||
|
|
||||||
TDengine 提供了丰富的应用程序开发接口,为了便于用户快速开发自己的应用,TDengine 支持了多种编程语言的连接器,其中官方连接器包括支持 C/C++、Java、Python、Go、Node.js、C#、Rust、Lua(社区贡献)和 PHP (社区贡献)的连接器。这些连接器支持使用原生接口(taosc)和 REST 接口(部分语言暂不支持)连接 TDengine 集群。社区开发者也贡献了多个非官方连接器,例如 ADO.NET 连接器、Lua 连接器和 PHP 连接器。
|
TDengine 提供了丰富的应用程序开发接口,为了便于用户快速开发自己的应用,TDengine 支持了多种编程语言的连接器,其中官方连接器包括支持 C/C++、Java、Python、Go、Node.js、C#、Rust、Lua(社区贡献)和 PHP (社区贡献)的连接器。这些连接器支持使用原生接口(taosc)和 REST 接口(部分语言暂不支持)连接 TDengine 集群。社区开发者也贡献了多个非官方连接器,例如 ADO.NET 连接器、Lua 连接器和 PHP 连接器。
|
||||||
|
@ -43,10 +45,13 @@ TDengine 提供了丰富的应用程序开发接口,为了便于用户快速
|
||||||
|
|
||||||
<Tabs defaultValue="linux" groupId="os">
|
<Tabs defaultValue="linux" groupId="os">
|
||||||
<TabItem value="linux" label="Linux">
|
<TabItem value="linux" label="Linux">
|
||||||
<InstallOnWindows />
|
<InstallOnLinux />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem value="windows" label="Windows">
|
<TabItem value="windows" label="Windows">
|
||||||
<InstallOnLinux />
|
<InstallOnWindows />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem value="macos" label="macOS">
|
||||||
|
<InstallOnMacOS />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|
||||||
|
@ -61,6 +66,9 @@ TDengine 提供了丰富的应用程序开发接口,为了便于用户快速
|
||||||
<TabItem value="windows" label="Windows">
|
<TabItem value="windows" label="Windows">
|
||||||
<VerifyWindows />
|
<VerifyWindows />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
<TabItem value="macos" label="macOS">
|
||||||
|
<VerifyMacOS />
|
||||||
|
</TabItem>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|
||||||
## 安装连接器
|
## 安装连接器
|
||||||
|
|
|
@ -177,6 +177,37 @@ func main() {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
<TabItem value="WebSocket" label="WebSocket 连接">
|
||||||
|
|
||||||
|
_taosWS_ 通过 `WebSocket` 实现了 Go 的 `database/sql/driver` 接口。只需要引入驱动(driver-go 最低版本 3.0.2)就可以使用[`database/sql`](https://golang.org/pkg/database/sql/)的接口。
|
||||||
|
|
||||||
|
使用 `taosWS` 作为 `driverName` 并且使用一个正确的 [DSN](#DSN) 作为 `dataSourceName`,DSN 支持的参数:
|
||||||
|
|
||||||
|
* `writeTimeout` 通过 WebSocket 发送数据的超时时间。
|
||||||
|
* `readTimeout` 通过 WebSocket 接收响应数据的超时时间。
|
||||||
|
|
||||||
|
示例:
|
||||||
|
|
||||||
|
```go
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"database/sql"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
_ "github.com/taosdata/driver-go/v3/taosWS"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
var taosUri = "root:taosdata@ws(localhost:6041)/"
|
||||||
|
taos, err := sql.Open("taosWS", taosUri)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("failed to connect TDengine, err:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
</TabItem>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|
||||||
## 使用示例
|
## 使用示例
|
||||||
|
@ -410,6 +441,30 @@ func main() {
|
||||||
|
|
||||||
结束参数绑定。
|
结束参数绑定。
|
||||||
|
|
||||||
|
### 通过 WebSocket 订阅
|
||||||
|
|
||||||
|
* `func NewConsumer(config *Config) (*Consumer, error)`
|
||||||
|
|
||||||
|
创建消费者。
|
||||||
|
|
||||||
|
* `func (c *Consumer) Subscribe(topic []string) error`
|
||||||
|
|
||||||
|
订阅主题。
|
||||||
|
|
||||||
|
* `func (c *Consumer) Poll(timeout time.Duration) (*Result, error)`
|
||||||
|
|
||||||
|
轮询消息。
|
||||||
|
|
||||||
|
* `func (c *Consumer) Commit(messageID uint64) error`
|
||||||
|
|
||||||
|
提交消息。
|
||||||
|
|
||||||
|
* `func (c *Consumer) Close() error`
|
||||||
|
|
||||||
|
关闭消费者。
|
||||||
|
|
||||||
|
完整订阅示例参见 [GitHub 示例文件](https://github.com/taosdata/driver-go/blob/3.0/examples/tmqoverws/main.go)
|
||||||
|
|
||||||
## API 参考
|
## API 参考
|
||||||
|
|
||||||
全部 API 见 [driver-go 文档](https://pkg.go.dev/github.com/taosdata/driver-go/v3)
|
全部 API 见 [driver-go 文档](https://pkg.go.dev/github.com/taosdata/driver-go/v3)
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
import PkgListV3 from "/components/PkgListV3";
|
||||||
|
|
||||||
|
1. 下载客户端安装包
|
||||||
|
|
||||||
|
<PkgListV3 type={8} sys="macOS" />
|
||||||
|
|
||||||
|
[所有下载](../../releases/tdengine)
|
||||||
|
|
||||||
|
2. 执行安装程序,按提示选择默认值,完成安装。如果安装被阻止,可以右键或者按 Ctrl 点击安装包,选择 `打开`。
|
||||||
|
3. 配置 taos.cfg
|
||||||
|
|
||||||
|
编辑 `taos.cfg` 文件(默认路径/etc/taos/taos.cfg),将 `firstEP` 修改为 TDengine 服务器的 End Point,例如:`h1.tdengine.com:6030`
|
||||||
|
|
||||||
|
:::tip
|
||||||
|
|
||||||
|
1. 如本机没有部署 TDengine 服务,仅安装了应用驱动,则 `taos.cfg` 中仅需配置 `firstEP`,无需在本机配置 `FQDN`。
|
||||||
|
2. 为防止与服务器端连接时出现“Unable to resolve FQDN”错误,建议确认本机的 `/etc/hosts` 文件已经配置了服务器正确的 FQDN 值,或配置好了 DNS 服务。
|
||||||
|
|
||||||
|
:::
|
|
@ -0,0 +1,15 @@
|
||||||
|
在 macOS shell 下直接执行 `taos` 连接到 TDengine 服务,进入到 TDengine CLI 界面,示例如下:
|
||||||
|
|
||||||
|
```text
|
||||||
|
$ taos
|
||||||
|
|
||||||
|
taos> show databases;
|
||||||
|
name |
|
||||||
|
=================================
|
||||||
|
information_schema |
|
||||||
|
performance_schema |
|
||||||
|
db |
|
||||||
|
Query OK, 3 rows in database (0.019154s)
|
||||||
|
|
||||||
|
taos>
|
||||||
|
```
|
|
@ -12,6 +12,8 @@ import PkgListV3 from "/components/PkgListV3";
|
||||||
默认安装路径为:C:\TDengine,其中包括以下文件(目录):
|
默认安装路径为:C:\TDengine,其中包括以下文件(目录):
|
||||||
|
|
||||||
- _taos.exe_:TDengine CLI 命令行程序
|
- _taos.exe_:TDengine CLI 命令行程序
|
||||||
|
- _taosadapter.exe_:提供 RESTful 服务和接受其他多种软件写入请求的服务端可执行文件
|
||||||
|
- _taosBenchmark.exe_:TDengine 测试程序
|
||||||
- _cfg_ : 配置文件目录
|
- _cfg_ : 配置文件目录
|
||||||
- _driver_: 应用驱动动态链接库
|
- _driver_: 应用驱动动态链接库
|
||||||
- _examples_: 示例程序 bash/C/C#/go/JDBC/Python/Node.js
|
- _examples_: 示例程序 bash/C/C#/go/JDBC/Python/Node.js
|
||||||
|
|
|
@ -74,10 +74,12 @@ TDengine 版本更新往往会增加新的功能特性,列表中的连接器
|
||||||
|
|
||||||
import Tabs from "@theme/Tabs";
|
import Tabs from "@theme/Tabs";
|
||||||
import TabItem from "@theme/TabItem";
|
import TabItem from "@theme/TabItem";
|
||||||
import InstallOnWindows from "./_linux_install.mdx";
|
import InstallOnLinux from "./_linux_install.mdx";
|
||||||
import InstallOnLinux from "./_windows_install.mdx";
|
import InstallOnWindows from "./_windows_install.mdx";
|
||||||
|
import InstallOnMacOS from "./_macos_install.mdx";
|
||||||
import VerifyWindows from "./_verify_windows.mdx";
|
import VerifyWindows from "./_verify_windows.mdx";
|
||||||
import VerifyLinux from "./_verify_linux.mdx";
|
import VerifyLinux from "./_verify_linux.mdx";
|
||||||
|
import VerifyMacOS from "./_verify_macos.mdx";
|
||||||
|
|
||||||
## 安装客户端驱动
|
## 安装客户端驱动
|
||||||
|
|
||||||
|
@ -90,10 +92,13 @@ import VerifyLinux from "./_verify_linux.mdx";
|
||||||
|
|
||||||
<Tabs defaultValue="linux" groupId="os">
|
<Tabs defaultValue="linux" groupId="os">
|
||||||
<TabItem value="linux" label="Linux">
|
<TabItem value="linux" label="Linux">
|
||||||
<InstallOnWindows />
|
<InstallOnLinux />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem value="windows" label="Windows">
|
<TabItem value="windows" label="Windows">
|
||||||
<InstallOnLinux />
|
<InstallOnWindows />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem value="macos" label="MacOS">
|
||||||
|
<InstallOnMacOS />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|
||||||
|
@ -108,5 +113,8 @@ import VerifyLinux from "./_verify_linux.mdx";
|
||||||
<TabItem value="windows" label="Windows">
|
<TabItem value="windows" label="Windows">
|
||||||
<VerifyWindows />
|
<VerifyWindows />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
<TabItem value="macos" label="MacOS">
|
||||||
|
<VerifyMacOS />
|
||||||
|
</TabItem>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|
||||||
|
|
|
@ -946,7 +946,7 @@ MIN(expr)
|
||||||
MODE(expr)
|
MODE(expr)
|
||||||
```
|
```
|
||||||
|
|
||||||
**功能说明**:返回出现频率最高的值,若存在多个频率相同的最高值,输出NULL。
|
**功能说明**:返回出现频率最高的值,若存在多个频率相同的最高值,则随机输出其中某个值。
|
||||||
|
|
||||||
**返回数据类型**:与输入数据类型一致。
|
**返回数据类型**:与输入数据类型一致。
|
||||||
|
|
||||||
|
|
|
@ -198,6 +198,7 @@ DLL_EXPORT const void *taos_get_raw_block(TAOS_RES *res);
|
||||||
|
|
||||||
DLL_EXPORT int taos_load_table_info(TAOS *taos, const char *tableNameList);
|
DLL_EXPORT int taos_load_table_info(TAOS *taos, const char *tableNameList);
|
||||||
DLL_EXPORT TAOS_RES *taos_schemaless_insert(TAOS *taos, char *lines[], int numLines, int protocol, int precision);
|
DLL_EXPORT TAOS_RES *taos_schemaless_insert(TAOS *taos, char *lines[], int numLines, int protocol, int precision);
|
||||||
|
DLL_EXPORT TAOS_RES *taos_schemaless_insert_raw(TAOS* taos, char* lines, int len, int32_t *totalRows, int protocol, int precision);
|
||||||
|
|
||||||
/* --------------------------TMQ INTERFACE------------------------------- */
|
/* --------------------------TMQ INTERFACE------------------------------- */
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@ extern "C" {
|
||||||
#define TSDB_INS_TABLE_MNODES "ins_mnodes"
|
#define TSDB_INS_TABLE_MNODES "ins_mnodes"
|
||||||
#define TSDB_INS_TABLE_MODULES "ins_modules"
|
#define TSDB_INS_TABLE_MODULES "ins_modules"
|
||||||
#define TSDB_INS_TABLE_QNODES "ins_qnodes"
|
#define TSDB_INS_TABLE_QNODES "ins_qnodes"
|
||||||
#define TSDB_INS_TABLE_BNODES "ins_bnodes"
|
#define TSDB_INS_TABLE_BNODES "ins_bnodes" // no longer used
|
||||||
#define TSDB_INS_TABLE_SNODES "ins_snodes"
|
#define TSDB_INS_TABLE_SNODES "ins_snodes"
|
||||||
#define TSDB_INS_TABLE_CLUSTER "ins_cluster"
|
#define TSDB_INS_TABLE_CLUSTER "ins_cluster"
|
||||||
#define TSDB_INS_TABLE_DATABASES "ins_databases"
|
#define TSDB_INS_TABLE_DATABASES "ins_databases"
|
||||||
|
|
|
@ -44,12 +44,17 @@ enum {
|
||||||
)
|
)
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
typedef struct {
|
typedef struct SWinKey {
|
||||||
uint64_t groupId;
|
uint64_t groupId;
|
||||||
TSKEY ts;
|
TSKEY ts;
|
||||||
} SWinKey;
|
} SWinKey;
|
||||||
|
|
||||||
static inline int sWinKeyCmprImpl(const void* pKey1, const void* pKey2) {
|
typedef struct SSessionKey {
|
||||||
|
STimeWindow win;
|
||||||
|
uint64_t groupId;
|
||||||
|
} SSessionKey;
|
||||||
|
|
||||||
|
static inline int winKeyCmprImpl(const void* pKey1, const void* pKey2) {
|
||||||
SWinKey* pWin1 = (SWinKey*)pKey1;
|
SWinKey* pWin1 = (SWinKey*)pKey1;
|
||||||
SWinKey* pWin2 = (SWinKey*)pKey2;
|
SWinKey* pWin2 = (SWinKey*)pKey2;
|
||||||
|
|
||||||
|
@ -69,7 +74,7 @@ static inline int sWinKeyCmprImpl(const void* pKey1, const void* pKey2) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int winKeyCmpr(const void* pKey1, int kLen1, const void* pKey2, int kLen2) {
|
static inline int winKeyCmpr(const void* pKey1, int kLen1, const void* pKey2, int kLen2) {
|
||||||
return sWinKeyCmprImpl(pKey1, pKey2);
|
return winKeyCmprImpl(pKey1, pKey2);
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
|
@ -51,7 +51,6 @@ extern int32_t tsMnodeShmSize;
|
||||||
extern int32_t tsVnodeShmSize;
|
extern int32_t tsVnodeShmSize;
|
||||||
extern int32_t tsQnodeShmSize;
|
extern int32_t tsQnodeShmSize;
|
||||||
extern int32_t tsSnodeShmSize;
|
extern int32_t tsSnodeShmSize;
|
||||||
extern int32_t tsBnodeShmSize;
|
|
||||||
extern int32_t tsNumOfShmThreads;
|
extern int32_t tsNumOfShmThreads;
|
||||||
|
|
||||||
// queue & threads
|
// queue & threads
|
||||||
|
|
|
@ -95,7 +95,7 @@ typedef enum _mgmt_table {
|
||||||
TSDB_MGMT_TABLE_MODULE,
|
TSDB_MGMT_TABLE_MODULE,
|
||||||
TSDB_MGMT_TABLE_QNODE,
|
TSDB_MGMT_TABLE_QNODE,
|
||||||
TSDB_MGMT_TABLE_SNODE,
|
TSDB_MGMT_TABLE_SNODE,
|
||||||
TSDB_MGMT_TABLE_BNODE,
|
TSDB_MGMT_TABLE_BNODE, // no longer used
|
||||||
TSDB_MGMT_TABLE_CLUSTER,
|
TSDB_MGMT_TABLE_CLUSTER,
|
||||||
TSDB_MGMT_TABLE_DB,
|
TSDB_MGMT_TABLE_DB,
|
||||||
TSDB_MGMT_TABLE_FUNC,
|
TSDB_MGMT_TABLE_FUNC,
|
||||||
|
@ -1485,11 +1485,10 @@ int32_t tDeserializeSDCfgDnodeReq(void* buf, int32_t bufLen, SDCfgDnodeReq* pReq
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int32_t dnodeId;
|
int32_t dnodeId;
|
||||||
} SMCreateMnodeReq, SMDropMnodeReq, SDDropMnodeReq, SMCreateQnodeReq, SMDropQnodeReq, SDCreateQnodeReq, SDDropQnodeReq,
|
} SMCreateMnodeReq, SMDropMnodeReq, SDDropMnodeReq, SMCreateQnodeReq, SMDropQnodeReq, SDCreateQnodeReq, SDDropQnodeReq,
|
||||||
SMCreateSnodeReq, SMDropSnodeReq, SDCreateSnodeReq, SDDropSnodeReq, SMCreateBnodeReq, SMDropBnodeReq,
|
SMCreateSnodeReq, SMDropSnodeReq, SDCreateSnodeReq, SDDropSnodeReq;
|
||||||
SDCreateBnodeReq, SDDropBnodeReq;
|
|
||||||
|
|
||||||
int32_t tSerializeSCreateDropMQSBNodeReq(void* buf, int32_t bufLen, SMCreateQnodeReq* pReq);
|
int32_t tSerializeSCreateDropMQSNodeReq(void* buf, int32_t bufLen, SMCreateQnodeReq* pReq);
|
||||||
int32_t tDeserializeSCreateDropMQSBNodeReq(void* buf, int32_t bufLen, SMCreateQnodeReq* pReq);
|
int32_t tDeserializeSCreateDropMQSNodeReq(void* buf, int32_t bufLen, SMCreateQnodeReq* pReq);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int8_t replica;
|
int8_t replica;
|
||||||
|
|
|
@ -74,8 +74,8 @@ enum {
|
||||||
TD_DEF_MSG_TYPE(TDMT_DND_DROP_QNODE, "dnode-drop-qnode", NULL, NULL)
|
TD_DEF_MSG_TYPE(TDMT_DND_DROP_QNODE, "dnode-drop-qnode", NULL, NULL)
|
||||||
TD_DEF_MSG_TYPE(TDMT_DND_CREATE_SNODE, "dnode-create-snode", NULL, NULL)
|
TD_DEF_MSG_TYPE(TDMT_DND_CREATE_SNODE, "dnode-create-snode", NULL, NULL)
|
||||||
TD_DEF_MSG_TYPE(TDMT_DND_DROP_SNODE, "dnode-drop-snode", NULL, NULL)
|
TD_DEF_MSG_TYPE(TDMT_DND_DROP_SNODE, "dnode-drop-snode", NULL, NULL)
|
||||||
TD_DEF_MSG_TYPE(TDMT_DND_CREATE_BNODE, "dnode-create-bnode", NULL, NULL)
|
TD_DEF_MSG_TYPE(TDMT_DND_CREATE_BNODE, "dnode-create-bnode", NULL, NULL) // no longer used
|
||||||
TD_DEF_MSG_TYPE(TDMT_DND_DROP_BNODE, "dnode-drop-bnode", NULL, NULL)
|
TD_DEF_MSG_TYPE(TDMT_DND_DROP_BNODE, "dnode-drop-bnode", NULL, NULL) // no longer used
|
||||||
TD_DEF_MSG_TYPE(TDMT_DND_CREATE_VNODE, "create-vnode", NULL, NULL)
|
TD_DEF_MSG_TYPE(TDMT_DND_CREATE_VNODE, "create-vnode", NULL, NULL)
|
||||||
TD_DEF_MSG_TYPE(TDMT_DND_DROP_VNODE, "drop-vnode", NULL, NULL)
|
TD_DEF_MSG_TYPE(TDMT_DND_DROP_VNODE, "drop-vnode", NULL, NULL)
|
||||||
TD_DEF_MSG_TYPE(TDMT_DND_SERVER_STATUS, "server-status", NULL, NULL)
|
TD_DEF_MSG_TYPE(TDMT_DND_SERVER_STATUS, "server-status", NULL, NULL)
|
||||||
|
@ -107,9 +107,9 @@ enum {
|
||||||
TD_DEF_MSG_TYPE(TDMT_MND_CREATE_SNODE, "create-snode", NULL, NULL)
|
TD_DEF_MSG_TYPE(TDMT_MND_CREATE_SNODE, "create-snode", NULL, NULL)
|
||||||
TD_DEF_MSG_TYPE(TDMT_MND_ALTER_SNODE, "alter-snode", NULL, NULL)
|
TD_DEF_MSG_TYPE(TDMT_MND_ALTER_SNODE, "alter-snode", NULL, NULL)
|
||||||
TD_DEF_MSG_TYPE(TDMT_MND_DROP_SNODE, "drop-snode", NULL, NULL)
|
TD_DEF_MSG_TYPE(TDMT_MND_DROP_SNODE, "drop-snode", NULL, NULL)
|
||||||
TD_DEF_MSG_TYPE(TDMT_MND_CREATE_BNODE, "create-bnode", NULL, NULL)
|
TD_DEF_MSG_TYPE(TDMT_MND_CREATE_BNODE, "create-bnode", NULL, NULL) // no longer used
|
||||||
TD_DEF_MSG_TYPE(TDMT_MND_ALTER_BNODE, "alter-bnode", NULL, NULL)
|
TD_DEF_MSG_TYPE(TDMT_MND_ALTER_BNODE, "alter-bnode", NULL, NULL) // no longer used
|
||||||
TD_DEF_MSG_TYPE(TDMT_MND_DROP_BNODE, "drop-bnode", NULL, NULL)
|
TD_DEF_MSG_TYPE(TDMT_MND_DROP_BNODE, "drop-bnode", NULL, NULL) // no longer used
|
||||||
TD_DEF_MSG_TYPE(TDMT_MND_CREATE_DB, "create-db", NULL, NULL)
|
TD_DEF_MSG_TYPE(TDMT_MND_CREATE_DB, "create-db", NULL, NULL)
|
||||||
TD_DEF_MSG_TYPE(TDMT_MND_DROP_DB, "drop-db", NULL, NULL)
|
TD_DEF_MSG_TYPE(TDMT_MND_DROP_DB, "drop-db", NULL, NULL)
|
||||||
TD_DEF_MSG_TYPE(TDMT_MND_USE_DB, "use-db", NULL, NULL)
|
TD_DEF_MSG_TYPE(TDMT_MND_USE_DB, "use-db", NULL, NULL)
|
||||||
|
@ -243,7 +243,6 @@ enum {
|
||||||
TD_DEF_MSG_TYPE(TDMT_MON_VM_INFO, "monitor-vinfo", NULL, NULL)
|
TD_DEF_MSG_TYPE(TDMT_MON_VM_INFO, "monitor-vinfo", NULL, NULL)
|
||||||
TD_DEF_MSG_TYPE(TDMT_MON_QM_INFO, "monitor-qinfo", NULL, NULL)
|
TD_DEF_MSG_TYPE(TDMT_MON_QM_INFO, "monitor-qinfo", NULL, NULL)
|
||||||
TD_DEF_MSG_TYPE(TDMT_MON_SM_INFO, "monitor-sinfo", NULL, NULL)
|
TD_DEF_MSG_TYPE(TDMT_MON_SM_INFO, "monitor-sinfo", NULL, NULL)
|
||||||
TD_DEF_MSG_TYPE(TDMT_MON_BM_INFO, "monitor-binfo", NULL, NULL)
|
|
||||||
TD_DEF_MSG_TYPE(TDMT_MON_VM_LOAD, "monitor-vload", NULL, NULL)
|
TD_DEF_MSG_TYPE(TDMT_MON_VM_LOAD, "monitor-vload", NULL, NULL)
|
||||||
TD_DEF_MSG_TYPE(TDMT_MON_MM_LOAD, "monitor-mload", NULL, NULL)
|
TD_DEF_MSG_TYPE(TDMT_MON_MM_LOAD, "monitor-mload", NULL, NULL)
|
||||||
TD_DEF_MSG_TYPE(TDMT_MON_QM_LOAD, "monitor-qload", NULL, NULL)
|
TD_DEF_MSG_TYPE(TDMT_MON_QM_LOAD, "monitor-qload", NULL, NULL)
|
||||||
|
|
|
@ -1,77 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can use, redistribute, and/or modify
|
|
||||||
* it under the terms of the GNU Affero General Public License, version 3
|
|
||||||
* or later ("AGPL"), as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _TD_BNODE_H_
|
|
||||||
#define _TD_BNODE_H_
|
|
||||||
|
|
||||||
#include "tmsgcb.h"
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* ------------------------ TYPES EXPOSED ------------------------ */
|
|
||||||
typedef struct SBnode SBnode;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
#ifdef WINDOWS
|
|
||||||
size_t avoidCompilationErrors;
|
|
||||||
#endif
|
|
||||||
} SBnodeLoad;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
SMsgCb msgCb;
|
|
||||||
} SBnodeOpt;
|
|
||||||
|
|
||||||
/* ------------------------ SBnode ------------------------ */
|
|
||||||
/**
|
|
||||||
* @brief Start one Bnode in Dnode.
|
|
||||||
*
|
|
||||||
* @param path Path of the bnode.
|
|
||||||
* @param pOption Option of the bnode.
|
|
||||||
* @return SBnode* The bnode object.
|
|
||||||
*/
|
|
||||||
SBnode *bndOpen(const char *path, const SBnodeOpt *pOption);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Stop Bnode in Dnode.
|
|
||||||
*
|
|
||||||
* @param pBnode The bnode object to close.
|
|
||||||
*/
|
|
||||||
void bndClose(SBnode *pBnode);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Get the statistical information of Bnode
|
|
||||||
*
|
|
||||||
* @param pBnode The bnode object.
|
|
||||||
* @param pLoad Statistics of the bnode.
|
|
||||||
* @return int32_t 0 for success, -1 for failure.
|
|
||||||
*/
|
|
||||||
int32_t bndGetLoad(SBnode *pBnode, SBnodeLoad *pLoad);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Process a query message.
|
|
||||||
*
|
|
||||||
* @param pBnode The bnode object.
|
|
||||||
* @param pMsgs The array of SRpcMsg
|
|
||||||
* @return int32_t 0 for success, -1 for failure
|
|
||||||
*/
|
|
||||||
int32_t bndProcessWMsgs(SBnode *pBnode, SArray *pMsgs);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /*_TD_BNODE_H_*/
|
|
|
@ -80,7 +80,6 @@ typedef struct {
|
||||||
int8_t has_mnode;
|
int8_t has_mnode;
|
||||||
int8_t has_qnode;
|
int8_t has_qnode;
|
||||||
int8_t has_snode;
|
int8_t has_snode;
|
||||||
int8_t has_bnode;
|
|
||||||
SMonDiskDesc logdir;
|
SMonDiskDesc logdir;
|
||||||
SMonDiskDesc tempdir;
|
SMonDiskDesc tempdir;
|
||||||
} SMonDnodeInfo;
|
} SMonDnodeInfo;
|
||||||
|
|
|
@ -525,7 +525,7 @@ typedef struct SDataInserterNode {
|
||||||
SDataSinkNode sink;
|
SDataSinkNode sink;
|
||||||
int32_t numOfTables;
|
int32_t numOfTables;
|
||||||
uint32_t size;
|
uint32_t size;
|
||||||
char* pData;
|
void* pData;
|
||||||
} SDataInserterNode;
|
} SDataInserterNode;
|
||||||
|
|
||||||
typedef struct SQueryInserterNode {
|
typedef struct SQueryInserterNode {
|
||||||
|
|
|
@ -356,7 +356,7 @@ typedef struct SVgDataBlocks {
|
||||||
SVgroupInfo vg;
|
SVgroupInfo vg;
|
||||||
int32_t numOfTables; // number of tables in current submit block
|
int32_t numOfTables; // number of tables in current submit block
|
||||||
uint32_t size;
|
uint32_t size;
|
||||||
char* pData; // SMsgDesc + SSubmitReq + SSubmitBlk + ...
|
void* pData; // SMsgDesc + SSubmitReq + SSubmitBlk + ...
|
||||||
} SVgDataBlocks;
|
} SVgDataBlocks;
|
||||||
|
|
||||||
typedef struct SVnodeModifOpStmt {
|
typedef struct SVnodeModifOpStmt {
|
||||||
|
|
|
@ -25,6 +25,8 @@ extern "C" {
|
||||||
|
|
||||||
typedef struct SStreamTask SStreamTask;
|
typedef struct SStreamTask SStreamTask;
|
||||||
|
|
||||||
|
typedef bool (*state_key_cmpr_fn)(void* pKey1, void* pKey2);
|
||||||
|
|
||||||
// incremental state storage
|
// incremental state storage
|
||||||
typedef struct {
|
typedef struct {
|
||||||
SStreamTask* pOwner;
|
SStreamTask* pOwner;
|
||||||
|
@ -32,6 +34,7 @@ typedef struct {
|
||||||
TTB* pStateDb;
|
TTB* pStateDb;
|
||||||
TTB* pFuncStateDb;
|
TTB* pFuncStateDb;
|
||||||
TTB* pFillStateDb; // todo refactor
|
TTB* pFillStateDb; // todo refactor
|
||||||
|
TTB* pSessionStateDb;
|
||||||
TXN txn;
|
TXN txn;
|
||||||
int32_t number;
|
int32_t number;
|
||||||
} SStreamState;
|
} SStreamState;
|
||||||
|
@ -57,6 +60,19 @@ int32_t streamStateDel(SStreamState* pState, const SWinKey* key);
|
||||||
int32_t streamStateClear(SStreamState* pState);
|
int32_t streamStateClear(SStreamState* pState);
|
||||||
void streamStateSetNumber(SStreamState* pState, int32_t number);
|
void streamStateSetNumber(SStreamState* pState, int32_t number);
|
||||||
|
|
||||||
|
int32_t streamStateSessionAddIfNotExist(SStreamState* pState, SSessionKey* key, void** pVal, int32_t* pVLen);
|
||||||
|
int32_t streamStateSessionPut(SStreamState* pState, const SSessionKey* key, const void* value, int32_t vLen);
|
||||||
|
int32_t streamStateSessionGet(SStreamState* pState, SSessionKey* key, void** pVal, int32_t* pVLen);
|
||||||
|
int32_t streamStateSessionDel(SStreamState* pState, const SSessionKey* key);
|
||||||
|
int32_t streamStateSessionClear(SStreamState* pState);
|
||||||
|
int32_t streamStateSessionGetKVByCur(SStreamStateCur* pCur, SSessionKey* pKey, const void** pVal, int32_t* pVLen);
|
||||||
|
int32_t streamStateStateAddIfNotExist(SStreamState* pState, SSessionKey* key, char* pKeyData, int32_t keyDataLen,
|
||||||
|
state_key_cmpr_fn fn, void** pVal, int32_t* pVLen);
|
||||||
|
|
||||||
|
SStreamStateCur* streamStateSessionSeekKeyNext(SStreamState* pState, const SSessionKey* key);
|
||||||
|
SStreamStateCur* streamStateSessionSeekKeyPrev(SStreamState* pState, const SSessionKey* key);
|
||||||
|
SStreamStateCur* streamStateSessionGetCur(SStreamState* pState, const SSessionKey* key);
|
||||||
|
|
||||||
int32_t streamStateFillPut(SStreamState* pState, const SWinKey* key, const void* value, int32_t vLen);
|
int32_t streamStateFillPut(SStreamState* pState, const SWinKey* key, const void* value, int32_t vLen);
|
||||||
int32_t streamStateFillGet(SStreamState* pState, const SWinKey* key, void** pVal, int32_t* pVLen);
|
int32_t streamStateFillGet(SStreamState* pState, const SWinKey* key, void** pVal, int32_t* pVLen);
|
||||||
int32_t streamStateFillDel(SStreamState* pState, const SWinKey* key);
|
int32_t streamStateFillDel(SStreamState* pState, const SWinKey* key);
|
||||||
|
|
|
@ -483,7 +483,6 @@ enum {
|
||||||
#define QNODE_HANDLE -1
|
#define QNODE_HANDLE -1
|
||||||
#define SNODE_HANDLE -2
|
#define SNODE_HANDLE -2
|
||||||
#define VNODE_HANDLE -3
|
#define VNODE_HANDLE -3
|
||||||
#define BNODE_HANDLE -4
|
|
||||||
#define CLIENT_HANDLE -5
|
#define CLIENT_HANDLE -5
|
||||||
|
|
||||||
#define TSDB_CONFIG_OPTION_LEN 32
|
#define TSDB_CONFIG_OPTION_LEN 32
|
||||||
|
@ -498,6 +497,7 @@ enum {
|
||||||
#define MAX_NUM_STR_SIZE 40
|
#define MAX_NUM_STR_SIZE 40
|
||||||
|
|
||||||
#define MAX_META_MSG_IN_BATCH 1048576
|
#define MAX_META_MSG_IN_BATCH 1048576
|
||||||
|
#define MAX_META_BATCH_RSP_SIZE (1 * 1048576 * 1024)
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>Label</key>
|
||||||
|
<string>com.tdengine.taosadapter</string>
|
||||||
|
<key>ProgramArguments</key>
|
||||||
|
<array>
|
||||||
|
<string>/usr/local/bin/taosadapter</string>
|
||||||
|
</array>
|
||||||
|
<key>ProcessType</key>
|
||||||
|
<string>Interactive</string>
|
||||||
|
<key>Disabled</key>
|
||||||
|
<false/>
|
||||||
|
<key>RunAtLoad</key>
|
||||||
|
<false/>
|
||||||
|
<key>LaunchOnlyOnce</key>
|
||||||
|
<false/>
|
||||||
|
<key>SessionCreate</key>
|
||||||
|
<true/>
|
||||||
|
<key>ExitTimeOut</key>
|
||||||
|
<integer>600</integer>
|
||||||
|
<key>KeepAlive</key>
|
||||||
|
<dict>
|
||||||
|
<key>SuccessfulExit</key>
|
||||||
|
<false/>
|
||||||
|
<key>AfterInitialDemand</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
<key>Program</key>
|
||||||
|
<string>/usr/local/bin/taosadapter</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
|
@ -69,7 +69,7 @@ prompt_force=0
|
||||||
|
|
||||||
initd_mod=0
|
initd_mod=0
|
||||||
service_mod=2
|
service_mod=2
|
||||||
if pidof systemd &>/dev/null; then
|
if ps aux | grep -v grep | grep systemd &>/dev/null; then
|
||||||
service_mod=0
|
service_mod=0
|
||||||
elif $(which service &>/dev/null); then
|
elif $(which service &>/dev/null); then
|
||||||
service_mod=1
|
service_mod=1
|
||||||
|
@ -575,11 +575,11 @@ function install_web() {
|
||||||
|
|
||||||
|
|
||||||
function clean_service_on_sysvinit() {
|
function clean_service_on_sysvinit() {
|
||||||
if pidof ${serverName} &>/dev/null; then
|
if ps aux | grep -v grep | grep ${serverName} &>/dev/null; then
|
||||||
${csudo}service ${serverName} stop || :
|
${csudo}service ${serverName} stop || :
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if pidof tarbitrator &>/dev/null; then
|
if ps aux | grep -v grep | grep tarbitrator &>/dev/null; then
|
||||||
${csudo}service tarbitratord stop || :
|
${csudo}service tarbitratord stop || :
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -759,7 +759,7 @@ function updateProduct() {
|
||||||
|
|
||||||
echo -e "${GREEN}Start to update ${productName}...${NC}"
|
echo -e "${GREEN}Start to update ${productName}...${NC}"
|
||||||
# Stop the service if running
|
# Stop the service if running
|
||||||
if pidof ${serverName} &>/dev/null; then
|
if ps aux | grep -v grep | grep ${serverName} &>/dev/null; then
|
||||||
if ((${service_mod} == 0)); then
|
if ((${service_mod} == 0)); then
|
||||||
${csudo}systemctl stop ${serverName} || :
|
${csudo}systemctl stop ${serverName} || :
|
||||||
elif ((${service_mod} == 1)); then
|
elif ((${service_mod} == 1)); then
|
||||||
|
|
|
@ -265,7 +265,7 @@ function update_TDengine() {
|
||||||
tar -zxf ${tarName}
|
tar -zxf ${tarName}
|
||||||
echo -e "${GREEN}Start to update ${productName} client...${NC}"
|
echo -e "${GREEN}Start to update ${productName} client...${NC}"
|
||||||
# Stop the client shell if running
|
# Stop the client shell if running
|
||||||
if pidof ${clientName} &> /dev/null; then
|
if ps aux | grep -v grep | grep ${clientName} &> /dev/null; then
|
||||||
kill_client
|
kill_client
|
||||||
sleep 1
|
sleep 1
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -2,4 +2,5 @@ TDengine is a high-efficient, scalable, high-available distributed time-series d
|
||||||
|
|
||||||
To configure TDengine : edit /etc/taos/taos.cfg
|
To configure TDengine : edit /etc/taos/taos.cfg
|
||||||
To start service : launchctl start com.tdengine.taosd
|
To start service : launchctl start com.tdengine.taosd
|
||||||
|
To start Taos Adapter : launchctl start com.tdengine.taosadapter
|
||||||
To access TDengine : use taos in shell
|
To access TDengine : use taos in shell
|
|
@ -77,7 +77,7 @@ os_type=0
|
||||||
|
|
||||||
if [ "$osType" != "Darwin" ]; then
|
if [ "$osType" != "Darwin" ]; then
|
||||||
initd_mod=0
|
initd_mod=0
|
||||||
if pidof systemd &>/dev/null; then
|
if ps aux | grep -v grep | grep systemd &>/dev/null; then
|
||||||
service_mod=0
|
service_mod=0
|
||||||
elif $(which service &>/dev/null); then
|
elif $(which service &>/dev/null); then
|
||||||
service_mod=1
|
service_mod=1
|
||||||
|
@ -130,7 +130,6 @@ function kill_taosadapter() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function kill_taosd() {
|
function kill_taosd() {
|
||||||
ps -ef | grep ${serverName}
|
|
||||||
pid=$(ps -ef | grep -w ${serverName} | grep -v "grep" | awk '{print $2}')
|
pid=$(ps -ef | grep -w ${serverName} | grep -v "grep" | awk '{print $2}')
|
||||||
if [ -n "$pid" ]; then
|
if [ -n "$pid" ]; then
|
||||||
${csudo}kill -9 $pid || :
|
${csudo}kill -9 $pid || :
|
||||||
|
@ -438,7 +437,7 @@ function install_web() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function clean_service_on_sysvinit() {
|
function clean_service_on_sysvinit() {
|
||||||
if pidof ${serverName} &>/dev/null; then
|
if ps aux | grep -v grep | grep ${serverName} &>/dev/null; then
|
||||||
${csudo}service ${serverName} stop || :
|
${csudo}service ${serverName} stop || :
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -535,6 +534,10 @@ function install_service_on_launchctl() {
|
||||||
${csudouser}launchctl unload -w /Library/LaunchDaemons/com.taosdata.taosd.plist > /dev/null 2>&1 || :
|
${csudouser}launchctl unload -w /Library/LaunchDaemons/com.taosdata.taosd.plist > /dev/null 2>&1 || :
|
||||||
${csudo}cp ${script_dir}/com.taosdata.taosd.plist /Library/LaunchDaemons/com.taosdata.taosd.plist
|
${csudo}cp ${script_dir}/com.taosdata.taosd.plist /Library/LaunchDaemons/com.taosdata.taosd.plist
|
||||||
${csudouser}launchctl load -w /Library/LaunchDaemons/com.taosdata.taosd.plist > /dev/null 2>&1 || :
|
${csudouser}launchctl load -w /Library/LaunchDaemons/com.taosdata.taosd.plist > /dev/null 2>&1 || :
|
||||||
|
|
||||||
|
${csudouser}launchctl unload -w /Library/LaunchDaemons/com.taosdata.taosadapter.plist > /dev/null 2>&1 || :
|
||||||
|
${csudo}cp ${script_dir}/com.taosdata.taosadapter.plist /Library/LaunchDaemons/com.taosdata.taosadapter.plist
|
||||||
|
${csudouser}launchctl load -w /Library/LaunchDaemons/com.taosdata.taosadapter.plist > /dev/null 2>&1 || :
|
||||||
}
|
}
|
||||||
|
|
||||||
function install_service() {
|
function install_service() {
|
||||||
|
@ -568,7 +571,7 @@ function update_TDengine() {
|
||||||
echo -e "${GREEN}Start to update ${productName}...${NC}"
|
echo -e "${GREEN}Start to update ${productName}...${NC}"
|
||||||
# Stop the service if running
|
# Stop the service if running
|
||||||
|
|
||||||
if pidof ${serverName} &>/dev/null; then
|
if ps aux | grep -v grep | grep ${serverName} &>/dev/null; then
|
||||||
if ((${service_mod} == 0)); then
|
if ((${service_mod} == 0)); then
|
||||||
${csudo}systemctl stop ${serverName} || :
|
${csudo}systemctl stop ${serverName} || :
|
||||||
elif ((${service_mod} == 1)); then
|
elif ((${service_mod} == 1)); then
|
||||||
|
@ -615,11 +618,12 @@ function update_TDengine() {
|
||||||
else
|
else
|
||||||
if [ "$osType" != "Darwin" ]; then
|
if [ "$osType" != "Darwin" ]; then
|
||||||
echo -e "${GREEN_DARK}To start ${productName} ${NC}: ${serverName}${NC}"
|
echo -e "${GREEN_DARK}To start ${productName} ${NC}: ${serverName}${NC}"
|
||||||
|
[ -f ${installDir}/bin/taosadapter ] && \
|
||||||
|
echo -e "${GREEN_DARK}To start Taos Adapter ${NC}: taosadapter &${NC}"
|
||||||
else
|
else
|
||||||
echo -e "${GREEN_DARK}To start service ${NC}: launchctl start com.tdengine.taosd${NC}"
|
echo -e "${GREEN_DARK}To start service ${NC}: launchctl start com.tdengine.taosd${NC}"
|
||||||
|
echo -e "${GREEN_DARK}To start Taos Adapter ${NC}: launchctl start com.tdengine.taosadapter${NC}"
|
||||||
fi
|
fi
|
||||||
[ -f ${installDir}/bin/taosadapter ] && \
|
|
||||||
echo -e "${GREEN_DARK}To start Taos Adapter ${NC}: taosadapter &${NC}"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo -e "${GREEN_DARK}To access ${productName} ${NC}: use ${GREEN_UNDERLINE}${clientName}${NC} in shell${NC}"
|
echo -e "${GREEN_DARK}To access ${productName} ${NC}: use ${GREEN_UNDERLINE}${clientName}${NC} in shell${NC}"
|
||||||
|
@ -666,11 +670,12 @@ function install_TDengine() {
|
||||||
else
|
else
|
||||||
if [ "$osType" != "Darwin" ]; then
|
if [ "$osType" != "Darwin" ]; then
|
||||||
echo -e "${GREEN_DARK}To start ${productName} ${NC}: ${serverName}${NC}"
|
echo -e "${GREEN_DARK}To start ${productName} ${NC}: ${serverName}${NC}"
|
||||||
|
[ -f ${installDir}/bin/taosadapter ] && \
|
||||||
|
echo -e "${GREEN_DARK}To start Taos Adapter ${NC}: taosadapter &${NC}"
|
||||||
else
|
else
|
||||||
echo -e "${GREEN_DARK}To start service ${NC}: launchctl start com.tdengine.taosd${NC}"
|
echo -e "${GREEN_DARK}To start service ${NC}: launchctl start com.tdengine.taosd${NC}"
|
||||||
|
echo -e "${GREEN_DARK}To start Taos Adapter ${NC}: launchctl start com.tdengine.taosadapter${NC}"
|
||||||
fi
|
fi
|
||||||
[ -f ${installDir}/bin/taosadapter ] && \
|
|
||||||
echo -e "${GREEN_DARK}To start Taos Adapter ${NC}: taosadapter &${NC}"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo -e "${GREEN_DARK}To access ${productName} ${NC}: use ${GREEN_UNDERLINE}${clientName}${NC} in shell${NC}"
|
echo -e "${GREEN_DARK}To access ${productName} ${NC}: use ${GREEN_UNDERLINE}${clientName}${NC} in shell${NC}"
|
||||||
|
|
|
@ -75,7 +75,7 @@ fi
|
||||||
|
|
||||||
initd_mod=0
|
initd_mod=0
|
||||||
service_mod=2
|
service_mod=2
|
||||||
if pidof systemd &> /dev/null; then
|
if ps aux | grep -v grep | grep systemd &> /dev/null; then
|
||||||
service_mod=0
|
service_mod=0
|
||||||
elif $(which service &> /dev/null); then
|
elif $(which service &> /dev/null); then
|
||||||
service_mod=1
|
service_mod=1
|
||||||
|
@ -421,7 +421,7 @@ function clean_service_on_sysvinit() {
|
||||||
#restart_config_str="taos:2345:respawn:${service_config_dir}/taosd start"
|
#restart_config_str="taos:2345:respawn:${service_config_dir}/taosd start"
|
||||||
#${csudo}sed -i "\|${restart_config_str}|d" /etc/inittab || :
|
#${csudo}sed -i "\|${restart_config_str}|d" /etc/inittab || :
|
||||||
|
|
||||||
if pidof taosd &> /dev/null; then
|
if ps aux | grep -v grep | grep taosd &> /dev/null; then
|
||||||
${csudo}service taosd stop || :
|
${csudo}service taosd stop || :
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -512,6 +512,11 @@ function install_service_on_launchctl() {
|
||||||
${csudo}cp ${install_main_dir}/service/com.taosdata.taosd.plist /Library/LaunchDaemons/com.taosdata.taosd.plist || :
|
${csudo}cp ${install_main_dir}/service/com.taosdata.taosd.plist /Library/LaunchDaemons/com.taosdata.taosd.plist || :
|
||||||
${csudouser}launchctl load -w /Library/LaunchDaemons/com.taosdata.taosd.plist || :
|
${csudouser}launchctl load -w /Library/LaunchDaemons/com.taosdata.taosd.plist || :
|
||||||
fi
|
fi
|
||||||
|
if [ -f ${install_main_dir}/service/com.taosdata.taosadapter.plist ]; then
|
||||||
|
${csudouser}launchctl unload -w /Library/LaunchDaemons/com.taosdata.taosadapter.plist > /dev/null 2>&1 || :
|
||||||
|
${csudo}cp ${install_main_dir}/service/com.taosdata.taosadapter.plist /Library/LaunchDaemons/com.taosdata.taosadapter.plist || :
|
||||||
|
${csudouser}launchctl load -w /Library/LaunchDaemons/com.taosdata.taosadapter.plist || :
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
function install_taosadapter_service() {
|
function install_taosadapter_service() {
|
||||||
|
|
|
@ -25,7 +25,7 @@ fi
|
||||||
|
|
||||||
initd_mod=0
|
initd_mod=0
|
||||||
service_mod=2
|
service_mod=2
|
||||||
if pidof systemd &> /dev/null; then
|
if ps aux | grep -v grep | grep systemd &> /dev/null; then
|
||||||
service_mod=0
|
service_mod=0
|
||||||
elif $(which service &> /dev/null); then
|
elif $(which service &> /dev/null); then
|
||||||
service_mod=1
|
service_mod=1
|
||||||
|
@ -82,7 +82,7 @@ function clean_service_on_sysvinit() {
|
||||||
#restart_config_str="taos:2345:respawn:${service_config_dir}/taosd start"
|
#restart_config_str="taos:2345:respawn:${service_config_dir}/taosd start"
|
||||||
#${csudo}sed -i "\|${restart_config_str}|d" /etc/inittab || :
|
#${csudo}sed -i "\|${restart_config_str}|d" /etc/inittab || :
|
||||||
|
|
||||||
if pidof taosd &> /dev/null; then
|
if ps aux | grep -v grep | grep taosd &> /dev/null; then
|
||||||
echo "TDengine taosd is running, stopping it..."
|
echo "TDengine taosd is running, stopping it..."
|
||||||
${csudo}service taosd stop || :
|
${csudo}service taosd stop || :
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -55,7 +55,7 @@ fi
|
||||||
|
|
||||||
initd_mod=0
|
initd_mod=0
|
||||||
service_mod=2
|
service_mod=2
|
||||||
if pidof systemd &>/dev/null; then
|
if ps aux | grep -v grep | grep systemd &>/dev/null; then
|
||||||
service_mod=0
|
service_mod=0
|
||||||
elif $(which service &>/dev/null); then
|
elif $(which service &>/dev/null); then
|
||||||
service_mod=1
|
service_mod=1
|
||||||
|
@ -171,12 +171,12 @@ function clean_service_on_systemd() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function clean_service_on_sysvinit() {
|
function clean_service_on_sysvinit() {
|
||||||
if pidof ${serverName} &>/dev/null; then
|
if ps aux | grep -v grep | grep ${serverName} &>/dev/null; then
|
||||||
echo "${productName} ${serverName} is running, stopping it..."
|
echo "${productName} ${serverName} is running, stopping it..."
|
||||||
${csudo}service ${serverName} stop || :
|
${csudo}service ${serverName} stop || :
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if pidof tarbitrator &>/dev/null; then
|
if ps aux | grep -v grep | grep tarbitrator &>/dev/null; then
|
||||||
echo "${productName} tarbitrator is running, stopping it..."
|
echo "${productName} tarbitrator is running, stopping it..."
|
||||||
${csudo}service tarbitratord stop || :
|
${csudo}service tarbitratord stop || :
|
||||||
fi
|
fi
|
||||||
|
@ -215,6 +215,8 @@ function clean_service_on_sysvinit() {
|
||||||
function clean_service_on_launchctl() {
|
function clean_service_on_launchctl() {
|
||||||
${csudouser}launchctl unload -w /Library/LaunchDaemons/com.taosdata.taosd.plist > /dev/null 2>&1 || :
|
${csudouser}launchctl unload -w /Library/LaunchDaemons/com.taosdata.taosd.plist > /dev/null 2>&1 || :
|
||||||
${csudo}rm /Library/LaunchDaemons/com.taosdata.taosd.plist > /dev/null 2>&1 || :
|
${csudo}rm /Library/LaunchDaemons/com.taosdata.taosd.plist > /dev/null 2>&1 || :
|
||||||
|
${csudouser}launchctl unload -w /Library/LaunchDaemons/com.taosdata.taosadapter.plist > /dev/null 2>&1 || :
|
||||||
|
${csudo}rm /Library/LaunchDaemons/com.taosdata.taosadapter.plist > /dev/null 2>&1 || :
|
||||||
}
|
}
|
||||||
|
|
||||||
function clean_service() {
|
function clean_service() {
|
||||||
|
|
|
@ -28,7 +28,7 @@ if command -v sudo > /dev/null; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
function kill_client() {
|
function kill_client() {
|
||||||
if [ -n "$(pidof ${clientName})" ]; then
|
if [ -n "$(ps aux | grep -v grep | grep ${clientName})" ]; then
|
||||||
${csudo}kill -9 $pid || :
|
${csudo}kill -9 $pid || :
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
|
@ -438,21 +438,18 @@ int taos_init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
int taos_options_imp(TSDB_OPTION option, const char *str) {
|
int taos_options_imp(TSDB_OPTION option, const char *str) {
|
||||||
if (option != TSDB_OPTION_CONFIGDIR) {
|
if (option == TSDB_OPTION_CONFIGDIR) {
|
||||||
taos_init(); // initialize global config
|
|
||||||
} else {
|
|
||||||
tstrncpy(configDir, str, PATH_MAX);
|
tstrncpy(configDir, str, PATH_MAX);
|
||||||
tscInfo("set cfg:%s to %s", configDir, str);
|
tscInfo("set cfg:%s to %s", configDir, str);
|
||||||
return 0;
|
return 0;
|
||||||
|
} else {
|
||||||
|
taos_init(); // initialize global config
|
||||||
}
|
}
|
||||||
|
|
||||||
SConfig *pCfg = taosGetCfg();
|
SConfig *pCfg = taosGetCfg();
|
||||||
SConfigItem *pItem = NULL;
|
SConfigItem *pItem = NULL;
|
||||||
|
|
||||||
switch (option) {
|
switch (option) {
|
||||||
case TSDB_OPTION_CONFIGDIR:
|
|
||||||
pItem = cfgGetItem(pCfg, "configDir");
|
|
||||||
break;
|
|
||||||
case TSDB_OPTION_SHELL_ACTIVITY_TIMER:
|
case TSDB_OPTION_SHELL_ACTIVITY_TIMER:
|
||||||
pItem = cfgGetItem(pCfg, "shellActivityTimer");
|
pItem = cfgGetItem(pCfg, "shellActivityTimer");
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -199,7 +199,7 @@ int32_t buildRequest(uint64_t connId, const char* sql, int sqlLen, void* param,
|
||||||
if (tsQueryUseNodeAllocator && !qIsInsertValuesSql((*pRequest)->sqlstr, (*pRequest)->sqlLen)) {
|
if (tsQueryUseNodeAllocator && !qIsInsertValuesSql((*pRequest)->sqlstr, (*pRequest)->sqlLen)) {
|
||||||
if (TSDB_CODE_SUCCESS !=
|
if (TSDB_CODE_SUCCESS !=
|
||||||
nodesCreateAllocator((*pRequest)->requestId, tsQueryNodeChunkSize, &((*pRequest)->allocatorRefId))) {
|
nodesCreateAllocator((*pRequest)->requestId, tsQueryNodeChunkSize, &((*pRequest)->allocatorRefId))) {
|
||||||
tscError("%d failed to create node allocator, reqId:0x%" PRIx64 ", conn:%d, %s", (*pRequest)->self,
|
tscError("%d failed to create node allocator, reqId:0x%" PRIx64 ", conn:%" PRId64 ", %s", (*pRequest)->self,
|
||||||
(*pRequest)->requestId, pTscObj->id, sql);
|
(*pRequest)->requestId, pTscObj->id, sql);
|
||||||
|
|
||||||
destroyRequest(*pRequest);
|
destroyRequest(*pRequest);
|
||||||
|
@ -955,7 +955,12 @@ SRequestObj* launchQueryImpl(SRequestObj* pRequest, SQuery* pQuery, bool keepQue
|
||||||
switch (pQuery->execMode) {
|
switch (pQuery->execMode) {
|
||||||
case QUERY_EXEC_MODE_LOCAL:
|
case QUERY_EXEC_MODE_LOCAL:
|
||||||
if (!pRequest->validateOnly) {
|
if (!pRequest->validateOnly) {
|
||||||
code = execLocalCmd(pRequest, pQuery);
|
if (NULL == pQuery->pRoot) {
|
||||||
|
terrno = TSDB_CODE_INVALID_PARA;
|
||||||
|
code = terrno;
|
||||||
|
} else {
|
||||||
|
code = execLocalCmd(pRequest, pQuery);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case QUERY_EXEC_MODE_RPC:
|
case QUERY_EXEC_MODE_RPC:
|
||||||
|
@ -997,7 +1002,7 @@ SRequestObj* launchQueryImpl(SRequestObj* pRequest, SQuery* pQuery, bool keepQue
|
||||||
|
|
||||||
handleQueryExecRsp(pRequest);
|
handleQueryExecRsp(pRequest);
|
||||||
|
|
||||||
if (NULL != pRequest && TSDB_CODE_SUCCESS != code) {
|
if (TSDB_CODE_SUCCESS != code) {
|
||||||
pRequest->code = terrno;
|
pRequest->code = terrno;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1130,7 +1135,8 @@ void launchAsyncQuery(SRequestObj* pRequest, SQuery* pQuery, SMetaData* pResultM
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NULL != pRequest && TSDB_CODE_SUCCESS != code) {
|
// TODO weired responding code?
|
||||||
|
if (TSDB_CODE_SUCCESS != code) {
|
||||||
pRequest->code = terrno;
|
pRequest->code = terrno;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2253,7 +2259,10 @@ void syncQueryFn(void* param, void* res, int32_t code) {
|
||||||
void taosAsyncQueryImpl(uint64_t connId, const char* sql, __taos_async_fn_t fp, void* param, bool validateOnly) {
|
void taosAsyncQueryImpl(uint64_t connId, const char* sql, __taos_async_fn_t fp, void* param, bool validateOnly) {
|
||||||
if (sql == NULL || NULL == fp) {
|
if (sql == NULL || NULL == fp) {
|
||||||
terrno = TSDB_CODE_INVALID_PARA;
|
terrno = TSDB_CODE_INVALID_PARA;
|
||||||
fp(param, NULL, terrno);
|
if (fp) {
|
||||||
|
fp(param, NULL, terrno);
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -944,7 +944,6 @@ void taos_fetch_rows_a(TAOS_RES *res, __taos_async_fn_t fp, void *param) {
|
||||||
if (pResultInfo->completed) {
|
if (pResultInfo->completed) {
|
||||||
// it is a local executed query, no need to do async fetch
|
// it is a local executed query, no need to do async fetch
|
||||||
if (QUERY_EXEC_MODE_LOCAL == pRequest->body.execMode) {
|
if (QUERY_EXEC_MODE_LOCAL == pRequest->body.execMode) {
|
||||||
ASSERT(pResultInfo->numOfRows >= 0);
|
|
||||||
if (pResultInfo->localResultFetched) {
|
if (pResultInfo->localResultFetched) {
|
||||||
pResultInfo->numOfRows = 0;
|
pResultInfo->numOfRows = 0;
|
||||||
pResultInfo->current = 0;
|
pResultInfo->current = 0;
|
||||||
|
|
|
@ -194,6 +194,10 @@ int32_t processUseDbRsp(void* param, SDataBuf* pMsg, int32_t code) {
|
||||||
SUseDbRsp usedbRsp = {0};
|
SUseDbRsp usedbRsp = {0};
|
||||||
tDeserializeSUseDbRsp(pMsg->pData, pMsg->len, &usedbRsp);
|
tDeserializeSUseDbRsp(pMsg->pData, pMsg->len, &usedbRsp);
|
||||||
|
|
||||||
|
if(strlen(usedbRsp.db) == 0){
|
||||||
|
return TSDB_CODE_MND_DB_NOT_EXIST;
|
||||||
|
}
|
||||||
|
|
||||||
SName name = {0};
|
SName name = {0};
|
||||||
tNameFromString(&name, usedbRsp.db, T_NAME_ACCT | T_NAME_DB);
|
tNameFromString(&name, usedbRsp.db, T_NAME_ACCT | T_NAME_DB);
|
||||||
|
|
||||||
|
@ -288,8 +292,10 @@ int32_t processDropDbRsp(void* param, SDataBuf* pMsg, int32_t code) {
|
||||||
tDeserializeSDropDbRsp(pMsg->pData, pMsg->len, &dropdbRsp);
|
tDeserializeSDropDbRsp(pMsg->pData, pMsg->len, &dropdbRsp);
|
||||||
|
|
||||||
struct SCatalog* pCatalog = NULL;
|
struct SCatalog* pCatalog = NULL;
|
||||||
catalogGetHandle(pRequest->pTscObj->pAppInfo->clusterId, &pCatalog);
|
int32_t code = catalogGetHandle(pRequest->pTscObj->pAppInfo->clusterId, &pCatalog);
|
||||||
catalogRemoveDB(pCatalog, dropdbRsp.db, dropdbRsp.uid);
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
|
catalogRemoveDB(pCatalog, dropdbRsp.db, dropdbRsp.uid);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
taosMemoryFree(pMsg->pData);
|
taosMemoryFree(pMsg->pData);
|
||||||
|
@ -393,6 +399,7 @@ static int32_t buildShowVariablesRsp(SArray* pVars, SRetrieveTableRsp** pRsp) {
|
||||||
size_t rspSize = sizeof(SRetrieveTableRsp) + blockGetEncodeSize(pBlock);
|
size_t rspSize = sizeof(SRetrieveTableRsp) + blockGetEncodeSize(pBlock);
|
||||||
*pRsp = taosMemoryCalloc(1, rspSize);
|
*pRsp = taosMemoryCalloc(1, rspSize);
|
||||||
if (NULL == *pRsp) {
|
if (NULL == *pRsp) {
|
||||||
|
blockDataDestroy(pBlock);
|
||||||
return TSDB_CODE_OUT_OF_MEMORY;
|
return TSDB_CODE_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,8 +28,8 @@
|
||||||
#define QUOTE '"'
|
#define QUOTE '"'
|
||||||
#define SLASH '\\'
|
#define SLASH '\\'
|
||||||
|
|
||||||
#define JUMP_SPACE(sql) \
|
#define JUMP_SPACE(sql, sqlEnd) \
|
||||||
while (*sql != '\0') { \
|
while (sql < sqlEnd) { \
|
||||||
if (*sql == SPACE) \
|
if (*sql == SPACE) \
|
||||||
sql++; \
|
sql++; \
|
||||||
else \
|
else \
|
||||||
|
@ -917,16 +917,17 @@ static int32_t smlParseValue(SSmlKv *pVal, SSmlMsgBuf *msg) {
|
||||||
return TSDB_CODE_TSC_INVALID_VALUE;
|
return TSDB_CODE_TSC_INVALID_VALUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t smlParseInfluxString(const char *sql, SSmlLineInfo *elements, SSmlMsgBuf *msg) {
|
static int32_t smlParseInfluxString(const char *sql, const char *sqlEnd, SSmlLineInfo *elements, SSmlMsgBuf *msg) {
|
||||||
if (!sql) return TSDB_CODE_SML_INVALID_DATA;
|
if (!sql) return TSDB_CODE_SML_INVALID_DATA;
|
||||||
JUMP_SPACE(sql)
|
JUMP_SPACE(sql, sqlEnd)
|
||||||
if (*sql == COMMA) return TSDB_CODE_SML_INVALID_DATA;
|
if (*sql == COMMA) return TSDB_CODE_SML_INVALID_DATA;
|
||||||
elements->measure = sql;
|
elements->measure = sql;
|
||||||
|
|
||||||
// parse measure
|
// parse measure
|
||||||
while (*sql != '\0') {
|
while (sql < sqlEnd) {
|
||||||
if ((sql != elements->measure) && IS_SLASH_LETTER(sql)) {
|
if ((sql != elements->measure) && IS_SLASH_LETTER(sql)) {
|
||||||
MOVE_FORWARD_ONE(sql, strlen(sql) + 1);
|
MOVE_FORWARD_ONE(sql, sqlEnd - sql);
|
||||||
|
sqlEnd--;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (IS_COMMA(sql)) {
|
if (IS_COMMA(sql)) {
|
||||||
|
@ -950,7 +951,7 @@ static int32_t smlParseInfluxString(const char *sql, SSmlLineInfo *elements, SSm
|
||||||
} else {
|
} else {
|
||||||
if (*sql == COMMA) sql++;
|
if (*sql == COMMA) sql++;
|
||||||
elements->tags = sql;
|
elements->tags = sql;
|
||||||
while (*sql != '\0') {
|
while (sql < sqlEnd) {
|
||||||
if (IS_SPACE(sql)) {
|
if (IS_SPACE(sql)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -961,10 +962,10 @@ static int32_t smlParseInfluxString(const char *sql, SSmlLineInfo *elements, SSm
|
||||||
elements->measureTagsLen = sql - elements->measure;
|
elements->measureTagsLen = sql - elements->measure;
|
||||||
|
|
||||||
// parse cols
|
// parse cols
|
||||||
JUMP_SPACE(sql)
|
JUMP_SPACE(sql, sqlEnd)
|
||||||
elements->cols = sql;
|
elements->cols = sql;
|
||||||
bool isInQuote = false;
|
bool isInQuote = false;
|
||||||
while (*sql != '\0') {
|
while (sql < sqlEnd) {
|
||||||
if (IS_QUOTE(sql)) {
|
if (IS_QUOTE(sql)) {
|
||||||
isInQuote = !isInQuote;
|
isInQuote = !isInQuote;
|
||||||
}
|
}
|
||||||
|
@ -984,10 +985,10 @@ static int32_t smlParseInfluxString(const char *sql, SSmlLineInfo *elements, SSm
|
||||||
}
|
}
|
||||||
|
|
||||||
// parse timestamp
|
// parse timestamp
|
||||||
JUMP_SPACE(sql)
|
JUMP_SPACE(sql, sqlEnd)
|
||||||
elements->timestamp = sql;
|
elements->timestamp = sql;
|
||||||
while (*sql != '\0') {
|
while (sql < sqlEnd) {
|
||||||
if (*sql == SPACE) {
|
if (isspace(*sql)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
sql++;
|
sql++;
|
||||||
|
@ -997,8 +998,8 @@ static int32_t smlParseInfluxString(const char *sql, SSmlLineInfo *elements, SSm
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void smlParseTelnetElement(const char **sql, const char **data, int32_t *len) {
|
static void smlParseTelnetElement(const char **sql, const char *sqlEnd, const char **data, int32_t *len) {
|
||||||
while (**sql != '\0') {
|
while (*sql < sqlEnd) {
|
||||||
if (**sql != SPACE && !(*data)) {
|
if (**sql != SPACE && !(*data)) {
|
||||||
*data = *sql;
|
*data = *sql;
|
||||||
} else if (**sql == SPACE && *data) {
|
} else if (**sql == SPACE && *data) {
|
||||||
|
@ -1009,20 +1010,20 @@ static void smlParseTelnetElement(const char **sql, const char **data, int32_t *
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t smlParseTelnetTags(const char *data, SArray *cols, char *childTableName, SHashObj *dumplicateKey,
|
static int32_t smlParseTelnetTags(const char *data, const char *sqlEnd, SArray *cols, char *childTableName, SHashObj *dumplicateKey,
|
||||||
SSmlMsgBuf *msg) {
|
SSmlMsgBuf *msg) {
|
||||||
if(!cols) return TSDB_CODE_OUT_OF_MEMORY;
|
if(!cols) return TSDB_CODE_OUT_OF_MEMORY;
|
||||||
const char *sql = data;
|
const char *sql = data;
|
||||||
size_t childTableNameLen = strlen(tsSmlChildTableName);
|
size_t childTableNameLen = strlen(tsSmlChildTableName);
|
||||||
while (*sql != '\0') {
|
while (sql < sqlEnd) {
|
||||||
JUMP_SPACE(sql)
|
JUMP_SPACE(sql, sqlEnd)
|
||||||
if (*sql == '\0') break;
|
if (*sql == '\0') break;
|
||||||
|
|
||||||
const char *key = sql;
|
const char *key = sql;
|
||||||
int32_t keyLen = 0;
|
int32_t keyLen = 0;
|
||||||
|
|
||||||
// parse key
|
// parse key
|
||||||
while (*sql != '\0') {
|
while (sql < sqlEnd) {
|
||||||
if (*sql == SPACE) {
|
if (*sql == SPACE) {
|
||||||
smlBuildInvalidDataMsg(msg, "invalid data", sql);
|
smlBuildInvalidDataMsg(msg, "invalid data", sql);
|
||||||
return TSDB_CODE_SML_INVALID_DATA;
|
return TSDB_CODE_SML_INVALID_DATA;
|
||||||
|
@ -1047,7 +1048,7 @@ static int32_t smlParseTelnetTags(const char *data, SArray *cols, char *childTab
|
||||||
// parse value
|
// parse value
|
||||||
const char *value = sql;
|
const char *value = sql;
|
||||||
int32_t valueLen = 0;
|
int32_t valueLen = 0;
|
||||||
while (*sql != '\0') {
|
while (sql < sqlEnd) {
|
||||||
// parse value
|
// parse value
|
||||||
if (*sql == SPACE) {
|
if (*sql == SPACE) {
|
||||||
break;
|
break;
|
||||||
|
@ -1092,11 +1093,11 @@ static int32_t smlParseTelnetTags(const char *data, SArray *cols, char *childTab
|
||||||
}
|
}
|
||||||
|
|
||||||
// format: <metric> <timestamp> <value> <tagk_1>=<tagv_1>[ <tagk_n>=<tagv_n>]
|
// format: <metric> <timestamp> <value> <tagk_1>=<tagv_1>[ <tagk_n>=<tagv_n>]
|
||||||
static int32_t smlParseTelnetString(SSmlHandle *info, const char *sql, SSmlTableInfo *tinfo, SArray *cols) {
|
static int32_t smlParseTelnetString(SSmlHandle *info, const char *sql, const char *sqlEnd, SSmlTableInfo *tinfo, SArray *cols) {
|
||||||
if (!sql) return TSDB_CODE_SML_INVALID_DATA;
|
if (!sql) return TSDB_CODE_SML_INVALID_DATA;
|
||||||
|
|
||||||
// parse metric
|
// parse metric
|
||||||
smlParseTelnetElement(&sql, &tinfo->sTableName, &tinfo->sTableNameLen);
|
smlParseTelnetElement(&sql, sqlEnd, &tinfo->sTableName, &tinfo->sTableNameLen);
|
||||||
if (!(tinfo->sTableName) || IS_INVALID_TABLE_LEN(tinfo->sTableNameLen)) {
|
if (!(tinfo->sTableName) || IS_INVALID_TABLE_LEN(tinfo->sTableNameLen)) {
|
||||||
smlBuildInvalidDataMsg(&info->msgBuf, "invalid data", sql);
|
smlBuildInvalidDataMsg(&info->msgBuf, "invalid data", sql);
|
||||||
return TSDB_CODE_TSC_INVALID_TABLE_ID_LENGTH;
|
return TSDB_CODE_TSC_INVALID_TABLE_ID_LENGTH;
|
||||||
|
@ -1105,7 +1106,7 @@ static int32_t smlParseTelnetString(SSmlHandle *info, const char *sql, SSmlTable
|
||||||
// parse timestamp
|
// parse timestamp
|
||||||
const char *timestamp = NULL;
|
const char *timestamp = NULL;
|
||||||
int32_t tLen = 0;
|
int32_t tLen = 0;
|
||||||
smlParseTelnetElement(&sql, ×tamp, &tLen);
|
smlParseTelnetElement(&sql, sqlEnd, ×tamp, &tLen);
|
||||||
if (!timestamp || tLen == 0) {
|
if (!timestamp || tLen == 0) {
|
||||||
smlBuildInvalidDataMsg(&info->msgBuf, "invalid timestamp", sql);
|
smlBuildInvalidDataMsg(&info->msgBuf, "invalid timestamp", sql);
|
||||||
return TSDB_CODE_SML_INVALID_DATA;
|
return TSDB_CODE_SML_INVALID_DATA;
|
||||||
|
@ -1120,7 +1121,7 @@ static int32_t smlParseTelnetString(SSmlHandle *info, const char *sql, SSmlTable
|
||||||
// parse value
|
// parse value
|
||||||
const char *value = NULL;
|
const char *value = NULL;
|
||||||
int32_t valueLen = 0;
|
int32_t valueLen = 0;
|
||||||
smlParseTelnetElement(&sql, &value, &valueLen);
|
smlParseTelnetElement(&sql, sqlEnd, &value, &valueLen);
|
||||||
if (!value || valueLen == 0) {
|
if (!value || valueLen == 0) {
|
||||||
smlBuildInvalidDataMsg(&info->msgBuf, "invalid value", sql);
|
smlBuildInvalidDataMsg(&info->msgBuf, "invalid value", sql);
|
||||||
return TSDB_CODE_TSC_INVALID_VALUE;
|
return TSDB_CODE_TSC_INVALID_VALUE;
|
||||||
|
@ -1138,7 +1139,7 @@ static int32_t smlParseTelnetString(SSmlHandle *info, const char *sql, SSmlTable
|
||||||
}
|
}
|
||||||
|
|
||||||
// parse tags
|
// parse tags
|
||||||
ret = smlParseTelnetTags(sql, tinfo->tags, tinfo->childTableName, info->dumplicateKey, &info->msgBuf);
|
ret = smlParseTelnetTags(sql, sqlEnd, tinfo->tags, tinfo->childTableName, info->dumplicateKey, &info->msgBuf);
|
||||||
if (ret != TSDB_CODE_SUCCESS) {
|
if (ret != TSDB_CODE_SUCCESS) {
|
||||||
smlBuildInvalidDataMsg(&info->msgBuf, "invalid data", sql);
|
smlBuildInvalidDataMsg(&info->msgBuf, "invalid data", sql);
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -1371,8 +1372,14 @@ static int32_t smlKvTimeArrayCompare(const void *key1, const void *key2) {
|
||||||
static int32_t smlKvTimeHashCompare(const void *key1, const void *key2) {
|
static int32_t smlKvTimeHashCompare(const void *key1, const void *key2) {
|
||||||
SHashObj *s1 = *(SHashObj **)key1;
|
SHashObj *s1 = *(SHashObj **)key1;
|
||||||
SHashObj *s2 = *(SHashObj **)key2;
|
SHashObj *s2 = *(SHashObj **)key2;
|
||||||
SSmlKv *kv1 = *(SSmlKv **)taosHashGet(s1, TS, TS_LEN);
|
SSmlKv **kv1pp = (SSmlKv **)taosHashGet(s1, TS, TS_LEN);
|
||||||
SSmlKv *kv2 = *(SSmlKv **)taosHashGet(s2, TS, TS_LEN);
|
SSmlKv **kv2pp = (SSmlKv **)taosHashGet(s2, TS, TS_LEN);
|
||||||
|
if(!kv1pp || !kv2pp){
|
||||||
|
uError("smlKvTimeHashCompare kv is null");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
SSmlKv *kv1 = *kv1pp;
|
||||||
|
SSmlKv *kv2 = *kv2pp;
|
||||||
if(!kv1 || kv1->type != TSDB_DATA_TYPE_TIMESTAMP){
|
if(!kv1 || kv1->type != TSDB_DATA_TYPE_TIMESTAMP){
|
||||||
uError("smlKvTimeHashCompare kv1");
|
uError("smlKvTimeHashCompare kv1");
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -2073,11 +2080,11 @@ static int32_t smlParseJSONString(SSmlHandle *info, cJSON *root, SSmlTableInfo *
|
||||||
}
|
}
|
||||||
/************* TSDB_SML_JSON_PROTOCOL function end **************/
|
/************* TSDB_SML_JSON_PROTOCOL function end **************/
|
||||||
|
|
||||||
static int32_t smlParseInfluxLine(SSmlHandle *info, const char *sql) {
|
static int32_t smlParseInfluxLine(SSmlHandle *info, const char *sql, const int len) {
|
||||||
SSmlLineInfo elements = {0};
|
SSmlLineInfo elements = {0};
|
||||||
uDebug("SML:0x%" PRIx64 " smlParseInfluxLine sql:%s, hello", info->id, sql);
|
uDebug("SML:0x%" PRIx64 " smlParseInfluxLine sql:%s, hello", info->id, sql);
|
||||||
|
|
||||||
int ret = smlParseInfluxString(sql, &elements, &info->msgBuf);
|
int ret = smlParseInfluxString(sql, sql + len, &elements, &info->msgBuf);
|
||||||
if (ret != TSDB_CODE_SUCCESS) {
|
if (ret != TSDB_CODE_SUCCESS) {
|
||||||
uError("SML:0x%" PRIx64 " smlParseInfluxLine failed", info->id);
|
uError("SML:0x%" PRIx64 " smlParseInfluxLine failed", info->id);
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -2184,7 +2191,7 @@ static int32_t smlParseInfluxLine(SSmlHandle *info, const char *sql) {
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t smlParseTelnetLine(SSmlHandle *info, void *data) {
|
static int32_t smlParseTelnetLine(SSmlHandle *info, void *data, const int len) {
|
||||||
int ret = TSDB_CODE_SUCCESS;
|
int ret = TSDB_CODE_SUCCESS;
|
||||||
SSmlTableInfo *tinfo = smlBuildTableInfo();
|
SSmlTableInfo *tinfo = smlBuildTableInfo();
|
||||||
if (!tinfo) {
|
if (!tinfo) {
|
||||||
|
@ -2198,7 +2205,7 @@ static int32_t smlParseTelnetLine(SSmlHandle *info, void *data) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (info->protocol == TSDB_SML_TELNET_PROTOCOL) {
|
if (info->protocol == TSDB_SML_TELNET_PROTOCOL) {
|
||||||
ret = smlParseTelnetString(info, (const char *)data, tinfo, cols);
|
ret = smlParseTelnetString(info, (const char *)data, (char*)data + len, tinfo, cols);
|
||||||
} else if (info->protocol == TSDB_SML_JSON_PROTOCOL) {
|
} else if (info->protocol == TSDB_SML_JSON_PROTOCOL) {
|
||||||
ret = smlParseJSONString(info, (cJSON *)data, tinfo, cols);
|
ret = smlParseJSONString(info, (cJSON *)data, tinfo, cols);
|
||||||
} else {
|
} else {
|
||||||
|
@ -2289,7 +2296,7 @@ static int32_t smlParseJSON(SSmlHandle *info, char *payload) {
|
||||||
|
|
||||||
for (int32_t i = 0; i < payloadNum; ++i) {
|
for (int32_t i = 0; i < payloadNum; ++i) {
|
||||||
cJSON *dataPoint = (payloadNum == 1 && cJSON_IsObject(root)) ? root : cJSON_GetArrayItem(root, i);
|
cJSON *dataPoint = (payloadNum == 1 && cJSON_IsObject(root)) ? root : cJSON_GetArrayItem(root, i);
|
||||||
ret = smlParseTelnetLine(info, dataPoint);
|
ret = smlParseTelnetLine(info, dataPoint, -1);
|
||||||
if (ret != TSDB_CODE_SUCCESS) {
|
if (ret != TSDB_CODE_SUCCESS) {
|
||||||
uError("SML:0x%" PRIx64 " Invalid JSON Payload", info->id);
|
uError("SML:0x%" PRIx64 " Invalid JSON Payload", info->id);
|
||||||
goto end;
|
goto end;
|
||||||
|
@ -2378,10 +2385,14 @@ static void smlPrintStatisticInfo(SSmlHandle *info) {
|
||||||
info->cost.endTime - info->cost.insertRpcTime, info->cost.endTime - info->cost.parseTime);
|
info->cost.endTime - info->cost.insertRpcTime, info->cost.endTime - info->cost.parseTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t smlParseLine(SSmlHandle *info, char *lines[], int numLines) {
|
static int32_t smlParseLine(SSmlHandle *info, char *lines[], char* rawLine, char* rawLineEnd, int numLines) {
|
||||||
int32_t code = TSDB_CODE_SUCCESS;
|
int32_t code = TSDB_CODE_SUCCESS;
|
||||||
if (info->protocol == TSDB_SML_JSON_PROTOCOL) {
|
if (info->protocol == TSDB_SML_JSON_PROTOCOL) {
|
||||||
code = smlParseJSON(info, *lines);
|
if(lines){
|
||||||
|
code = smlParseJSON(info, *lines);
|
||||||
|
}else if(rawLine){
|
||||||
|
code = smlParseJSON(info, rawLine);
|
||||||
|
}
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
uError("SML:0x%" PRIx64 " smlParseJSON failed:%s", info->id, *lines);
|
uError("SML:0x%" PRIx64 " smlParseJSON failed:%s", info->id, *lines);
|
||||||
return code;
|
return code;
|
||||||
|
@ -2390,28 +2401,46 @@ static int32_t smlParseLine(SSmlHandle *info, char *lines[], int numLines) {
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int32_t i = 0; i < numLines; ++i) {
|
for (int32_t i = 0; i < numLines; ++i) {
|
||||||
|
char *tmp = NULL;
|
||||||
|
int len = 0;
|
||||||
|
if(lines){
|
||||||
|
tmp = lines[i];
|
||||||
|
len = strlen(tmp);
|
||||||
|
}else if(rawLine){
|
||||||
|
tmp = rawLine;
|
||||||
|
while(rawLine < rawLineEnd){
|
||||||
|
if(*(rawLine++) == '\n'){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
len++;
|
||||||
|
}
|
||||||
|
if(info->protocol == TSDB_SML_LINE_PROTOCOL && tmp[0] == '#'){ // this line is comment
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (info->protocol == TSDB_SML_LINE_PROTOCOL) {
|
if (info->protocol == TSDB_SML_LINE_PROTOCOL) {
|
||||||
code = smlParseInfluxLine(info, lines[i]);
|
code = smlParseInfluxLine(info, tmp, len);
|
||||||
} else if (info->protocol == TSDB_SML_TELNET_PROTOCOL) {
|
} else if (info->protocol == TSDB_SML_TELNET_PROTOCOL) {
|
||||||
code = smlParseTelnetLine(info, lines[i]);
|
code = smlParseTelnetLine(info, tmp, len);
|
||||||
} else {
|
} else {
|
||||||
ASSERT(0);
|
ASSERT(0);
|
||||||
}
|
}
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
uError("SML:0x%" PRIx64 " smlParseLine failed. line %d : %s", info->id, i, lines[i]);
|
uError("SML:0x%" PRIx64 " smlParseLine failed. line %d : %s", info->id, i, tmp);
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int smlProcess(SSmlHandle *info, char *lines[], int numLines) {
|
static int smlProcess(SSmlHandle *info, char *lines[], char* rawLine, char* rawLineEnd, int numLines) {
|
||||||
int32_t code = TSDB_CODE_SUCCESS;
|
int32_t code = TSDB_CODE_SUCCESS;
|
||||||
int32_t retryNum = 0;
|
int32_t retryNum = 0;
|
||||||
|
|
||||||
info->cost.parseTime = taosGetTimestampUs();
|
info->cost.parseTime = taosGetTimestampUs();
|
||||||
|
|
||||||
code = smlParseLine(info, lines, numLines);
|
code = smlParseLine(info, lines, rawLine, rawLineEnd, numLines);
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
uError("SML:0x%" PRIx64 " smlParseLine error : %s", info->id, tstrerror(code));
|
uError("SML:0x%" PRIx64 " smlParseLine error : %s", info->id, tstrerror(code));
|
||||||
return code;
|
return code;
|
||||||
|
@ -2504,39 +2533,8 @@ static void smlInsertCallback(void *param, void *res, int32_t code) {
|
||||||
smlDestroyInfo(info);
|
smlDestroyInfo(info);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* taos_schemaless_insert() parse and insert data points into database according to
|
|
||||||
* different protocol.
|
|
||||||
*
|
|
||||||
* @param $lines input array may contain multiple lines, each line indicates a data point.
|
|
||||||
* If protocol=2 is used input array should contain single JSON
|
|
||||||
* string(e.g. char *lines[] = {"$JSON_string"}). If need to insert
|
|
||||||
* multiple data points in JSON format, should include them in $JSON_string
|
|
||||||
* as a JSON array.
|
|
||||||
* @param $numLines indicates how many data points in $lines.
|
|
||||||
* If protocol = 2 is used this param will be ignored as $lines should
|
|
||||||
* contain single JSON string.
|
|
||||||
* @param $protocol indicates which protocol to use for parsing:
|
|
||||||
* 0 - influxDB line protocol
|
|
||||||
* 1 - OpenTSDB telnet line protocol
|
|
||||||
* 2 - OpenTSDB JSON format protocol
|
|
||||||
* @return return zero for successful insertion. Otherwise return none-zero error code of
|
|
||||||
* failure reason.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
TAOS_RES *taos_schemaless_insert(TAOS *taos, char *lines[], int numLines, int protocol, int precision) {
|
|
||||||
if (NULL == taos) {
|
|
||||||
terrno = TSDB_CODE_TSC_DISCONNECTED;
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
SRequestObj *request = (SRequestObj *)createRequest(*(int64_t *)taos, TSDB_SQL_INSERT);
|
|
||||||
if (!request) {
|
|
||||||
uError("SML:taos_schemaless_insert error request is null");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
TAOS_RES *taos_schemaless_insert_inner(SRequestObj *request, char *lines[], char *rawLine, char *rawLineEnd, int numLines, int protocol, int precision) {
|
||||||
int batchs = 0;
|
int batchs = 0;
|
||||||
STscObj *pTscObj = request->pTscObj;
|
STscObj *pTscObj = request->pTscObj;
|
||||||
|
|
||||||
|
@ -2560,12 +2558,6 @@ TAOS_RES *taos_schemaless_insert(TAOS *taos, char *lines[], int numLines, int pr
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!lines) {
|
|
||||||
request->code = TSDB_CODE_SML_INVALID_DATA;
|
|
||||||
smlBuildInvalidDataMsg(&msg, "lines is null", NULL);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (protocol < TSDB_SML_LINE_PROTOCOL || protocol > TSDB_SML_JSON_PROTOCOL) {
|
if (protocol < TSDB_SML_LINE_PROTOCOL || protocol > TSDB_SML_JSON_PROTOCOL) {
|
||||||
request->code = TSDB_CODE_SML_INVALID_PROTOCOL_TYPE;
|
request->code = TSDB_CODE_SML_INVALID_PROTOCOL_TYPE;
|
||||||
smlBuildInvalidDataMsg(&msg, "protocol invalidate", NULL);
|
smlBuildInvalidDataMsg(&msg, "protocol invalidate", NULL);
|
||||||
|
@ -2616,15 +2608,28 @@ TAOS_RES *taos_schemaless_insert(TAOS *taos, char *lines[], int numLines, int pr
|
||||||
info->affectedRows = perBatch;
|
info->affectedRows = perBatch;
|
||||||
info->pRequest->body.queryFp = smlInsertCallback;
|
info->pRequest->body.queryFp = smlInsertCallback;
|
||||||
info->pRequest->body.param = info;
|
info->pRequest->body.param = info;
|
||||||
int32_t code = smlProcess(info, lines, perBatch);
|
int32_t code = smlProcess(info, lines, rawLine, rawLineEnd, perBatch);
|
||||||
lines += perBatch;
|
if(lines){
|
||||||
|
lines += perBatch;
|
||||||
|
}
|
||||||
|
if(rawLine){
|
||||||
|
int num = 0;
|
||||||
|
while(rawLine < rawLineEnd){
|
||||||
|
if(*(rawLine++) == '\n'){
|
||||||
|
num++;
|
||||||
|
}
|
||||||
|
if(num == perBatch){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
info->pRequest->body.queryFp(info, req, code);
|
info->pRequest->body.queryFp(info, req, code);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tsem_wait(¶ms.sem);
|
tsem_wait(¶ms.sem);
|
||||||
|
|
||||||
end:
|
end:
|
||||||
taosThreadSpinDestroy(¶ms.lock);
|
taosThreadSpinDestroy(¶ms.lock);
|
||||||
tsem_destroy(¶ms.sem);
|
tsem_destroy(¶ms.sem);
|
||||||
// ((STscObj *)taos)->schemalessType = 0;
|
// ((STscObj *)taos)->schemalessType = 0;
|
||||||
|
@ -2632,3 +2637,80 @@ end:
|
||||||
uDebug("resultend:%s", request->msgBuf);
|
uDebug("resultend:%s", request->msgBuf);
|
||||||
return (TAOS_RES *)request;
|
return (TAOS_RES *)request;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* taos_schemaless_insert() parse and insert data points into database according to
|
||||||
|
* different protocol.
|
||||||
|
*
|
||||||
|
* @param $lines input array may contain multiple lines, each line indicates a data point.
|
||||||
|
* If protocol=2 is used input array should contain single JSON
|
||||||
|
* string(e.g. char *lines[] = {"$JSON_string"}). If need to insert
|
||||||
|
* multiple data points in JSON format, should include them in $JSON_string
|
||||||
|
* as a JSON array.
|
||||||
|
* @param $numLines indicates how many data points in $lines.
|
||||||
|
* If protocol = 2 is used this param will be ignored as $lines should
|
||||||
|
* contain single JSON string.
|
||||||
|
* @param $protocol indicates which protocol to use for parsing:
|
||||||
|
* 0 - influxDB line protocol
|
||||||
|
* 1 - OpenTSDB telnet line protocol
|
||||||
|
* 2 - OpenTSDB JSON format protocol
|
||||||
|
* @return return zero for successful insertion. Otherwise return none-zero error code of
|
||||||
|
* failure reason.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
TAOS_RES *taos_schemaless_insert(TAOS *taos, char *lines[], int numLines, int protocol, int precision) {
|
||||||
|
if (NULL == taos) {
|
||||||
|
terrno = TSDB_CODE_TSC_DISCONNECTED;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
SRequestObj *request = (SRequestObj *)createRequest(*(int64_t *)taos, TSDB_SQL_INSERT);
|
||||||
|
if (!request) {
|
||||||
|
uError("SML:taos_schemaless_insert error request is null");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!lines) {
|
||||||
|
SSmlMsgBuf msg = {ERROR_MSG_BUF_DEFAULT_SIZE, request->msgBuf};
|
||||||
|
request->code = TSDB_CODE_SML_INVALID_DATA;
|
||||||
|
smlBuildInvalidDataMsg(&msg, "lines is null", NULL);
|
||||||
|
return (TAOS_RES *)request;
|
||||||
|
}
|
||||||
|
|
||||||
|
return taos_schemaless_insert_inner(request, lines, NULL, NULL, numLines, protocol, precision);
|
||||||
|
}
|
||||||
|
|
||||||
|
TAOS_RES *taos_schemaless_insert_raw(TAOS* taos, char* lines, int len, int32_t *totalRows, int protocol, int precision){
|
||||||
|
if (NULL == taos) {
|
||||||
|
terrno = TSDB_CODE_TSC_DISCONNECTED;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
SRequestObj *request = (SRequestObj *)createRequest(*(int64_t *)taos, TSDB_SQL_INSERT);
|
||||||
|
if (!request) {
|
||||||
|
uError("SML:taos_schemaless_insert error request is null");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!lines || len <= 0) {
|
||||||
|
SSmlMsgBuf msg = {ERROR_MSG_BUF_DEFAULT_SIZE, request->msgBuf};
|
||||||
|
request->code = TSDB_CODE_SML_INVALID_DATA;
|
||||||
|
smlBuildInvalidDataMsg(&msg, "lines is null", NULL);
|
||||||
|
return (TAOS_RES *)request;
|
||||||
|
}
|
||||||
|
|
||||||
|
int numLines = 0;
|
||||||
|
*totalRows = 0;
|
||||||
|
char *tmp = lines;
|
||||||
|
for(int i = 0; i < len; i++){
|
||||||
|
if(lines[i] == '\n' || i == len - 1){
|
||||||
|
numLines++;
|
||||||
|
if(tmp[0] != '#' || protocol != TSDB_SML_LINE_PROTOCOL){ //ignore comment
|
||||||
|
(*totalRows)++;
|
||||||
|
}
|
||||||
|
tmp = lines + i + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return taos_schemaless_insert_inner(request, NULL, lines, lines + len, numLines, protocol, precision);
|
||||||
|
}
|
||||||
|
|
|
@ -152,7 +152,7 @@ int32_t stmtUpdateBindInfo(TAOS_STMT* stmt, STableMeta* pTableMeta, void* tags,
|
||||||
pStmt->bInfo.tbType = pTableMeta->tableType;
|
pStmt->bInfo.tbType = pTableMeta->tableType;
|
||||||
pStmt->bInfo.boundTags = tags;
|
pStmt->bInfo.boundTags = tags;
|
||||||
pStmt->bInfo.tagsCached = false;
|
pStmt->bInfo.tagsCached = false;
|
||||||
strcpy(pStmt->bInfo.stbFName, sTableName);
|
tstrncpy(pStmt->bInfo.stbFName, sTableName, sizeof(pStmt->bInfo.stbFName));
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
|
@ -210,6 +210,8 @@ typedef struct {
|
||||||
typedef struct {
|
typedef struct {
|
||||||
SMqCommitCbParamSet* params;
|
SMqCommitCbParamSet* params;
|
||||||
STqOffset* pOffset;
|
STqOffset* pOffset;
|
||||||
|
/*char topicName[TSDB_TOPIC_FNAME_LEN];*/
|
||||||
|
/*int32_t vgId;*/
|
||||||
} SMqCommitCbParam;
|
} SMqCommitCbParam;
|
||||||
|
|
||||||
tmq_conf_t* tmq_conf_new() {
|
tmq_conf_t* tmq_conf_new() {
|
||||||
|
@ -407,6 +409,14 @@ int32_t tmqCommitDone(SMqCommitCbParamSet* pParamSet) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void tmqCommitRspCountDown(SMqCommitCbParamSet* pParamSet) {
|
||||||
|
int32_t waitingRspNum = atomic_sub_fetch_32(&pParamSet->waitingRspNum, 1);
|
||||||
|
ASSERT(waitingRspNum >= 0);
|
||||||
|
if (waitingRspNum == 0) {
|
||||||
|
tmqCommitDone(pParamSet);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int32_t tmqCommitCb(void* param, SDataBuf* pBuf, int32_t code) {
|
int32_t tmqCommitCb(void* param, SDataBuf* pBuf, int32_t code) {
|
||||||
SMqCommitCbParam* pParam = (SMqCommitCbParam*)param;
|
SMqCommitCbParam* pParam = (SMqCommitCbParam*)param;
|
||||||
SMqCommitCbParamSet* pParamSet = (SMqCommitCbParamSet*)pParam->params;
|
SMqCommitCbParamSet* pParamSet = (SMqCommitCbParamSet*)pParam->params;
|
||||||
|
@ -420,18 +430,13 @@ int32_t tmqCommitCb(void* param, SDataBuf* pBuf, int32_t code) {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
taosMemoryFree(pParam->pOffset);
|
taosMemoryFree(pParam->pOffset);
|
||||||
if (pBuf->pData) taosMemoryFree(pBuf->pData);
|
taosMemoryFree(pBuf->pData);
|
||||||
|
|
||||||
/*tscDebug("receive offset commit cb of %s on vgId:%d, offset is %" PRId64, pParam->pOffset->subKey, pParam->->vgId,
|
/*tscDebug("receive offset commit cb of %s on vgId:%d, offset is %" PRId64, pParam->pOffset->subKey, pParam->->vgId,
|
||||||
* pOffset->version);*/
|
* pOffset->version);*/
|
||||||
|
|
||||||
// count down waiting rsp
|
tmqCommitRspCountDown(pParamSet);
|
||||||
int32_t waitingRspNum = atomic_sub_fetch_32(&pParamSet->waitingRspNum, 1);
|
|
||||||
ASSERT(waitingRspNum >= 0);
|
|
||||||
|
|
||||||
if (waitingRspNum == 0) {
|
|
||||||
tmqCommitDone(pParamSet);
|
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -455,7 +460,10 @@ static int32_t tmqSendCommitReq(tmq_t* tmq, SMqClientVg* pVg, SMqClientTopic* pT
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
void* buf = taosMemoryCalloc(1, sizeof(SMsgHead) + len);
|
void* buf = taosMemoryCalloc(1, sizeof(SMsgHead) + len);
|
||||||
if (buf == NULL) return -1;
|
if (buf == NULL) {
|
||||||
|
taosMemoryFree(pOffset);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
((SMsgHead*)buf)->vgId = htonl(pVg->vgId);
|
((SMsgHead*)buf)->vgId = htonl(pVg->vgId);
|
||||||
|
|
||||||
void* abuf = POINTER_SHIFT(buf, sizeof(SMsgHead));
|
void* abuf = POINTER_SHIFT(buf, sizeof(SMsgHead));
|
||||||
|
@ -468,6 +476,7 @@ static int32_t tmqSendCommitReq(tmq_t* tmq, SMqClientVg* pVg, SMqClientTopic* pT
|
||||||
// build param
|
// build param
|
||||||
SMqCommitCbParam* pParam = taosMemoryCalloc(1, sizeof(SMqCommitCbParam));
|
SMqCommitCbParam* pParam = taosMemoryCalloc(1, sizeof(SMqCommitCbParam));
|
||||||
if (pParam == NULL) {
|
if (pParam == NULL) {
|
||||||
|
taosMemoryFree(pOffset);
|
||||||
taosMemoryFree(buf);
|
taosMemoryFree(buf);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -477,6 +486,7 @@ static int32_t tmqSendCommitReq(tmq_t* tmq, SMqClientVg* pVg, SMqClientTopic* pT
|
||||||
// build send info
|
// build send info
|
||||||
SMsgSendInfo* pMsgSendInfo = taosMemoryCalloc(1, sizeof(SMsgSendInfo));
|
SMsgSendInfo* pMsgSendInfo = taosMemoryCalloc(1, sizeof(SMsgSendInfo));
|
||||||
if (pMsgSendInfo == NULL) {
|
if (pMsgSendInfo == NULL) {
|
||||||
|
taosMemoryFree(pOffset);
|
||||||
taosMemoryFree(buf);
|
taosMemoryFree(buf);
|
||||||
taosMemoryFree(pParam);
|
taosMemoryFree(pParam);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -586,14 +596,10 @@ FAIL:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t tmqCommitInner(tmq_t* tmq, const TAOS_RES* msg, int8_t automatic, int8_t async, tmq_commit_cb* userCb,
|
static int32_t tmqCommitConsumerImpl(tmq_t* tmq, int8_t automatic, int8_t async, tmq_commit_cb* userCb,
|
||||||
void* userParam) {
|
void* userParam) {
|
||||||
int32_t code = -1;
|
int32_t code = -1;
|
||||||
|
|
||||||
if (msg != NULL) {
|
|
||||||
return tmqCommitMsgImpl(tmq, msg, async, userCb, userParam);
|
|
||||||
}
|
|
||||||
|
|
||||||
SMqCommitCbParamSet* pParamSet = taosMemoryCalloc(1, sizeof(SMqCommitCbParamSet));
|
SMqCommitCbParamSet* pParamSet = taosMemoryCalloc(1, sizeof(SMqCommitCbParamSet));
|
||||||
if (pParamSet == NULL) {
|
if (pParamSet == NULL) {
|
||||||
code = TSDB_CODE_OUT_OF_MEMORY;
|
code = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
|
@ -641,33 +647,37 @@ int32_t tmqCommitInner(tmq_t* tmq, const TAOS_RES* msg, int8_t automatic, int8_t
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// no request is sent
|
||||||
if (pParamSet->totalRspNum == 0) {
|
if (pParamSet->totalRspNum == 0) {
|
||||||
tsem_destroy(&pParamSet->rspSem);
|
tsem_destroy(&pParamSet->rspSem);
|
||||||
taosMemoryFree(pParamSet);
|
taosMemoryFree(pParamSet);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t waitingRspNum = atomic_sub_fetch_32(&pParamSet->waitingRspNum, 1);
|
// count down since waiting rsp num init as 1
|
||||||
ASSERT(waitingRspNum >= 0);
|
tmqCommitRspCountDown(pParamSet);
|
||||||
if (waitingRspNum == 0) {
|
|
||||||
tmqCommitDone(pParamSet);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!async) {
|
if (!async) {
|
||||||
tsem_wait(&pParamSet->rspSem);
|
tsem_wait(&pParamSet->rspSem);
|
||||||
code = pParamSet->rspErr;
|
code = pParamSet->rspErr;
|
||||||
tsem_destroy(&pParamSet->rspSem);
|
tsem_destroy(&pParamSet->rspSem);
|
||||||
taosMemoryFree(pParamSet);
|
taosMemoryFree(pParamSet);
|
||||||
}
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
if (!async) {
|
|
||||||
taosArrayDestroyP(pParamSet->successfulOffsets, taosMemoryFree);
|
taosArrayDestroyP(pParamSet->successfulOffsets, taosMemoryFree);
|
||||||
taosArrayDestroyP(pParamSet->failedOffsets, taosMemoryFree);
|
taosArrayDestroyP(pParamSet->failedOffsets, taosMemoryFree);
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t tmqCommitInner(tmq_t* tmq, const TAOS_RES* msg, int8_t automatic, int8_t async, tmq_commit_cb* userCb,
|
||||||
|
void* userParam) {
|
||||||
|
if (msg) {
|
||||||
|
return tmqCommitMsgImpl(tmq, msg, async, userCb, userParam);
|
||||||
|
} else {
|
||||||
|
return tmqCommitConsumerImpl(tmq, automatic, async, userCb, userParam);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void tmqAssignAskEpTask(void* param, void* tmrId) {
|
void tmqAssignAskEpTask(void* param, void* tmrId) {
|
||||||
|
|
|
@ -44,7 +44,7 @@ TEST(testCase, smlParseInfluxString_Test) {
|
||||||
char *tmp = "\\,st,t1=3,t2=4,t3=t3 c1=3i64,c3=\"passit hello,c1=2\",c2=false,c4=4f64 1626006833639000000 ,32,c=3";
|
char *tmp = "\\,st,t1=3,t2=4,t3=t3 c1=3i64,c3=\"passit hello,c1=2\",c2=false,c4=4f64 1626006833639000000 ,32,c=3";
|
||||||
char *sql = (char *)taosMemoryCalloc(256, 1);
|
char *sql = (char *)taosMemoryCalloc(256, 1);
|
||||||
memcpy(sql, tmp, strlen(tmp) + 1);
|
memcpy(sql, tmp, strlen(tmp) + 1);
|
||||||
int ret = smlParseInfluxString(sql, &elements, &msgBuf);
|
int ret = smlParseInfluxString(sql, sql + strlen(sql), &elements, &msgBuf);
|
||||||
ASSERT_EQ(ret, 0);
|
ASSERT_EQ(ret, 0);
|
||||||
ASSERT_EQ(elements.measure, sql);
|
ASSERT_EQ(elements.measure, sql);
|
||||||
ASSERT_EQ(elements.measureLen, strlen(",st"));
|
ASSERT_EQ(elements.measureLen, strlen(",st"));
|
||||||
|
@ -63,14 +63,14 @@ TEST(testCase, smlParseInfluxString_Test) {
|
||||||
tmp = "st,t1=3,t2=4,t3=t3 c1=3i64,c3=\"passit hello,c1=2,c2=false,c4=4f64 1626006833639000000";
|
tmp = "st,t1=3,t2=4,t3=t3 c1=3i64,c3=\"passit hello,c1=2,c2=false,c4=4f64 1626006833639000000";
|
||||||
memcpy(sql, tmp, strlen(tmp) + 1);
|
memcpy(sql, tmp, strlen(tmp) + 1);
|
||||||
memset(&elements, 0, sizeof(SSmlLineInfo));
|
memset(&elements, 0, sizeof(SSmlLineInfo));
|
||||||
ret = smlParseInfluxString(sql, &elements, &msgBuf);
|
ret = smlParseInfluxString(sql, sql + strlen(sql), &elements, &msgBuf);
|
||||||
ASSERT_NE(ret, 0);
|
ASSERT_NE(ret, 0);
|
||||||
|
|
||||||
// case 3 false
|
// case 3 false
|
||||||
tmp = "st, t1=3,t2=4,t3=t3 c1=3i64,c3=\"passit hello,c1=2,c2=false,c4=4f64 1626006833639000000";
|
tmp = "st, t1=3,t2=4,t3=t3 c1=3i64,c3=\"passit hello,c1=2,c2=false,c4=4f64 1626006833639000000";
|
||||||
memcpy(sql, tmp, strlen(tmp) + 1);
|
memcpy(sql, tmp, strlen(tmp) + 1);
|
||||||
memset(&elements, 0, sizeof(SSmlLineInfo));
|
memset(&elements, 0, sizeof(SSmlLineInfo));
|
||||||
ret = smlParseInfluxString(sql, &elements, &msgBuf);
|
ret = smlParseInfluxString(sql, sql + strlen(sql), &elements, &msgBuf);
|
||||||
ASSERT_EQ(ret, 0);
|
ASSERT_EQ(ret, 0);
|
||||||
ASSERT_EQ(elements.cols, sql + elements.measureTagsLen + 1);
|
ASSERT_EQ(elements.cols, sql + elements.measureTagsLen + 1);
|
||||||
ASSERT_EQ(elements.colsLen, strlen("t1=3,t2=4,t3=t3"));
|
ASSERT_EQ(elements.colsLen, strlen("t1=3,t2=4,t3=t3"));
|
||||||
|
@ -79,7 +79,7 @@ TEST(testCase, smlParseInfluxString_Test) {
|
||||||
tmp = "st, c1=3i64,c3=\"passit hello,c1=2\",c2=false,c4=4f64 1626006833639000000";
|
tmp = "st, c1=3i64,c3=\"passit hello,c1=2\",c2=false,c4=4f64 1626006833639000000";
|
||||||
memcpy(sql, tmp, strlen(tmp) + 1);
|
memcpy(sql, tmp, strlen(tmp) + 1);
|
||||||
memset(&elements, 0, sizeof(SSmlLineInfo));
|
memset(&elements, 0, sizeof(SSmlLineInfo));
|
||||||
ret = smlParseInfluxString(sql, &elements, &msgBuf);
|
ret = smlParseInfluxString(sql, sql + strlen(sql), &elements, &msgBuf);
|
||||||
ASSERT_EQ(ret, 0);
|
ASSERT_EQ(ret, 0);
|
||||||
ASSERT_EQ(elements.measure, sql);
|
ASSERT_EQ(elements.measure, sql);
|
||||||
ASSERT_EQ(elements.measureLen, strlen("st"));
|
ASSERT_EQ(elements.measureLen, strlen("st"));
|
||||||
|
@ -98,7 +98,7 @@ TEST(testCase, smlParseInfluxString_Test) {
|
||||||
tmp = " st c1=3i64,c3=\"passit hello,c1=2\",c2=false,c4=4f64 1626006833639000000 ";
|
tmp = " st c1=3i64,c3=\"passit hello,c1=2\",c2=false,c4=4f64 1626006833639000000 ";
|
||||||
memcpy(sql, tmp, strlen(tmp) + 1);
|
memcpy(sql, tmp, strlen(tmp) + 1);
|
||||||
memset(&elements, 0, sizeof(SSmlLineInfo));
|
memset(&elements, 0, sizeof(SSmlLineInfo));
|
||||||
ret = smlParseInfluxString(sql, &elements, &msgBuf);
|
ret = smlParseInfluxString(sql, sql + strlen(sql), &elements, &msgBuf);
|
||||||
ASSERT_EQ(ret, 0);
|
ASSERT_EQ(ret, 0);
|
||||||
ASSERT_EQ(elements.measure, sql + 1);
|
ASSERT_EQ(elements.measure, sql + 1);
|
||||||
ASSERT_EQ(elements.measureLen, strlen("st"));
|
ASSERT_EQ(elements.measureLen, strlen("st"));
|
||||||
|
@ -116,21 +116,21 @@ TEST(testCase, smlParseInfluxString_Test) {
|
||||||
tmp = " st c1=3i64,c3=\"passit hello,c1=2\",c2=false,c4=4f64 ";
|
tmp = " st c1=3i64,c3=\"passit hello,c1=2\",c2=false,c4=4f64 ";
|
||||||
memcpy(sql, tmp, strlen(tmp) + 1);
|
memcpy(sql, tmp, strlen(tmp) + 1);
|
||||||
memset(&elements, 0, sizeof(SSmlLineInfo));
|
memset(&elements, 0, sizeof(SSmlLineInfo));
|
||||||
ret = smlParseInfluxString(sql, &elements, &msgBuf);
|
ret = smlParseInfluxString(sql, sql + strlen(sql), &elements, &msgBuf);
|
||||||
ASSERT_EQ(ret, 0);
|
ASSERT_EQ(ret, 0);
|
||||||
|
|
||||||
// case 7
|
// case 7
|
||||||
tmp = " st , ";
|
tmp = " st , ";
|
||||||
memcpy(sql, tmp, strlen(tmp) + 1);
|
memcpy(sql, tmp, strlen(tmp) + 1);
|
||||||
memset(&elements, 0, sizeof(SSmlLineInfo));
|
memset(&elements, 0, sizeof(SSmlLineInfo));
|
||||||
ret = smlParseInfluxString(sql, &elements, &msgBuf);
|
ret = smlParseInfluxString(sql, sql + strlen(sql), &elements, &msgBuf);
|
||||||
ASSERT_EQ(ret, 0);
|
ASSERT_EQ(ret, 0);
|
||||||
|
|
||||||
// case 8 false
|
// case 8 false
|
||||||
tmp = ", st , ";
|
tmp = ", st , ";
|
||||||
memcpy(sql, tmp, strlen(tmp) + 1);
|
memcpy(sql, tmp, strlen(tmp) + 1);
|
||||||
memset(&elements, 0, sizeof(SSmlLineInfo));
|
memset(&elements, 0, sizeof(SSmlLineInfo));
|
||||||
ret = smlParseInfluxString(sql, &elements, &msgBuf);
|
ret = smlParseInfluxString(sql, sql + strlen(sql), &elements, &msgBuf);
|
||||||
ASSERT_NE(ret, 0);
|
ASSERT_NE(ret, 0);
|
||||||
taosMemoryFree(sql);
|
taosMemoryFree(sql);
|
||||||
}
|
}
|
||||||
|
@ -542,7 +542,7 @@ TEST(testCase, smlParseTelnetLine_error_Test) {
|
||||||
"sys.procs.running 1479496100 42 host= web01",
|
"sys.procs.running 1479496100 42 host= web01",
|
||||||
};
|
};
|
||||||
for (int i = 0; i < sizeof(sql) / sizeof(sql[0]); i++) {
|
for (int i = 0; i < sizeof(sql) / sizeof(sql[0]); i++) {
|
||||||
int ret = smlParseTelnetLine(info, (void *)sql[i]);
|
int ret = smlParseTelnetLine(info, (void *)sql[i], strlen(sql[i]));
|
||||||
ASSERT_NE(ret, 0);
|
ASSERT_NE(ret, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -561,7 +561,7 @@ TEST(testCase, smlParseTelnetLine_diff_type_Test) {
|
||||||
|
|
||||||
int ret = TSDB_CODE_SUCCESS;
|
int ret = TSDB_CODE_SUCCESS;
|
||||||
for (int i = 0; i < sizeof(sql) / sizeof(sql[0]); i++) {
|
for (int i = 0; i < sizeof(sql) / sizeof(sql[0]); i++) {
|
||||||
ret = smlParseTelnetLine(info, (void *)sql[i]);
|
ret = smlParseTelnetLine(info, (void *)sql[i], strlen(sql[i]));
|
||||||
if (ret != TSDB_CODE_SUCCESS) break;
|
if (ret != TSDB_CODE_SUCCESS) break;
|
||||||
}
|
}
|
||||||
ASSERT_NE(ret, 0);
|
ASSERT_NE(ret, 0);
|
||||||
|
@ -617,7 +617,7 @@ TEST(testCase, smlParseTelnetLine_json_error_Test) {
|
||||||
|
|
||||||
int ret = TSDB_CODE_SUCCESS;
|
int ret = TSDB_CODE_SUCCESS;
|
||||||
for (int i = 0; i < sizeof(sql) / sizeof(sql[0]); i++) {
|
for (int i = 0; i < sizeof(sql) / sizeof(sql[0]); i++) {
|
||||||
ret = smlParseTelnetLine(info, (void *)sql[i]);
|
ret = smlParseTelnetLine(info, (void *)sql[i], strlen(sql[i]));
|
||||||
ASSERT_NE(ret, 0);
|
ASSERT_NE(ret, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -653,7 +653,7 @@ TEST(testCase, smlParseTelnetLine_diff_json_type1_Test) {
|
||||||
|
|
||||||
int ret = TSDB_CODE_SUCCESS;
|
int ret = TSDB_CODE_SUCCESS;
|
||||||
for (int i = 0; i < sizeof(sql) / sizeof(sql[0]); i++) {
|
for (int i = 0; i < sizeof(sql) / sizeof(sql[0]); i++) {
|
||||||
ret = smlParseTelnetLine(info, (void *)sql[i]);
|
ret = smlParseTelnetLine(info, (void *)sql[i], strlen(sql[i]));
|
||||||
if (ret != TSDB_CODE_SUCCESS) break;
|
if (ret != TSDB_CODE_SUCCESS) break;
|
||||||
}
|
}
|
||||||
ASSERT_NE(ret, 0);
|
ASSERT_NE(ret, 0);
|
||||||
|
@ -688,7 +688,7 @@ TEST(testCase, smlParseTelnetLine_diff_json_type2_Test) {
|
||||||
};
|
};
|
||||||
int ret = TSDB_CODE_SUCCESS;
|
int ret = TSDB_CODE_SUCCESS;
|
||||||
for (int i = 0; i < sizeof(sql) / sizeof(sql[0]); i++) {
|
for (int i = 0; i < sizeof(sql) / sizeof(sql[0]); i++) {
|
||||||
ret = smlParseTelnetLine(info, (void *)sql[i]);
|
ret = smlParseTelnetLine(info, (void *)sql[i], strlen(sql[i]));
|
||||||
if (ret != TSDB_CODE_SUCCESS) break;
|
if (ret != TSDB_CODE_SUCCESS) break;
|
||||||
}
|
}
|
||||||
ASSERT_NE(ret, 0);
|
ASSERT_NE(ret, 0);
|
||||||
|
@ -1002,7 +1002,7 @@ TEST(testCase, sml_col_4096_Test) {
|
||||||
|
|
||||||
int ret = TSDB_CODE_SUCCESS;
|
int ret = TSDB_CODE_SUCCESS;
|
||||||
for (int i = 0; i < sizeof(sql) / sizeof(sql[0]); i++) {
|
for (int i = 0; i < sizeof(sql) / sizeof(sql[0]); i++) {
|
||||||
ret = smlParseInfluxLine(info, sql[i]);
|
ret = smlParseInfluxLine(info, sql[i], strlen(sql[i]));
|
||||||
if (ret != TSDB_CODE_SUCCESS) break;
|
if (ret != TSDB_CODE_SUCCESS) break;
|
||||||
}
|
}
|
||||||
ASSERT_NE(ret, 0);
|
ASSERT_NE(ret, 0);
|
||||||
|
|
|
@ -62,12 +62,6 @@ static const SSysDbTableSchema snodesSchema[] = {
|
||||||
{.name = "create_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP, .sysInfo = true},
|
{.name = "create_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP, .sysInfo = true},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const SSysDbTableSchema bnodesSchema[] = {
|
|
||||||
{.name = "id", .bytes = 4, .type = TSDB_DATA_TYPE_INT, .sysInfo = true},
|
|
||||||
{.name = "endpoint", .bytes = TSDB_EP_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = true},
|
|
||||||
{.name = "create_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP, .sysInfo = true},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const SSysDbTableSchema clusterSchema[] = {
|
static const SSysDbTableSchema clusterSchema[] = {
|
||||||
{.name = "id", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT, .sysInfo = true},
|
{.name = "id", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT, .sysInfo = true},
|
||||||
{.name = "name", .bytes = TSDB_CLUSTER_ID_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = true},
|
{.name = "name", .bytes = TSDB_CLUSTER_ID_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = true},
|
||||||
|
@ -277,7 +271,6 @@ static const SSysTableMeta infosMeta[] = {
|
||||||
{TSDB_INS_TABLE_MODULES, modulesSchema, tListLen(modulesSchema), true},
|
{TSDB_INS_TABLE_MODULES, modulesSchema, tListLen(modulesSchema), true},
|
||||||
{TSDB_INS_TABLE_QNODES, qnodesSchema, tListLen(qnodesSchema), true},
|
{TSDB_INS_TABLE_QNODES, qnodesSchema, tListLen(qnodesSchema), true},
|
||||||
// {TSDB_INS_TABLE_SNODES, snodesSchema, tListLen(snodesSchema)},
|
// {TSDB_INS_TABLE_SNODES, snodesSchema, tListLen(snodesSchema)},
|
||||||
// {TSDB_INS_TABLE_BNODES, bnodesSchema, tListLen(bnodesSchema)},
|
|
||||||
{TSDB_INS_TABLE_CLUSTER, clusterSchema, tListLen(clusterSchema), true},
|
{TSDB_INS_TABLE_CLUSTER, clusterSchema, tListLen(clusterSchema), true},
|
||||||
{TSDB_INS_TABLE_DATABASES, userDBSchema, tListLen(userDBSchema), false},
|
{TSDB_INS_TABLE_DATABASES, userDBSchema, tListLen(userDBSchema), false},
|
||||||
{TSDB_INS_TABLE_FUNCTIONS, userFuncSchema, tListLen(userFuncSchema), false},
|
{TSDB_INS_TABLE_FUNCTIONS, userFuncSchema, tListLen(userFuncSchema), false},
|
||||||
|
|
|
@ -1892,12 +1892,13 @@ char* dumpBlockData(SSDataBlock* pDataBlock, const char* flag, char** pDataBuf)
|
||||||
|
|
||||||
for (int32_t k = 0; k < colNum; k++) {
|
for (int32_t k = 0; k < colNum; k++) {
|
||||||
SColumnInfoData* pColInfoData = taosArrayGet(pDataBlock->pDataBlock, k);
|
SColumnInfoData* pColInfoData = taosArrayGet(pDataBlock->pDataBlock, k);
|
||||||
void* var = POINTER_SHIFT(pColInfoData->pData, j * pColInfoData->info.bytes);
|
|
||||||
if (colDataIsNull(pColInfoData, rows, j, NULL) || !pColInfoData->pData) {
|
if (colDataIsNull(pColInfoData, rows, j, NULL) || !pColInfoData->pData) {
|
||||||
len += snprintf(dumpBuf + len, size - len, " %15s |", "NULL");
|
len += snprintf(dumpBuf + len, size - len, " %15s |", "NULL");
|
||||||
if (len >= size - 1) return dumpBuf;
|
if (len >= size - 1) return dumpBuf;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void* var = colDataGetData(pColInfoData, j);
|
||||||
switch (pColInfoData->info.type) {
|
switch (pColInfoData->info.type) {
|
||||||
case TSDB_DATA_TYPE_TIMESTAMP:
|
case TSDB_DATA_TYPE_TIMESTAMP:
|
||||||
memset(pBuf, 0, sizeof(pBuf));
|
memset(pBuf, 0, sizeof(pBuf));
|
||||||
|
@ -1926,8 +1927,8 @@ char* dumpBlockData(SSDataBlock* pDataBlock, const char* flag, char** pDataBuf)
|
||||||
if (len >= size - 1) return dumpBuf;
|
if (len >= size - 1) return dumpBuf;
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_DOUBLE:
|
case TSDB_DATA_TYPE_DOUBLE:
|
||||||
len += snprintf(dumpBuf + len, size - len, " %15lf |", *(double*)var);
|
// len += snprintf(dumpBuf + len, size - len, " %15lf |", *(double*)var);
|
||||||
if (len >= size - 1) return dumpBuf;
|
// if (len >= size - 1) return dumpBuf;
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_BOOL:
|
case TSDB_DATA_TYPE_BOOL:
|
||||||
len += snprintf(dumpBuf + len, size - len, " %15d |", *(bool*)var);
|
len += snprintf(dumpBuf + len, size - len, " %15d |", *(bool*)var);
|
||||||
|
|
|
@ -46,7 +46,6 @@ int32_t tsMnodeShmSize = TSDB_MAX_MSG_SIZE * 2 + 1024;
|
||||||
int32_t tsVnodeShmSize = TSDB_MAX_MSG_SIZE * 10 + 1024;
|
int32_t tsVnodeShmSize = TSDB_MAX_MSG_SIZE * 10 + 1024;
|
||||||
int32_t tsQnodeShmSize = TSDB_MAX_MSG_SIZE * 4 + 1024;
|
int32_t tsQnodeShmSize = TSDB_MAX_MSG_SIZE * 4 + 1024;
|
||||||
int32_t tsSnodeShmSize = TSDB_MAX_MSG_SIZE * 4 + 1024;
|
int32_t tsSnodeShmSize = TSDB_MAX_MSG_SIZE * 4 + 1024;
|
||||||
int32_t tsBnodeShmSize = TSDB_MAX_MSG_SIZE * 4 + 1024;
|
|
||||||
int32_t tsNumOfShmThreads = 1;
|
int32_t tsNumOfShmThreads = 1;
|
||||||
|
|
||||||
// queue & threads
|
// queue & threads
|
||||||
|
@ -358,7 +357,6 @@ static int32_t taosAddServerCfg(SConfig *pCfg) {
|
||||||
if (cfgAddInt32(pCfg, "vnodeShmSize", tsVnodeShmSize, TSDB_MAX_MSG_SIZE * 2 + 1024, INT32_MAX, 0) != 0) return -1;
|
if (cfgAddInt32(pCfg, "vnodeShmSize", tsVnodeShmSize, TSDB_MAX_MSG_SIZE * 2 + 1024, INT32_MAX, 0) != 0) return -1;
|
||||||
if (cfgAddInt32(pCfg, "qnodeShmSize", tsQnodeShmSize, TSDB_MAX_MSG_SIZE * 2 + 1024, INT32_MAX, 0) != 0) return -1;
|
if (cfgAddInt32(pCfg, "qnodeShmSize", tsQnodeShmSize, TSDB_MAX_MSG_SIZE * 2 + 1024, INT32_MAX, 0) != 0) return -1;
|
||||||
if (cfgAddInt32(pCfg, "snodeShmSize", tsSnodeShmSize, TSDB_MAX_MSG_SIZE * 2 + 1024, INT32_MAX, 0) != 0) return -1;
|
if (cfgAddInt32(pCfg, "snodeShmSize", tsSnodeShmSize, TSDB_MAX_MSG_SIZE * 2 + 1024, INT32_MAX, 0) != 0) return -1;
|
||||||
if (cfgAddInt32(pCfg, "bnodeShmSize", tsBnodeShmSize, TSDB_MAX_MSG_SIZE * 2 + 1024, INT32_MAX, 0) != 0) return -1;
|
|
||||||
if (cfgAddInt32(pCfg, "numOfShmThreads", tsNumOfShmThreads, 1, 1024, 0) != 0) return -1;
|
if (cfgAddInt32(pCfg, "numOfShmThreads", tsNumOfShmThreads, 1, 1024, 0) != 0) return -1;
|
||||||
|
|
||||||
tsNumOfRpcThreads = tsNumOfCores / 2;
|
tsNumOfRpcThreads = tsNumOfCores / 2;
|
||||||
|
@ -707,7 +705,6 @@ static int32_t taosSetServerCfg(SConfig *pCfg) {
|
||||||
tsVnodeShmSize = cfgGetItem(pCfg, "vnodeShmSize")->i32;
|
tsVnodeShmSize = cfgGetItem(pCfg, "vnodeShmSize")->i32;
|
||||||
tsQnodeShmSize = cfgGetItem(pCfg, "qnodeShmSize")->i32;
|
tsQnodeShmSize = cfgGetItem(pCfg, "qnodeShmSize")->i32;
|
||||||
tsSnodeShmSize = cfgGetItem(pCfg, "snodeShmSize")->i32;
|
tsSnodeShmSize = cfgGetItem(pCfg, "snodeShmSize")->i32;
|
||||||
tsBnodeShmSize = cfgGetItem(pCfg, "bnodeShmSize")->i32;
|
|
||||||
|
|
||||||
tsNumOfRpcThreads = cfgGetItem(pCfg, "numOfRpcThreads")->i32;
|
tsNumOfRpcThreads = cfgGetItem(pCfg, "numOfRpcThreads")->i32;
|
||||||
tsNumOfCommitThreads = cfgGetItem(pCfg, "numOfCommitThreads")->i32;
|
tsNumOfCommitThreads = cfgGetItem(pCfg, "numOfCommitThreads")->i32;
|
||||||
|
@ -780,12 +777,6 @@ int32_t taosSetCfg(SConfig *pCfg, char *name) {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'b': {
|
|
||||||
if (strcasecmp("bnodeShmSize", name) == 0) {
|
|
||||||
tsBnodeShmSize = cfgGetItem(pCfg, "bnodeShmSize")->i32;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 'c': {
|
case 'c': {
|
||||||
if (strcasecmp("charset", name) == 0) {
|
if (strcasecmp("charset", name) == 0) {
|
||||||
const char *locale = cfgGetItem(pCfg, "locale")->str;
|
const char *locale = cfgGetItem(pCfg, "locale")->str;
|
||||||
|
|
|
@ -1448,7 +1448,7 @@ void tFreeSGetUserAuthRsp(SGetUserAuthRsp *pRsp) {
|
||||||
taosHashCleanup(pRsp->writeDbs);
|
taosHashCleanup(pRsp->writeDbs);
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t tSerializeSCreateDropMQSBNodeReq(void *buf, int32_t bufLen, SMCreateQnodeReq *pReq) {
|
int32_t tSerializeSCreateDropMQSNodeReq(void *buf, int32_t bufLen, SMCreateQnodeReq *pReq) {
|
||||||
SEncoder encoder = {0};
|
SEncoder encoder = {0};
|
||||||
tEncoderInit(&encoder, buf, bufLen);
|
tEncoderInit(&encoder, buf, bufLen);
|
||||||
|
|
||||||
|
@ -1461,7 +1461,7 @@ int32_t tSerializeSCreateDropMQSBNodeReq(void *buf, int32_t bufLen, SMCreateQnod
|
||||||
return tlen;
|
return tlen;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t tDeserializeSCreateDropMQSBNodeReq(void *buf, int32_t bufLen, SMCreateQnodeReq *pReq) {
|
int32_t tDeserializeSCreateDropMQSNodeReq(void *buf, int32_t bufLen, SMCreateQnodeReq *pReq) {
|
||||||
SDecoder decoder = {0};
|
SDecoder decoder = {0};
|
||||||
tDecoderInit(&decoder, buf, bufLen);
|
tDecoderInit(&decoder, buf, bufLen);
|
||||||
|
|
||||||
|
|
|
@ -2,5 +2,4 @@ add_subdirectory(mnode)
|
||||||
add_subdirectory(vnode)
|
add_subdirectory(vnode)
|
||||||
add_subdirectory(qnode)
|
add_subdirectory(qnode)
|
||||||
add_subdirectory(snode)
|
add_subdirectory(snode)
|
||||||
add_subdirectory(bnode)
|
|
||||||
add_subdirectory(mgmt)
|
add_subdirectory(mgmt)
|
|
@ -1,14 +0,0 @@
|
||||||
aux_source_directory(src BNODE_SRC)
|
|
||||||
add_library(bnode STATIC ${BNODE_SRC})
|
|
||||||
target_include_directories(
|
|
||||||
bnode
|
|
||||||
PUBLIC "${TD_SOURCE_DIR}/include/dnode/bnode"
|
|
||||||
private "${CMAKE_CURRENT_SOURCE_DIR}/inc"
|
|
||||||
)
|
|
||||||
target_link_libraries(
|
|
||||||
bnode
|
|
||||||
PRIVATE transport
|
|
||||||
PRIVATE os
|
|
||||||
PRIVATE common
|
|
||||||
PRIVATE util
|
|
||||||
)
|
|
|
@ -1,40 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can use, redistribute, and/or modify
|
|
||||||
* it under the terms of the GNU Affero General Public License, version 3
|
|
||||||
* or later ("AGPL"), as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _TD_BNODE_INT_H_
|
|
||||||
#define _TD_BNODE_INT_H_
|
|
||||||
|
|
||||||
#include "os.h"
|
|
||||||
|
|
||||||
#include "tarray.h"
|
|
||||||
#include "tlog.h"
|
|
||||||
#include "tmsg.h"
|
|
||||||
#include "trpc.h"
|
|
||||||
|
|
||||||
#include "bnode.h"
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef struct SBnode {
|
|
||||||
SMsgCb msgCb;
|
|
||||||
} SBnode;
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /*_TD_BNODE_INT_H_*/
|
|
|
@ -1,28 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can use, redistribute, and/or modify
|
|
||||||
* it under the terms of the GNU Affero General Public License, version 3
|
|
||||||
* or later ("AGPL"), as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "bndInt.h"
|
|
||||||
|
|
||||||
SBnode *bndOpen(const char *path, const SBnodeOpt *pOption) {
|
|
||||||
SBnode *pBnode = taosMemoryCalloc(1, sizeof(SBnode));
|
|
||||||
pBnode->msgCb = pOption->msgCb;
|
|
||||||
return pBnode;
|
|
||||||
}
|
|
||||||
|
|
||||||
void bndClose(SBnode *pBnode) { taosMemoryFree(pBnode); }
|
|
||||||
|
|
||||||
int32_t bndGetLoad(SBnode *pBnode, SBnodeLoad *pLoad) { return 0; }
|
|
||||||
|
|
||||||
int32_t bndProcessWMsgs(SBnode *pBnode, SArray *pMsgs) { return 0; }
|
|
|
@ -1,6 +1,5 @@
|
||||||
add_subdirectory(node_mgmt)
|
add_subdirectory(node_mgmt)
|
||||||
add_subdirectory(node_util)
|
add_subdirectory(node_util)
|
||||||
add_subdirectory(mgmt_bnode)
|
|
||||||
add_subdirectory(mgmt_mnode)
|
add_subdirectory(mgmt_mnode)
|
||||||
add_subdirectory(mgmt_qnode)
|
add_subdirectory(mgmt_qnode)
|
||||||
add_subdirectory(mgmt_snode)
|
add_subdirectory(mgmt_snode)
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
aux_source_directory(src MGMT_BNODE)
|
|
||||||
add_library(mgmt_bnode STATIC ${MGMT_BNODE})
|
|
||||||
target_include_directories(
|
|
||||||
mgmt_bnode
|
|
||||||
PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/inc"
|
|
||||||
)
|
|
||||||
target_link_libraries(
|
|
||||||
mgmt_bnode node_util
|
|
||||||
)
|
|
|
@ -1,53 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can use, redistribute, and/or modify
|
|
||||||
* it under the terms of the GNU Affero General Public License, version 3
|
|
||||||
* or later ("AGPL"), as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _TD_DND_BNODE_INT_H_
|
|
||||||
#define _TD_DND_BNODE_INT_H_
|
|
||||||
|
|
||||||
#include "dmUtil.h"
|
|
||||||
|
|
||||||
#include "bnode.h"
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef struct SBnodeMgmt {
|
|
||||||
SDnodeData *pData;
|
|
||||||
SBnode *pBnode;
|
|
||||||
SMsgCb msgCb;
|
|
||||||
const char *path;
|
|
||||||
const char *name;
|
|
||||||
SMultiWorker writeWorker;
|
|
||||||
SSingleWorker monitorWorker;
|
|
||||||
} SBnodeMgmt;
|
|
||||||
|
|
||||||
// bmHandle.c
|
|
||||||
SArray *bmGetMsgHandles();
|
|
||||||
int32_t bmProcessCreateReq(const SMgmtInputOpt *pInput, SRpcMsg *pMsg);
|
|
||||||
int32_t bmProcessDropReq(const SMgmtInputOpt *pInput, SRpcMsg *pMsg);
|
|
||||||
int32_t bmProcessGetMonBmInfoReq(SBnodeMgmt *pMgmt, SRpcMsg *pMsg);
|
|
||||||
|
|
||||||
// bmWorker.c
|
|
||||||
int32_t bmStartWorker(SBnodeMgmt *pMgmt);
|
|
||||||
void bmStopWorker(SBnodeMgmt *pMgmt);
|
|
||||||
int32_t bmPutNodeMsgToWriteQueue(SBnodeMgmt *pMgmt, SRpcMsg *pMsg);
|
|
||||||
int32_t bmPutNodeMsgToMonitorQueue(SBnodeMgmt *pMgmt, SRpcMsg *pMsg);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /*_TD_DND_BNODE_INT_H_*/
|
|
|
@ -1,105 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can use, redistribute, and/or modify
|
|
||||||
* it under the terms of the GNU Affero General Public License, version 3
|
|
||||||
* or later ("AGPL"), as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <http:www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define _DEFAULT_SOURCE
|
|
||||||
#include "bmInt.h"
|
|
||||||
|
|
||||||
void bmGetMonitorInfo(SBnodeMgmt *pMgmt, SMonBmInfo *bmInfo) {}
|
|
||||||
|
|
||||||
int32_t bmProcessGetMonBmInfoReq(SBnodeMgmt *pMgmt, SRpcMsg *pMsg) {
|
|
||||||
SMonBmInfo bmInfo = {0};
|
|
||||||
bmGetMonitorInfo(pMgmt, &bmInfo);
|
|
||||||
dmGetMonitorSystemInfo(&bmInfo.sys);
|
|
||||||
monGetLogs(&bmInfo.log);
|
|
||||||
|
|
||||||
int32_t rspLen = tSerializeSMonBmInfo(NULL, 0, &bmInfo);
|
|
||||||
if (rspLen < 0) {
|
|
||||||
terrno = TSDB_CODE_INVALID_MSG;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void *pRsp = rpcMallocCont(rspLen);
|
|
||||||
if (pRsp == NULL) {
|
|
||||||
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
tSerializeSMonBmInfo(pRsp, rspLen, &bmInfo);
|
|
||||||
pMsg->info.rsp = pRsp;
|
|
||||||
pMsg->info.rspLen = rspLen;
|
|
||||||
tFreeSMonBmInfo(&bmInfo);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int32_t bmProcessCreateReq(const SMgmtInputOpt *pInput, SRpcMsg *pMsg) {
|
|
||||||
SDCreateBnodeReq createReq = {0};
|
|
||||||
if (tDeserializeSCreateDropMQSBNodeReq(pMsg->pCont, pMsg->contLen, &createReq) != 0) {
|
|
||||||
terrno = TSDB_CODE_INVALID_MSG;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pInput->pData->dnodeId != 0 && createReq.dnodeId != pInput->pData->dnodeId) {
|
|
||||||
terrno = TSDB_CODE_INVALID_OPTION;
|
|
||||||
dError("failed to create bnode since %s, input:%d cur:%d", terrstr(), createReq.dnodeId, pInput->pData->dnodeId);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool deployed = true;
|
|
||||||
if (dmWriteFile(pInput->path, pInput->name, deployed) != 0) {
|
|
||||||
dError("failed to write bnode file since %s", terrstr());
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int32_t bmProcessDropReq(const SMgmtInputOpt *pInput, SRpcMsg *pMsg) {
|
|
||||||
SDDropBnodeReq dropReq = {0};
|
|
||||||
if (tDeserializeSCreateDropMQSBNodeReq(pMsg->pCont, pMsg->contLen, &dropReq) != 0) {
|
|
||||||
terrno = TSDB_CODE_INVALID_MSG;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pInput->pData->dnodeId != 0 && dropReq.dnodeId != pInput->pData->dnodeId) {
|
|
||||||
terrno = TSDB_CODE_INVALID_OPTION;
|
|
||||||
dError("failed to drop bnode since %s", terrstr());
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool deployed = false;
|
|
||||||
if (dmWriteFile(pInput->path, pInput->name, deployed) != 0) {
|
|
||||||
dError("failed to write bnode file since %s", terrstr());
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
SArray *bmGetMsgHandles() {
|
|
||||||
int32_t code = -1;
|
|
||||||
SArray *pArray = taosArrayInit(2, sizeof(SMgmtHandle));
|
|
||||||
if (pArray == NULL) goto _OVER;
|
|
||||||
|
|
||||||
if (dmSetMgmtHandle(pArray, TDMT_MON_BM_INFO, bmPutNodeMsgToMonitorQueue, 0) == NULL) goto _OVER;
|
|
||||||
|
|
||||||
code = 0;
|
|
||||||
_OVER:
|
|
||||||
if (code != 0) {
|
|
||||||
taosArrayDestroy(pArray);
|
|
||||||
return NULL;
|
|
||||||
} else {
|
|
||||||
return pArray;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,79 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can use, redistribute, and/or modify
|
|
||||||
* it under the terms of the GNU Affero General Public License, version 3
|
|
||||||
* or later ("AGPL"), as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <http:www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define _DEFAULT_SOURCE
|
|
||||||
#include "bmInt.h"
|
|
||||||
|
|
||||||
static int32_t bmRequire(const SMgmtInputOpt *pInput, bool *required) {
|
|
||||||
return dmReadFile(pInput->path, pInput->name, required);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void bmInitOption(SBnodeMgmt *pMgmt, SBnodeOpt *pOption) { pOption->msgCb = pMgmt->msgCb; }
|
|
||||||
|
|
||||||
static void bmClose(SBnodeMgmt *pMgmt) {
|
|
||||||
if (pMgmt->pBnode != NULL) {
|
|
||||||
bmStopWorker(pMgmt);
|
|
||||||
bndClose(pMgmt->pBnode);
|
|
||||||
pMgmt->pBnode = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
taosMemoryFree(pMgmt);
|
|
||||||
}
|
|
||||||
|
|
||||||
int32_t bmOpen(SMgmtInputOpt *pInput, SMgmtOutputOpt *pOutput) {
|
|
||||||
SBnodeMgmt *pMgmt = taosMemoryCalloc(1, sizeof(SBnodeMgmt));
|
|
||||||
if (pMgmt == NULL) {
|
|
||||||
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
pMgmt->pData = pInput->pData;
|
|
||||||
pMgmt->path = pInput->path;
|
|
||||||
pMgmt->name = pInput->name;
|
|
||||||
pMgmt->msgCb = pInput->msgCb;
|
|
||||||
pMgmt->msgCb.mgmt = pMgmt;
|
|
||||||
|
|
||||||
SBnodeOpt option = {0};
|
|
||||||
bmInitOption(pMgmt, &option);
|
|
||||||
pMgmt->pBnode = bndOpen(pMgmt->path, &option);
|
|
||||||
if (pMgmt->pBnode == NULL) {
|
|
||||||
dError("failed to open bnode since %s", terrstr());
|
|
||||||
bmClose(pMgmt);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
tmsgReportStartup("bnode-impl", "initialized");
|
|
||||||
|
|
||||||
if (bmStartWorker(pMgmt) != 0) {
|
|
||||||
dError("failed to start bnode worker since %s", terrstr());
|
|
||||||
bmClose(pMgmt);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
tmsgReportStartup("bnode-worker", "initialized");
|
|
||||||
|
|
||||||
pOutput->pMgmt = pMgmt;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
SMgmtFunc bmGetMgmtFunc() {
|
|
||||||
SMgmtFunc mgmtFunc = {0};
|
|
||||||
mgmtFunc.openFp = bmOpen;
|
|
||||||
mgmtFunc.closeFp = (NodeCloseFp)bmClose;
|
|
||||||
mgmtFunc.createFp = (NodeCreateFp)bmProcessCreateReq;
|
|
||||||
mgmtFunc.dropFp = (NodeDropFp)bmProcessDropReq;
|
|
||||||
mgmtFunc.requiredFp = bmRequire;
|
|
||||||
mgmtFunc.getHandlesFp = bmGetMsgHandles;
|
|
||||||
|
|
||||||
return mgmtFunc;
|
|
||||||
}
|
|
|
@ -1,150 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can use, redistribute, and/or modify
|
|
||||||
* it under the terms of the GNU Affero General Public License, version 3
|
|
||||||
* or later ("AGPL"), as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <http:www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define _DEFAULT_SOURCE
|
|
||||||
#include "bmInt.h"
|
|
||||||
|
|
||||||
static void bmSendErrorRsp(SRpcMsg *pMsg, int32_t code) {
|
|
||||||
SRpcMsg rsp = {.code = code, .info = pMsg->info};
|
|
||||||
tmsgSendRsp(&rsp);
|
|
||||||
|
|
||||||
dTrace("msg:%p, is freed", pMsg);
|
|
||||||
rpcFreeCont(pMsg->pCont);
|
|
||||||
taosFreeQitem(pMsg);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void bmSendErrorRsps(STaosQall *qall, int32_t numOfMsgs, int32_t code) {
|
|
||||||
for (int32_t i = 0; i < numOfMsgs; ++i) {
|
|
||||||
SRpcMsg *pMsg = NULL;
|
|
||||||
taosGetQitem(qall, (void **)&pMsg);
|
|
||||||
if (pMsg != NULL) {
|
|
||||||
bmSendErrorRsp(pMsg, code);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void bmSendRsp(SRpcMsg *pMsg, int32_t code) {
|
|
||||||
SRpcMsg rsp = {
|
|
||||||
.code = code,
|
|
||||||
.pCont = pMsg->info.rsp,
|
|
||||||
.contLen = pMsg->info.rspLen,
|
|
||||||
.info = pMsg->info,
|
|
||||||
};
|
|
||||||
tmsgSendRsp(&rsp);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void bmProcessMonitorQueue(SQueueInfo *pInfo, SRpcMsg *pMsg) {
|
|
||||||
SBnodeMgmt *pMgmt = pInfo->ahandle;
|
|
||||||
int32_t code = -1;
|
|
||||||
dTrace("msg:%p, get from bnode-monitor queue", pMsg);
|
|
||||||
|
|
||||||
if (pMsg->msgType == TDMT_MON_BM_INFO) {
|
|
||||||
code = bmProcessGetMonBmInfoReq(pMgmt, pMsg);
|
|
||||||
} else {
|
|
||||||
terrno = TSDB_CODE_MSG_NOT_PROCESSED;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (IsReq(pMsg)) {
|
|
||||||
if (code != 0 && terrno != 0) code = terrno;
|
|
||||||
bmSendRsp(pMsg, code);
|
|
||||||
}
|
|
||||||
|
|
||||||
dTrace("msg:%p, is freed, code:0x%x", pMsg, code);
|
|
||||||
rpcFreeCont(pMsg->pCont);
|
|
||||||
taosFreeQitem(pMsg);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void bmProcessWriteQueue(SQueueInfo *pInfo, STaosQall *qall, int32_t numOfMsgs) {
|
|
||||||
SBnodeMgmt *pMgmt = pInfo->ahandle;
|
|
||||||
|
|
||||||
SArray *pArray = taosArrayInit(numOfMsgs, sizeof(SRpcMsg *));
|
|
||||||
if (pArray == NULL) {
|
|
||||||
bmSendErrorRsps(qall, numOfMsgs, TSDB_CODE_OUT_OF_MEMORY);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int32_t i = 0; i < numOfMsgs; ++i) {
|
|
||||||
SRpcMsg *pMsg = NULL;
|
|
||||||
taosGetQitem(qall, (void **)&pMsg);
|
|
||||||
if (pMsg != NULL) {
|
|
||||||
dTrace("msg:%p, get from bnode-write queue", pMsg);
|
|
||||||
if (taosArrayPush(pArray, &pMsg) == NULL) {
|
|
||||||
bmSendErrorRsp(pMsg, TSDB_CODE_OUT_OF_MEMORY);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bndProcessWMsgs(pMgmt->pBnode, pArray);
|
|
||||||
|
|
||||||
for (size_t i = 0; i < numOfMsgs; i++) {
|
|
||||||
SRpcMsg *pMsg = *(SRpcMsg **)taosArrayGet(pArray, i);
|
|
||||||
if (pMsg != NULL) {
|
|
||||||
dTrace("msg:%p, is freed", pMsg);
|
|
||||||
rpcFreeCont(pMsg->pCont);
|
|
||||||
taosFreeQitem(pMsg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
taosArrayDestroy(pArray);
|
|
||||||
}
|
|
||||||
|
|
||||||
int32_t bmPutNodeMsgToWriteQueue(SBnodeMgmt *pMgmt, SRpcMsg *pMsg) {
|
|
||||||
SMultiWorker *pWorker = &pMgmt->writeWorker;
|
|
||||||
|
|
||||||
dTrace("msg:%p, put into worker:%s", pMsg, pWorker->name);
|
|
||||||
taosWriteQitem(pWorker->queue, pMsg);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int32_t bmPutNodeMsgToMonitorQueue(SBnodeMgmt *pMgmt, SRpcMsg *pMsg) {
|
|
||||||
SSingleWorker *pWorker = &pMgmt->monitorWorker;
|
|
||||||
|
|
||||||
dTrace("msg:%p, put into worker:%s", pMsg, pWorker->name);
|
|
||||||
taosWriteQitem(pWorker->queue, pMsg);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int32_t bmStartWorker(SBnodeMgmt *pMgmt) {
|
|
||||||
SMultiWorkerCfg cfg = {
|
|
||||||
.max = 1,
|
|
||||||
.name = "bnode-write",
|
|
||||||
.fp = (FItems)bmProcessWriteQueue,
|
|
||||||
.param = pMgmt,
|
|
||||||
};
|
|
||||||
if (tMultiWorkerInit(&pMgmt->writeWorker, &cfg) != 0) {
|
|
||||||
dError("failed to start bnode-write worker since %s", terrstr());
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
SSingleWorkerCfg mCfg = {
|
|
||||||
.min = 1,
|
|
||||||
.max = 1,
|
|
||||||
.name = "bnode-monitor",
|
|
||||||
.fp = (FItem)bmProcessMonitorQueue,
|
|
||||||
.param = pMgmt,
|
|
||||||
};
|
|
||||||
if (tSingleWorkerInit(&pMgmt->monitorWorker, &mCfg) != 0) {
|
|
||||||
dError("failed to start bnode-monitor worker since %s", terrstr());
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
dDebug("bnode workers are initialized");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void bmStopWorker(SBnodeMgmt *pMgmt) {
|
|
||||||
tSingleWorkerCleanup(&pMgmt->monitorWorker);
|
|
||||||
tMultiWorkerCleanup(&pMgmt->writeWorker);
|
|
||||||
dDebug("bnode workers are closed");
|
|
||||||
}
|
|
|
@ -326,8 +326,6 @@ SArray *dmGetMsgHandles() {
|
||||||
if (dmSetMgmtHandle(pArray, TDMT_DND_DROP_QNODE, dmPutNodeMsgToMgmtQueue, 0) == NULL) goto _OVER;
|
if (dmSetMgmtHandle(pArray, TDMT_DND_DROP_QNODE, dmPutNodeMsgToMgmtQueue, 0) == NULL) goto _OVER;
|
||||||
if (dmSetMgmtHandle(pArray, TDMT_DND_CREATE_SNODE, dmPutNodeMsgToMgmtQueue, 0) == NULL) goto _OVER;
|
if (dmSetMgmtHandle(pArray, TDMT_DND_CREATE_SNODE, dmPutNodeMsgToMgmtQueue, 0) == NULL) goto _OVER;
|
||||||
if (dmSetMgmtHandle(pArray, TDMT_DND_DROP_SNODE, dmPutNodeMsgToMgmtQueue, 0) == NULL) goto _OVER;
|
if (dmSetMgmtHandle(pArray, TDMT_DND_DROP_SNODE, dmPutNodeMsgToMgmtQueue, 0) == NULL) goto _OVER;
|
||||||
if (dmSetMgmtHandle(pArray, TDMT_DND_CREATE_BNODE, dmPutNodeMsgToMgmtQueue, 0) == NULL) goto _OVER;
|
|
||||||
if (dmSetMgmtHandle(pArray, TDMT_DND_DROP_BNODE, dmPutNodeMsgToMgmtQueue, 0) == NULL) goto _OVER;
|
|
||||||
if (dmSetMgmtHandle(pArray, TDMT_DND_CONFIG_DNODE, dmPutNodeMsgToMgmtQueue, 0) == NULL) goto _OVER;
|
if (dmSetMgmtHandle(pArray, TDMT_DND_CONFIG_DNODE, dmPutNodeMsgToMgmtQueue, 0) == NULL) goto _OVER;
|
||||||
if (dmSetMgmtHandle(pArray, TDMT_DND_SERVER_STATUS, dmPutNodeMsgToMgmtQueue, 0) == NULL) goto _OVER;
|
if (dmSetMgmtHandle(pArray, TDMT_DND_SERVER_STATUS, dmPutNodeMsgToMgmtQueue, 0) == NULL) goto _OVER;
|
||||||
if (dmSetMgmtHandle(pArray, TDMT_DND_SYSTABLE_RETRIEVE, dmPutNodeMsgToMgmtQueue, 0) == NULL) goto _OVER;
|
if (dmSetMgmtHandle(pArray, TDMT_DND_SYSTABLE_RETRIEVE, dmPutNodeMsgToMgmtQueue, 0) == NULL) goto _OVER;
|
||||||
|
|
|
@ -132,12 +132,6 @@ static void dmProcessMgmtQueue(SQueueInfo *pInfo, SRpcMsg *pMsg) {
|
||||||
case TDMT_DND_DROP_SNODE:
|
case TDMT_DND_DROP_SNODE:
|
||||||
code = (*pMgmt->processDropNodeFp)(SNODE, pMsg);
|
code = (*pMgmt->processDropNodeFp)(SNODE, pMsg);
|
||||||
break;
|
break;
|
||||||
case TDMT_DND_CREATE_BNODE:
|
|
||||||
code = (*pMgmt->processCreateNodeFp)(BNODE, pMsg);
|
|
||||||
break;
|
|
||||||
case TDMT_DND_DROP_BNODE:
|
|
||||||
code = (*pMgmt->processDropNodeFp)(BNODE, pMsg);
|
|
||||||
break;
|
|
||||||
case TDMT_DND_SERVER_STATUS:
|
case TDMT_DND_SERVER_STATUS:
|
||||||
code = dmProcessServerRunStatus(pMgmt, pMsg);
|
code = dmProcessServerRunStatus(pMgmt, pMsg);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -105,7 +105,7 @@ int32_t mmProcessCreateReq(const SMgmtInputOpt *pInput, SRpcMsg *pMsg) {
|
||||||
int32_t mmProcessDropReq(const SMgmtInputOpt *pInput, SRpcMsg *pMsg) {
|
int32_t mmProcessDropReq(const SMgmtInputOpt *pInput, SRpcMsg *pMsg) {
|
||||||
const STraceId *trace = &pMsg->info.traceId;
|
const STraceId *trace = &pMsg->info.traceId;
|
||||||
SDDropMnodeReq dropReq = {0};
|
SDDropMnodeReq dropReq = {0};
|
||||||
if (tDeserializeSCreateDropMQSBNodeReq(pMsg->pCont, pMsg->contLen, &dropReq) != 0) {
|
if (tDeserializeSCreateDropMQSNodeReq(pMsg->pCont, pMsg->contLen, &dropReq) != 0) {
|
||||||
terrno = TSDB_CODE_INVALID_MSG;
|
terrno = TSDB_CODE_INVALID_MSG;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -136,8 +136,6 @@ SArray *mmGetMsgHandles() {
|
||||||
if (dmSetMgmtHandle(pArray, TDMT_DND_DROP_QNODE_RSP, mmPutMsgToWriteQueue, 0) == NULL) goto _OVER;
|
if (dmSetMgmtHandle(pArray, TDMT_DND_DROP_QNODE_RSP, mmPutMsgToWriteQueue, 0) == NULL) goto _OVER;
|
||||||
if (dmSetMgmtHandle(pArray, TDMT_DND_CREATE_SNODE_RSP, mmPutMsgToWriteQueue, 0) == NULL) goto _OVER;
|
if (dmSetMgmtHandle(pArray, TDMT_DND_CREATE_SNODE_RSP, mmPutMsgToWriteQueue, 0) == NULL) goto _OVER;
|
||||||
if (dmSetMgmtHandle(pArray, TDMT_DND_DROP_SNODE_RSP, mmPutMsgToWriteQueue, 0) == NULL) goto _OVER;
|
if (dmSetMgmtHandle(pArray, TDMT_DND_DROP_SNODE_RSP, mmPutMsgToWriteQueue, 0) == NULL) goto _OVER;
|
||||||
if (dmSetMgmtHandle(pArray, TDMT_DND_CREATE_BNODE_RSP, mmPutMsgToWriteQueue, 0) == NULL) goto _OVER;
|
|
||||||
if (dmSetMgmtHandle(pArray, TDMT_DND_DROP_BNODE_RSP, mmPutMsgToWriteQueue, 0) == NULL) goto _OVER;
|
|
||||||
if (dmSetMgmtHandle(pArray, TDMT_DND_CREATE_VNODE_RSP, mmPutMsgToWriteQueue, 0) == NULL) goto _OVER;
|
if (dmSetMgmtHandle(pArray, TDMT_DND_CREATE_VNODE_RSP, mmPutMsgToWriteQueue, 0) == NULL) goto _OVER;
|
||||||
if (dmSetMgmtHandle(pArray, TDMT_DND_DROP_VNODE_RSP, mmPutMsgToWriteQueue, 0) == NULL) goto _OVER;
|
if (dmSetMgmtHandle(pArray, TDMT_DND_DROP_VNODE_RSP, mmPutMsgToWriteQueue, 0) == NULL) goto _OVER;
|
||||||
if (dmSetMgmtHandle(pArray, TDMT_DND_CONFIG_DNODE_RSP, mmPutMsgToWriteQueue, 0) == NULL) goto _OVER;
|
if (dmSetMgmtHandle(pArray, TDMT_DND_CONFIG_DNODE_RSP, mmPutMsgToWriteQueue, 0) == NULL) goto _OVER;
|
||||||
|
@ -163,8 +161,6 @@ SArray *mmGetMsgHandles() {
|
||||||
if (dmSetMgmtHandle(pArray, TDMT_MND_DNODE_LIST, mmPutMsgToReadQueue, 0) == NULL) goto _OVER;
|
if (dmSetMgmtHandle(pArray, TDMT_MND_DNODE_LIST, mmPutMsgToReadQueue, 0) == NULL) goto _OVER;
|
||||||
if (dmSetMgmtHandle(pArray, TDMT_MND_CREATE_SNODE, mmPutMsgToWriteQueue, 0) == NULL) goto _OVER;
|
if (dmSetMgmtHandle(pArray, TDMT_MND_CREATE_SNODE, mmPutMsgToWriteQueue, 0) == NULL) goto _OVER;
|
||||||
if (dmSetMgmtHandle(pArray, TDMT_MND_DROP_SNODE, mmPutMsgToWriteQueue, 0) == NULL) goto _OVER;
|
if (dmSetMgmtHandle(pArray, TDMT_MND_DROP_SNODE, mmPutMsgToWriteQueue, 0) == NULL) goto _OVER;
|
||||||
if (dmSetMgmtHandle(pArray, TDMT_MND_CREATE_BNODE, mmPutMsgToWriteQueue, 0) == NULL) goto _OVER;
|
|
||||||
if (dmSetMgmtHandle(pArray, TDMT_MND_DROP_BNODE, mmPutMsgToWriteQueue, 0) == NULL) goto _OVER;
|
|
||||||
if (dmSetMgmtHandle(pArray, TDMT_MND_CREATE_DB, mmPutMsgToWriteQueue, 0) == NULL) goto _OVER;
|
if (dmSetMgmtHandle(pArray, TDMT_MND_CREATE_DB, mmPutMsgToWriteQueue, 0) == NULL) goto _OVER;
|
||||||
if (dmSetMgmtHandle(pArray, TDMT_MND_DROP_DB, mmPutMsgToWriteQueue, 0) == NULL) goto _OVER;
|
if (dmSetMgmtHandle(pArray, TDMT_MND_DROP_DB, mmPutMsgToWriteQueue, 0) == NULL) goto _OVER;
|
||||||
if (dmSetMgmtHandle(pArray, TDMT_MND_USE_DB, mmPutMsgToWriteQueue, 0) == NULL) goto _OVER;
|
if (dmSetMgmtHandle(pArray, TDMT_MND_USE_DB, mmPutMsgToWriteQueue, 0) == NULL) goto _OVER;
|
||||||
|
|
|
@ -56,7 +56,7 @@ int32_t qmProcessGetMonitorInfoReq(SQnodeMgmt *pMgmt, SRpcMsg *pMsg) {
|
||||||
|
|
||||||
int32_t qmProcessCreateReq(const SMgmtInputOpt *pInput, SRpcMsg *pMsg) {
|
int32_t qmProcessCreateReq(const SMgmtInputOpt *pInput, SRpcMsg *pMsg) {
|
||||||
SDCreateQnodeReq createReq = {0};
|
SDCreateQnodeReq createReq = {0};
|
||||||
if (tDeserializeSCreateDropMQSBNodeReq(pMsg->pCont, pMsg->contLen, &createReq) != 0) {
|
if (tDeserializeSCreateDropMQSNodeReq(pMsg->pCont, pMsg->contLen, &createReq) != 0) {
|
||||||
terrno = TSDB_CODE_INVALID_MSG;
|
terrno = TSDB_CODE_INVALID_MSG;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -78,7 +78,7 @@ int32_t qmProcessCreateReq(const SMgmtInputOpt *pInput, SRpcMsg *pMsg) {
|
||||||
|
|
||||||
int32_t qmProcessDropReq(const SMgmtInputOpt *pInput, SRpcMsg *pMsg) {
|
int32_t qmProcessDropReq(const SMgmtInputOpt *pInput, SRpcMsg *pMsg) {
|
||||||
SDDropQnodeReq dropReq = {0};
|
SDDropQnodeReq dropReq = {0};
|
||||||
if (tDeserializeSCreateDropMQSBNodeReq(pMsg->pCont, pMsg->contLen, &dropReq) != 0) {
|
if (tDeserializeSCreateDropMQSNodeReq(pMsg->pCont, pMsg->contLen, &dropReq) != 0) {
|
||||||
terrno = TSDB_CODE_INVALID_MSG;
|
terrno = TSDB_CODE_INVALID_MSG;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,7 +45,7 @@ int32_t smProcessGetMonitorInfoReq(SSnodeMgmt *pMgmt, SRpcMsg *pMsg) {
|
||||||
|
|
||||||
int32_t smProcessCreateReq(const SMgmtInputOpt *pInput, SRpcMsg *pMsg) {
|
int32_t smProcessCreateReq(const SMgmtInputOpt *pInput, SRpcMsg *pMsg) {
|
||||||
SDCreateSnodeReq createReq = {0};
|
SDCreateSnodeReq createReq = {0};
|
||||||
if (tDeserializeSCreateDropMQSBNodeReq(pMsg->pCont, pMsg->contLen, &createReq) != 0) {
|
if (tDeserializeSCreateDropMQSNodeReq(pMsg->pCont, pMsg->contLen, &createReq) != 0) {
|
||||||
terrno = TSDB_CODE_INVALID_MSG;
|
terrno = TSDB_CODE_INVALID_MSG;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -67,7 +67,7 @@ int32_t smProcessCreateReq(const SMgmtInputOpt *pInput, SRpcMsg *pMsg) {
|
||||||
|
|
||||||
int32_t smProcessDropReq(const SMgmtInputOpt *pInput, SRpcMsg *pMsg) {
|
int32_t smProcessDropReq(const SMgmtInputOpt *pInput, SRpcMsg *pMsg) {
|
||||||
SDDropSnodeReq dropReq = {0};
|
SDDropSnodeReq dropReq = {0};
|
||||||
if (tDeserializeSCreateDropMQSBNodeReq(pMsg->pCont, pMsg->contLen, &dropReq) != 0) {
|
if (tDeserializeSCreateDropMQSNodeReq(pMsg->pCont, pMsg->contLen, &dropReq) != 0) {
|
||||||
terrno = TSDB_CODE_INVALID_MSG;
|
terrno = TSDB_CODE_INVALID_MSG;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
aux_source_directory(src IMPLEMENT_SRC)
|
aux_source_directory(src IMPLEMENT_SRC)
|
||||||
add_library(dnode STATIC ${IMPLEMENT_SRC})
|
add_library(dnode STATIC ${IMPLEMENT_SRC})
|
||||||
target_link_libraries(
|
target_link_libraries(
|
||||||
dnode mgmt_bnode mgmt_mnode mgmt_qnode mgmt_snode mgmt_vnode mgmt_dnode
|
dnode mgmt_mnode mgmt_qnode mgmt_snode mgmt_vnode mgmt_dnode
|
||||||
)
|
)
|
||||||
target_include_directories(
|
target_include_directories(
|
||||||
dnode
|
dnode
|
||||||
|
|
|
@ -23,7 +23,6 @@ extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
SMgmtFunc dmGetMgmtFunc();
|
SMgmtFunc dmGetMgmtFunc();
|
||||||
SMgmtFunc bmGetMgmtFunc();
|
|
||||||
SMgmtFunc qmGetMgmtFunc();
|
SMgmtFunc qmGetMgmtFunc();
|
||||||
SMgmtFunc smGetMgmtFunc();
|
SMgmtFunc smGetMgmtFunc();
|
||||||
SMgmtFunc vmGetMgmtFunc();
|
SMgmtFunc vmGetMgmtFunc();
|
||||||
|
|
|
@ -51,6 +51,7 @@ static int32_t dmInitMonitor() {
|
||||||
|
|
||||||
static bool dmCheckDiskSpace() {
|
static bool dmCheckDiskSpace() {
|
||||||
osUpdate();
|
osUpdate();
|
||||||
|
// sufficiency
|
||||||
if (!osDataSpaceSufficient()) {
|
if (!osDataSpaceSufficient()) {
|
||||||
dWarn("free data disk size: %f GB, not sufficient, expected %f GB at least", (double)tsDataSpace.size.avail / 1024.0 / 1024.0 / 1024.0, (double)tsDataSpace.reserved / 1024.0 / 1024.0 / 1024.0);
|
dWarn("free data disk size: %f GB, not sufficient, expected %f GB at least", (double)tsDataSpace.size.avail / 1024.0 / 1024.0 / 1024.0, (double)tsDataSpace.reserved / 1024.0 / 1024.0 / 1024.0);
|
||||||
}
|
}
|
||||||
|
@ -60,7 +61,24 @@ static bool dmCheckDiskSpace() {
|
||||||
if (!osTempSpaceSufficient()) {
|
if (!osTempSpaceSufficient()) {
|
||||||
dWarn("free temp disk size: %f GB, not sufficient, expected %f GB at least", (double)tsTempSpace.size.avail / 1024.0 / 1024.0 / 1024.0, (double)tsTempSpace.reserved / 1024.0 / 1024.0 / 1024.0);
|
dWarn("free temp disk size: %f GB, not sufficient, expected %f GB at least", (double)tsTempSpace.size.avail / 1024.0 / 1024.0 / 1024.0, (double)tsTempSpace.reserved / 1024.0 / 1024.0 / 1024.0);
|
||||||
}
|
}
|
||||||
return true;
|
// availability
|
||||||
|
bool ret = true;
|
||||||
|
if (!osDataSpaceAvailable()) {
|
||||||
|
dError("data disk space unavailable, i.e. %s", tsDataDir);
|
||||||
|
terrno = TSDB_CODE_VND_NO_DISKSPACE;
|
||||||
|
ret = false;
|
||||||
|
}
|
||||||
|
if (!osLogSpaceAvailable()) {
|
||||||
|
dError("log disk space unavailable, i.e. %s", tsLogDir);
|
||||||
|
terrno = TSDB_CODE_VND_NO_DISKSPACE;
|
||||||
|
ret = false;
|
||||||
|
}
|
||||||
|
if (!osTempSpaceAvailable()) {
|
||||||
|
dError("temp disk space unavailable, i.e. %s", tsTempDir);
|
||||||
|
terrno = TSDB_CODE_VND_NO_DISKSPACE;
|
||||||
|
ret = false;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool dmCheckDataDirVersion() {
|
static bool dmCheckDataDirVersion() {
|
||||||
|
|
|
@ -141,7 +141,6 @@ int32_t dmInitDnode(SDnode *pDnode, EDndNodeType rtype) {
|
||||||
pDnode->wrappers[VNODE].func = vmGetMgmtFunc();
|
pDnode->wrappers[VNODE].func = vmGetMgmtFunc();
|
||||||
pDnode->wrappers[QNODE].func = qmGetMgmtFunc();
|
pDnode->wrappers[QNODE].func = qmGetMgmtFunc();
|
||||||
pDnode->wrappers[SNODE].func = smGetMgmtFunc();
|
pDnode->wrappers[SNODE].func = smGetMgmtFunc();
|
||||||
pDnode->wrappers[BNODE].func = bmGetMgmtFunc();
|
|
||||||
|
|
||||||
for (EDndNodeType ntype = DNODE; ntype < NODE_END; ++ntype) {
|
for (EDndNodeType ntype = DNODE; ntype < NODE_END; ++ntype) {
|
||||||
SMgmtWrapper *pWrapper = &pDnode->wrappers[ntype];
|
SMgmtWrapper *pWrapper = &pDnode->wrappers[ntype];
|
||||||
|
|
|
@ -41,7 +41,6 @@ static void dmGetMonitorDnodeInfo(SDnode *pDnode, SMonDnodeInfo *pInfo) {
|
||||||
pInfo->has_mnode = pDnode->wrappers[MNODE].required;
|
pInfo->has_mnode = pDnode->wrappers[MNODE].required;
|
||||||
pInfo->has_qnode = pDnode->wrappers[QNODE].required;
|
pInfo->has_qnode = pDnode->wrappers[QNODE].required;
|
||||||
pInfo->has_snode = pDnode->wrappers[SNODE].required;
|
pInfo->has_snode = pDnode->wrappers[SNODE].required;
|
||||||
pInfo->has_bnode = pDnode->wrappers[BNODE].required;
|
|
||||||
tstrncpy(pInfo->logdir.name, tsLogDir, sizeof(pInfo->logdir.name));
|
tstrncpy(pInfo->logdir.name, tsLogDir, sizeof(pInfo->logdir.name));
|
||||||
pInfo->logdir.size = tsLogSpace.size;
|
pInfo->logdir.size = tsLogSpace.size;
|
||||||
tstrncpy(pInfo->tempdir.name, tsTempDir, sizeof(pInfo->tempdir.name));
|
tstrncpy(pInfo->tempdir.name, tsTempDir, sizeof(pInfo->tempdir.name));
|
||||||
|
@ -116,21 +115,6 @@ static void dmGetSmMonitorInfo(SDnode *pDnode) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dmGetBmMonitorInfo(SDnode *pDnode) {
|
|
||||||
SMgmtWrapper *pWrapper = &pDnode->wrappers[BNODE];
|
|
||||||
if (dmMarkWrapper(pWrapper) == 0) {
|
|
||||||
SMonBmInfo bmInfo = {0};
|
|
||||||
if (tsMultiProcess) {
|
|
||||||
dmSendLocalRecv(pDnode, TDMT_MON_BM_INFO, tDeserializeSMonBmInfo, &bmInfo);
|
|
||||||
} else if (pWrapper->pMgmt != NULL) {
|
|
||||||
bmGetMonitorInfo(pWrapper->pMgmt, &bmInfo);
|
|
||||||
}
|
|
||||||
dmReleaseWrapper(pWrapper);
|
|
||||||
monSetBmInfo(&bmInfo);
|
|
||||||
tFreeSMonBmInfo(&bmInfo);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void dmSendMonitorReport() {
|
void dmSendMonitorReport() {
|
||||||
if (!tsEnableMonitor || tsMonitorFqdn[0] == 0 || tsMonitorPort == 0) return;
|
if (!tsEnableMonitor || tsMonitorFqdn[0] == 0 || tsMonitorPort == 0) return;
|
||||||
dTrace("send monitor report to %s:%u", tsMonitorFqdn, tsMonitorPort);
|
dTrace("send monitor report to %s:%u", tsMonitorFqdn, tsMonitorPort);
|
||||||
|
@ -141,7 +125,6 @@ void dmSendMonitorReport() {
|
||||||
dmGetVmMonitorInfo(pDnode);
|
dmGetVmMonitorInfo(pDnode);
|
||||||
dmGetQmMonitorInfo(pDnode);
|
dmGetQmMonitorInfo(pDnode);
|
||||||
dmGetSmMonitorInfo(pDnode);
|
dmGetSmMonitorInfo(pDnode);
|
||||||
dmGetBmMonitorInfo(pDnode);
|
|
||||||
monSendReport();
|
monSendReport();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,8 +26,6 @@ static int32_t dmCreateShm(SMgmtWrapper *pWrapper) {
|
||||||
shmsize = tsSnodeShmSize;
|
shmsize = tsSnodeShmSize;
|
||||||
} else if (pWrapper->ntype == MNODE) {
|
} else if (pWrapper->ntype == MNODE) {
|
||||||
shmsize = tsMnodeShmSize;
|
shmsize = tsMnodeShmSize;
|
||||||
} else if (pWrapper->ntype == BNODE) {
|
|
||||||
shmsize = tsBnodeShmSize;
|
|
||||||
} else {
|
} else {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,5 +6,5 @@ target_include_directories(
|
||||||
PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/inc"
|
PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/inc"
|
||||||
)
|
)
|
||||||
target_link_libraries(
|
target_link_libraries(
|
||||||
node_util cjson mnode vnode qnode snode bnode wal sync taos_static tfs monitor
|
node_util cjson mnode vnode qnode snode wal sync taos_static tfs monitor
|
||||||
)
|
)
|
|
@ -68,8 +68,7 @@ typedef enum {
|
||||||
VNODE = 2,
|
VNODE = 2,
|
||||||
QNODE = 3,
|
QNODE = 3,
|
||||||
SNODE = 4,
|
SNODE = 4,
|
||||||
BNODE = 5,
|
NODE_END = 5,
|
||||||
NODE_END = 6,
|
|
||||||
} EDndNodeType;
|
} EDndNodeType;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
|
|
@ -39,8 +39,6 @@ const char *dmNodeLogName(EDndNodeType ntype) {
|
||||||
return "snode";
|
return "snode";
|
||||||
case MNODE:
|
case MNODE:
|
||||||
return "mnode";
|
return "mnode";
|
||||||
case BNODE:
|
|
||||||
return "bnode";
|
|
||||||
default:
|
default:
|
||||||
return "taosd";
|
return "taosd";
|
||||||
}
|
}
|
||||||
|
@ -56,8 +54,6 @@ const char *dmNodeProcName(EDndNodeType ntype) {
|
||||||
return "taoss";
|
return "taoss";
|
||||||
case MNODE:
|
case MNODE:
|
||||||
return "taosm";
|
return "taosm";
|
||||||
case BNODE:
|
|
||||||
return "taosb";
|
|
||||||
default:
|
default:
|
||||||
return "taosd";
|
return "taosd";
|
||||||
}
|
}
|
||||||
|
@ -73,8 +69,6 @@ const char *dmNodeName(EDndNodeType ntype) {
|
||||||
return "snode";
|
return "snode";
|
||||||
case MNODE:
|
case MNODE:
|
||||||
return "mnode";
|
return "mnode";
|
||||||
case BNODE:
|
|
||||||
return "bnode";
|
|
||||||
default:
|
default:
|
||||||
return "dnode";
|
return "dnode";
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
if(${BUILD_TEST})
|
if(${BUILD_TEST})
|
||||||
enable_testing()
|
enable_testing()
|
||||||
add_subdirectory(qnode)
|
add_subdirectory(qnode)
|
||||||
add_subdirectory(bnode)
|
|
||||||
add_subdirectory(snode)
|
add_subdirectory(snode)
|
||||||
#add_subdirectory(mnode)
|
#add_subdirectory(mnode)
|
||||||
add_subdirectory(vnode)
|
add_subdirectory(vnode)
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
aux_source_directory(. DND_BNODE_TEST_SRC)
|
|
||||||
add_executable(dbnodeTest ${DND_BNODE_TEST_SRC})
|
|
||||||
target_link_libraries(
|
|
||||||
dbnodeTest sut
|
|
||||||
)
|
|
||||||
|
|
||||||
add_test(
|
|
||||||
NAME dbnodeTest
|
|
||||||
COMMAND dbnodeTest
|
|
||||||
)
|
|
|
@ -1,152 +0,0 @@
|
||||||
/**
|
|
||||||
* @file dbnode.cpp
|
|
||||||
* @author slguan (slguan@taosdata.com)
|
|
||||||
* @brief DNODE module bnode tests
|
|
||||||
* @version 1.0
|
|
||||||
* @date 2022-01-05
|
|
||||||
*
|
|
||||||
* @copyright Copyright (c) 2022
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "sut.h"
|
|
||||||
|
|
||||||
class DndTestBnode : public ::testing::Test {
|
|
||||||
protected:
|
|
||||||
static void SetUpTestSuite() {
|
|
||||||
test.Init(TD_TMP_DIR_PATH "dbnodeTest", 9112);
|
|
||||||
taosMsleep(1100);
|
|
||||||
}
|
|
||||||
static void TearDownTestSuite() { test.Cleanup(); }
|
|
||||||
static Testbase test;
|
|
||||||
|
|
||||||
public:
|
|
||||||
void SetUp() override {}
|
|
||||||
void TearDown() override {}
|
|
||||||
};
|
|
||||||
|
|
||||||
Testbase DndTestBnode::test;
|
|
||||||
|
|
||||||
TEST_F(DndTestBnode, 01_Create_Bnode) {
|
|
||||||
{
|
|
||||||
SDCreateBnodeReq createReq = {0};
|
|
||||||
createReq.dnodeId = 2;
|
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
|
||||||
void* pReq = rpcMallocCont(contLen);
|
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_BNODE, pReq, contLen);
|
|
||||||
ASSERT_NE(pRsp, nullptr);
|
|
||||||
ASSERT_EQ(pRsp->code, TSDB_CODE_INVALID_OPTION);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
SDCreateBnodeReq createReq = {0};
|
|
||||||
createReq.dnodeId = 1;
|
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
|
||||||
void* pReq = rpcMallocCont(contLen);
|
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_BNODE, pReq, contLen);
|
|
||||||
ASSERT_NE(pRsp, nullptr);
|
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
SDCreateBnodeReq createReq = {0};
|
|
||||||
createReq.dnodeId = 1;
|
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
|
||||||
void* pReq = rpcMallocCont(contLen);
|
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_BNODE, pReq, contLen);
|
|
||||||
ASSERT_NE(pRsp, nullptr);
|
|
||||||
ASSERT_EQ(pRsp->code, TSDB_CODE_NODE_ALREADY_DEPLOYED);
|
|
||||||
}
|
|
||||||
|
|
||||||
// test.Restart();
|
|
||||||
|
|
||||||
{
|
|
||||||
SDCreateBnodeReq createReq = {0};
|
|
||||||
createReq.dnodeId = 1;
|
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
|
||||||
void* pReq = rpcMallocCont(contLen);
|
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_BNODE, pReq, contLen);
|
|
||||||
ASSERT_NE(pRsp, nullptr);
|
|
||||||
ASSERT_EQ(pRsp->code, TSDB_CODE_NODE_ALREADY_DEPLOYED);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(DndTestBnode, 02_Drop_Bnode) {
|
|
||||||
{
|
|
||||||
SDDropBnodeReq dropReq = {0};
|
|
||||||
dropReq.dnodeId = 2;
|
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
|
||||||
void* pReq = rpcMallocCont(contLen);
|
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_DROP_BNODE, pReq, contLen);
|
|
||||||
ASSERT_NE(pRsp, nullptr);
|
|
||||||
ASSERT_EQ(pRsp->code, TSDB_CODE_INVALID_OPTION);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
SDDropBnodeReq dropReq = {0};
|
|
||||||
dropReq.dnodeId = 1;
|
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
|
||||||
void* pReq = rpcMallocCont(contLen);
|
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_DROP_BNODE, pReq, contLen);
|
|
||||||
ASSERT_NE(pRsp, nullptr);
|
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
SDDropBnodeReq dropReq = {0};
|
|
||||||
dropReq.dnodeId = 1;
|
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
|
||||||
void* pReq = rpcMallocCont(contLen);
|
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_DROP_BNODE, pReq, contLen);
|
|
||||||
ASSERT_NE(pRsp, nullptr);
|
|
||||||
ASSERT_EQ(pRsp->code, TSDB_CODE_NODE_NOT_DEPLOYED);
|
|
||||||
}
|
|
||||||
|
|
||||||
// test.Restart();
|
|
||||||
|
|
||||||
{
|
|
||||||
SDDropBnodeReq dropReq = {0};
|
|
||||||
dropReq.dnodeId = 1;
|
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
|
||||||
void* pReq = rpcMallocCont(contLen);
|
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_DROP_BNODE, pReq, contLen);
|
|
||||||
ASSERT_NE(pRsp, nullptr);
|
|
||||||
ASSERT_EQ(pRsp->code, TSDB_CODE_NODE_NOT_DEPLOYED);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
SDCreateBnodeReq createReq = {0};
|
|
||||||
createReq.dnodeId = 1;
|
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
|
||||||
void* pReq = rpcMallocCont(contLen);
|
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_BNODE, pReq, contLen);
|
|
||||||
ASSERT_NE(pRsp, nullptr);
|
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -139,9 +139,9 @@ TEST_F(DndTestMnode, 03_Drop_Mnode) {
|
||||||
SDDropMnodeReq dropReq = {0};
|
SDDropMnodeReq dropReq = {0};
|
||||||
dropReq.dnodeId = 2;
|
dropReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &dropReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_DROP_MNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_DND_DROP_MNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -152,9 +152,9 @@ TEST_F(DndTestMnode, 03_Drop_Mnode) {
|
||||||
SDDropMnodeReq dropReq = {0};
|
SDDropMnodeReq dropReq = {0};
|
||||||
dropReq.dnodeId = 1;
|
dropReq.dnodeId = 1;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &dropReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_DROP_MNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_DND_DROP_MNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -165,9 +165,9 @@ TEST_F(DndTestMnode, 03_Drop_Mnode) {
|
||||||
SDDropMnodeReq dropReq = {0};
|
SDDropMnodeReq dropReq = {0};
|
||||||
dropReq.dnodeId = 1;
|
dropReq.dnodeId = 1;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &dropReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_DROP_MNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_DND_DROP_MNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
|
|
@ -30,9 +30,9 @@ TEST_F(DndTestQnode, 01_Create_Qnode) {
|
||||||
SDCreateQnodeReq createReq = {0};
|
SDCreateQnodeReq createReq = {0};
|
||||||
createReq.dnodeId = 2;
|
createReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &createReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_QNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_QNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -43,9 +43,9 @@ TEST_F(DndTestQnode, 01_Create_Qnode) {
|
||||||
SDCreateQnodeReq createReq = {0};
|
SDCreateQnodeReq createReq = {0};
|
||||||
createReq.dnodeId = 1;
|
createReq.dnodeId = 1;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &createReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_QNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_QNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -56,9 +56,9 @@ TEST_F(DndTestQnode, 01_Create_Qnode) {
|
||||||
SDCreateQnodeReq createReq = {0};
|
SDCreateQnodeReq createReq = {0};
|
||||||
createReq.dnodeId = 1;
|
createReq.dnodeId = 1;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &createReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_QNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_QNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -71,9 +71,9 @@ TEST_F(DndTestQnode, 01_Create_Qnode) {
|
||||||
SDCreateQnodeReq createReq = {0};
|
SDCreateQnodeReq createReq = {0};
|
||||||
createReq.dnodeId = 1;
|
createReq.dnodeId = 1;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &createReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_QNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_QNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -87,9 +87,9 @@ TEST_F(DndTestQnode, 02_Drop_Qnode) {
|
||||||
SDDropQnodeReq dropReq = {0};
|
SDDropQnodeReq dropReq = {0};
|
||||||
dropReq.dnodeId = 2;
|
dropReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &dropReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_DROP_QNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_DND_DROP_QNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -101,9 +101,9 @@ TEST_F(DndTestQnode, 02_Drop_Qnode) {
|
||||||
SDDropQnodeReq dropReq = {0};
|
SDDropQnodeReq dropReq = {0};
|
||||||
dropReq.dnodeId = 1;
|
dropReq.dnodeId = 1;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &dropReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_DROP_QNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_DND_DROP_QNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -114,9 +114,9 @@ TEST_F(DndTestQnode, 02_Drop_Qnode) {
|
||||||
SDDropQnodeReq dropReq = {0};
|
SDDropQnodeReq dropReq = {0};
|
||||||
dropReq.dnodeId = 1;
|
dropReq.dnodeId = 1;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &dropReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_DROP_QNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_DND_DROP_QNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -129,9 +129,9 @@ TEST_F(DndTestQnode, 02_Drop_Qnode) {
|
||||||
SDDropQnodeReq dropReq = {0};
|
SDDropQnodeReq dropReq = {0};
|
||||||
dropReq.dnodeId = 1;
|
dropReq.dnodeId = 1;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &dropReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_DROP_QNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_DND_DROP_QNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -142,9 +142,9 @@ TEST_F(DndTestQnode, 02_Drop_Qnode) {
|
||||||
SDCreateQnodeReq createReq = {0};
|
SDCreateQnodeReq createReq = {0};
|
||||||
createReq.dnodeId = 1;
|
createReq.dnodeId = 1;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &createReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_QNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_QNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
|
|
@ -30,9 +30,9 @@ TEST_F(DndTestSnode, 01_Create_Snode) {
|
||||||
SDCreateSnodeReq createReq = {0};
|
SDCreateSnodeReq createReq = {0};
|
||||||
createReq.dnodeId = 2;
|
createReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &createReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_SNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_SNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -43,9 +43,9 @@ TEST_F(DndTestSnode, 01_Create_Snode) {
|
||||||
SDCreateSnodeReq createReq = {0};
|
SDCreateSnodeReq createReq = {0};
|
||||||
createReq.dnodeId = 1;
|
createReq.dnodeId = 1;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &createReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_SNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_SNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -56,9 +56,9 @@ TEST_F(DndTestSnode, 01_Create_Snode) {
|
||||||
SDCreateSnodeReq createReq = {0};
|
SDCreateSnodeReq createReq = {0};
|
||||||
createReq.dnodeId = 1;
|
createReq.dnodeId = 1;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &createReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_SNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_SNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -71,9 +71,9 @@ TEST_F(DndTestSnode, 01_Create_Snode) {
|
||||||
SDCreateSnodeReq createReq = {0};
|
SDCreateSnodeReq createReq = {0};
|
||||||
createReq.dnodeId = 1;
|
createReq.dnodeId = 1;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &createReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_SNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_SNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -87,9 +87,9 @@ TEST_F(DndTestSnode, 01_Drop_Snode) {
|
||||||
SDDropSnodeReq dropReq = {0};
|
SDDropSnodeReq dropReq = {0};
|
||||||
dropReq.dnodeId = 2;
|
dropReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &dropReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_DROP_SNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_DND_DROP_SNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -101,9 +101,9 @@ TEST_F(DndTestSnode, 01_Drop_Snode) {
|
||||||
SDDropSnodeReq dropReq = {0};
|
SDDropSnodeReq dropReq = {0};
|
||||||
dropReq.dnodeId = 1;
|
dropReq.dnodeId = 1;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &dropReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_DROP_SNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_DND_DROP_SNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -114,9 +114,9 @@ TEST_F(DndTestSnode, 01_Drop_Snode) {
|
||||||
SDDropSnodeReq dropReq = {0};
|
SDDropSnodeReq dropReq = {0};
|
||||||
dropReq.dnodeId = 1;
|
dropReq.dnodeId = 1;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &dropReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_DROP_SNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_DND_DROP_SNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -129,9 +129,9 @@ TEST_F(DndTestSnode, 01_Drop_Snode) {
|
||||||
SDDropSnodeReq dropReq = {0};
|
SDDropSnodeReq dropReq = {0};
|
||||||
dropReq.dnodeId = 1;
|
dropReq.dnodeId = 1;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &dropReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_DROP_SNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_DND_DROP_SNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -142,9 +142,9 @@ TEST_F(DndTestSnode, 01_Drop_Snode) {
|
||||||
SDCreateSnodeReq createReq = {0};
|
SDCreateSnodeReq createReq = {0};
|
||||||
createReq.dnodeId = 1;
|
createReq.dnodeId = 1;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &createReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_SNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_SNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
|
|
@ -43,9 +43,7 @@ void Testbase::InitLog(const char* path) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Testbase::Init(const char* path, int16_t port) {
|
void Testbase::Init(const char* path, int16_t port) {
|
||||||
#ifdef _TD_DARWIN_64
|
|
||||||
osDefaultInit();
|
osDefaultInit();
|
||||||
#endif
|
|
||||||
tsServerPort = port;
|
tsServerPort = port;
|
||||||
strcpy(tsLocalFqdn, "localhost");
|
strcpy(tsLocalFqdn, "localhost");
|
||||||
snprintf(tsLocalEp, TSDB_EP_LEN, "%s:%u", tsLocalFqdn, tsServerPort);
|
snprintf(tsLocalEp, TSDB_EP_LEN, "%s:%u", tsLocalFqdn, tsServerPort);
|
||||||
|
|
|
@ -1,32 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can use, redistribute, and/or modify
|
|
||||||
* it under the terms of the GNU Affero General Public License, version 3
|
|
||||||
* or later ("AGPL"), as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _TD_MND_BNODE_H_
|
|
||||||
#define _TD_MND_BNODE_H_
|
|
||||||
|
|
||||||
#include "mndInt.h"
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int32_t mndInitBnode(SMnode *pMnode);
|
|
||||||
void mndCleanupBnode(SMnode *pMnode);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /*_TD_MND_BNODE_H_*/
|
|
|
@ -43,8 +43,6 @@ typedef enum {
|
||||||
MND_OPER_CREATE_USER,
|
MND_OPER_CREATE_USER,
|
||||||
MND_OPER_DROP_USER,
|
MND_OPER_DROP_USER,
|
||||||
MND_OPER_ALTER_USER,
|
MND_OPER_ALTER_USER,
|
||||||
MND_OPER_CREATE_BNODE,
|
|
||||||
MND_OPER_DROP_BNODE,
|
|
||||||
MND_OPER_CREATE_DNODE,
|
MND_OPER_CREATE_DNODE,
|
||||||
MND_OPER_DROP_DNODE,
|
MND_OPER_DROP_DNODE,
|
||||||
MND_OPER_CONFIG_DNODE,
|
MND_OPER_CONFIG_DNODE,
|
||||||
|
@ -226,13 +224,6 @@ typedef struct {
|
||||||
SDnodeObj* pDnode;
|
SDnodeObj* pDnode;
|
||||||
} SSnodeObj;
|
} SSnodeObj;
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
int32_t id;
|
|
||||||
int64_t createdTime;
|
|
||||||
int64_t updateTime;
|
|
||||||
SDnodeObj* pDnode;
|
|
||||||
} SBnodeObj;
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int32_t maxUsers;
|
int32_t maxUsers;
|
||||||
int32_t maxDbs;
|
int32_t maxDbs;
|
||||||
|
|
|
@ -1,447 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can use, redistribute, and/or modify
|
|
||||||
* it under the terms of the GNU Affero General Public License, version 3
|
|
||||||
* or later ("AGPL"), as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define _DEFAULT_SOURCE
|
|
||||||
#include "mndBnode.h"
|
|
||||||
#include "mndDnode.h"
|
|
||||||
#include "mndPrivilege.h"
|
|
||||||
#include "mndShow.h"
|
|
||||||
#include "mndTrans.h"
|
|
||||||
#include "mndUser.h"
|
|
||||||
|
|
||||||
#define BNODE_VER_NUMBER 1
|
|
||||||
#define BNODE_RESERVE_SIZE 64
|
|
||||||
|
|
||||||
static SSdbRaw *mndBnodeActionEncode(SBnodeObj *pObj);
|
|
||||||
static SSdbRow *mndBnodeActionDecode(SSdbRaw *pRaw);
|
|
||||||
static int32_t mndBnodeActionInsert(SSdb *pSdb, SBnodeObj *pObj);
|
|
||||||
static int32_t mndBnodeActionUpdate(SSdb *pSdb, SBnodeObj *pOld, SBnodeObj *pNew);
|
|
||||||
static int32_t mndBnodeActionDelete(SSdb *pSdb, SBnodeObj *pObj);
|
|
||||||
static int32_t mndProcessCreateBnodeReq(SRpcMsg *pReq);
|
|
||||||
static int32_t mndProcessDropBnodeReq(SRpcMsg *pReq);
|
|
||||||
static int32_t mndRetrieveBnodes(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows);
|
|
||||||
static void mndCancelGetNextBnode(SMnode *pMnode, void *pIter);
|
|
||||||
|
|
||||||
int32_t mndInitBnode(SMnode *pMnode) {
|
|
||||||
SSdbTable table = {
|
|
||||||
.sdbType = SDB_BNODE,
|
|
||||||
.keyType = SDB_KEY_INT32,
|
|
||||||
.encodeFp = (SdbEncodeFp)mndBnodeActionEncode,
|
|
||||||
.decodeFp = (SdbDecodeFp)mndBnodeActionDecode,
|
|
||||||
.insertFp = (SdbInsertFp)mndBnodeActionInsert,
|
|
||||||
.updateFp = (SdbUpdateFp)mndBnodeActionUpdate,
|
|
||||||
.deleteFp = (SdbDeleteFp)mndBnodeActionDelete,
|
|
||||||
};
|
|
||||||
|
|
||||||
mndSetMsgHandle(pMnode, TDMT_MND_CREATE_BNODE, mndProcessCreateBnodeReq);
|
|
||||||
mndSetMsgHandle(pMnode, TDMT_MND_DROP_BNODE, mndProcessDropBnodeReq);
|
|
||||||
mndSetMsgHandle(pMnode, TDMT_DND_CREATE_BNODE_RSP, mndTransProcessRsp);
|
|
||||||
mndSetMsgHandle(pMnode, TDMT_DND_DROP_BNODE_RSP, mndTransProcessRsp);
|
|
||||||
|
|
||||||
mndAddShowRetrieveHandle(pMnode, TSDB_MGMT_TABLE_BNODE, mndRetrieveBnodes);
|
|
||||||
mndAddShowFreeIterHandle(pMnode, TSDB_MGMT_TABLE_BNODE, mndCancelGetNextBnode);
|
|
||||||
|
|
||||||
return sdbSetTable(pMnode->pSdb, table);
|
|
||||||
}
|
|
||||||
|
|
||||||
void mndCleanupBnode(SMnode *pMnode) {}
|
|
||||||
|
|
||||||
static SBnodeObj *mndAcquireBnode(SMnode *pMnode, int32_t bnodeId) {
|
|
||||||
SBnodeObj *pObj = sdbAcquire(pMnode->pSdb, SDB_BNODE, &bnodeId);
|
|
||||||
if (pObj == NULL && terrno == TSDB_CODE_SDB_OBJ_NOT_THERE) {
|
|
||||||
terrno = TSDB_CODE_MND_BNODE_NOT_EXIST;
|
|
||||||
}
|
|
||||||
return pObj;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void mndReleaseBnode(SMnode *pMnode, SBnodeObj *pObj) {
|
|
||||||
SSdb *pSdb = pMnode->pSdb;
|
|
||||||
sdbRelease(pSdb, pObj);
|
|
||||||
}
|
|
||||||
|
|
||||||
static SSdbRaw *mndBnodeActionEncode(SBnodeObj *pObj) {
|
|
||||||
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
|
||||||
|
|
||||||
SSdbRaw *pRaw = sdbAllocRaw(SDB_BNODE, BNODE_VER_NUMBER, sizeof(SBnodeObj) + BNODE_RESERVE_SIZE);
|
|
||||||
if (pRaw == NULL) goto _OVER;
|
|
||||||
|
|
||||||
int32_t dataPos = 0;
|
|
||||||
SDB_SET_INT32(pRaw, dataPos, pObj->id, _OVER)
|
|
||||||
SDB_SET_INT64(pRaw, dataPos, pObj->createdTime, _OVER)
|
|
||||||
SDB_SET_INT64(pRaw, dataPos, pObj->updateTime, _OVER)
|
|
||||||
SDB_SET_RESERVE(pRaw, dataPos, BNODE_RESERVE_SIZE, _OVER)
|
|
||||||
|
|
||||||
terrno = 0;
|
|
||||||
|
|
||||||
_OVER:
|
|
||||||
if (terrno != 0) {
|
|
||||||
mError("bnode:%d, failed to encode to raw:%p since %s", pObj->id, pRaw, terrstr());
|
|
||||||
sdbFreeRaw(pRaw);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
mTrace("bnode:%d, encode to raw:%p, row:%p", pObj->id, pRaw, pObj);
|
|
||||||
return pRaw;
|
|
||||||
}
|
|
||||||
|
|
||||||
static SSdbRow *mndBnodeActionDecode(SSdbRaw *pRaw) {
|
|
||||||
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
|
||||||
|
|
||||||
int8_t sver = 0;
|
|
||||||
if (sdbGetRawSoftVer(pRaw, &sver) != 0) goto _OVER;
|
|
||||||
|
|
||||||
if (sver != BNODE_VER_NUMBER) {
|
|
||||||
terrno = TSDB_CODE_SDB_INVALID_DATA_VER;
|
|
||||||
goto _OVER;
|
|
||||||
}
|
|
||||||
|
|
||||||
SSdbRow *pRow = sdbAllocRow(sizeof(SBnodeObj));
|
|
||||||
if (pRow == NULL) goto _OVER;
|
|
||||||
|
|
||||||
SBnodeObj *pObj = sdbGetRowObj(pRow);
|
|
||||||
if (pObj == NULL) goto _OVER;
|
|
||||||
|
|
||||||
int32_t dataPos = 0;
|
|
||||||
SDB_GET_INT32(pRaw, dataPos, &pObj->id, _OVER)
|
|
||||||
SDB_GET_INT64(pRaw, dataPos, &pObj->createdTime, _OVER)
|
|
||||||
SDB_GET_INT64(pRaw, dataPos, &pObj->updateTime, _OVER)
|
|
||||||
SDB_GET_RESERVE(pRaw, dataPos, BNODE_RESERVE_SIZE, _OVER)
|
|
||||||
|
|
||||||
terrno = 0;
|
|
||||||
|
|
||||||
_OVER:
|
|
||||||
if (terrno != 0) {
|
|
||||||
mError("bnode:%d, failed to decode from raw:%p since %s", pObj->id, pRaw, terrstr());
|
|
||||||
taosMemoryFreeClear(pRow);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
mTrace("bnode:%d, decode from raw:%p, row:%p", pObj->id, pRaw, pObj);
|
|
||||||
return pRow;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int32_t mndBnodeActionInsert(SSdb *pSdb, SBnodeObj *pObj) {
|
|
||||||
mTrace("bnode:%d, perform insert action, row:%p", pObj->id, pObj);
|
|
||||||
pObj->pDnode = sdbAcquire(pSdb, SDB_DNODE, &pObj->id);
|
|
||||||
if (pObj->pDnode == NULL) {
|
|
||||||
terrno = TSDB_CODE_MND_DNODE_NOT_EXIST;
|
|
||||||
mError("bnode:%d, failed to perform insert action since %s", pObj->id, terrstr());
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int32_t mndBnodeActionDelete(SSdb *pSdb, SBnodeObj *pObj) {
|
|
||||||
mTrace("bnode:%d, perform delete action, row:%p", pObj->id, pObj);
|
|
||||||
if (pObj->pDnode != NULL) {
|
|
||||||
sdbRelease(pSdb, pObj->pDnode);
|
|
||||||
pObj->pDnode = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int32_t mndBnodeActionUpdate(SSdb *pSdb, SBnodeObj *pOld, SBnodeObj *pNew) {
|
|
||||||
mTrace("bnode:%d, perform update action, old row:%p new row:%p", pOld->id, pOld, pNew);
|
|
||||||
pOld->updateTime = pNew->updateTime;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int32_t mndSetCreateBnodeRedoLogs(STrans *pTrans, SBnodeObj *pObj) {
|
|
||||||
SSdbRaw *pRedoRaw = mndBnodeActionEncode(pObj);
|
|
||||||
if (pRedoRaw == NULL) return -1;
|
|
||||||
if (mndTransAppendRedolog(pTrans, pRedoRaw) != 0) return -1;
|
|
||||||
if (sdbSetRawStatus(pRedoRaw, SDB_STATUS_CREATING) != 0) return -1;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int32_t mndSetCreateBnodeUndoLogs(STrans *pTrans, SBnodeObj *pObj) {
|
|
||||||
SSdbRaw *pUndoRaw = mndBnodeActionEncode(pObj);
|
|
||||||
if (pUndoRaw == NULL) return -1;
|
|
||||||
if (mndTransAppendUndolog(pTrans, pUndoRaw) != 0) return -1;
|
|
||||||
if (sdbSetRawStatus(pUndoRaw, SDB_STATUS_DROPPED) != 0) return -1;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int32_t mndSetCreateBnodeCommitLogs(STrans *pTrans, SBnodeObj *pObj) {
|
|
||||||
SSdbRaw *pCommitRaw = mndBnodeActionEncode(pObj);
|
|
||||||
if (pCommitRaw == NULL) return -1;
|
|
||||||
if (mndTransAppendCommitlog(pTrans, pCommitRaw) != 0) return -1;
|
|
||||||
if (sdbSetRawStatus(pCommitRaw, SDB_STATUS_READY) != 0) return -1;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int32_t mndSetCreateBnodeRedoActions(STrans *pTrans, SDnodeObj *pDnode, SBnodeObj *pObj) {
|
|
||||||
SDCreateBnodeReq createReq = {0};
|
|
||||||
createReq.dnodeId = pDnode->id;
|
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
|
||||||
void *pReq = taosMemoryMalloc(contLen);
|
|
||||||
if (pReq == NULL) {
|
|
||||||
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
|
||||||
|
|
||||||
STransAction action = {0};
|
|
||||||
action.epSet = mndGetDnodeEpset(pDnode);
|
|
||||||
action.pCont = pReq;
|
|
||||||
action.contLen = contLen;
|
|
||||||
action.msgType = TDMT_DND_CREATE_BNODE;
|
|
||||||
action.acceptableCode = TSDB_CODE_NODE_ALREADY_DEPLOYED;
|
|
||||||
|
|
||||||
if (mndTransAppendRedoAction(pTrans, &action) != 0) {
|
|
||||||
taosMemoryFree(pReq);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int32_t mndSetCreateBnodeUndoActions(STrans *pTrans, SDnodeObj *pDnode, SBnodeObj *pObj) {
|
|
||||||
SDDropBnodeReq dropReq = {0};
|
|
||||||
dropReq.dnodeId = pDnode->id;
|
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
|
||||||
void *pReq = taosMemoryMalloc(contLen);
|
|
||||||
if (pReq == NULL) {
|
|
||||||
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
|
||||||
|
|
||||||
STransAction action = {0};
|
|
||||||
action.epSet = mndGetDnodeEpset(pDnode);
|
|
||||||
action.pCont = pReq;
|
|
||||||
action.contLen = contLen;
|
|
||||||
action.msgType = TDMT_DND_DROP_BNODE;
|
|
||||||
action.acceptableCode = TSDB_CODE_NODE_NOT_DEPLOYED;
|
|
||||||
|
|
||||||
if (mndTransAppendUndoAction(pTrans, &action) != 0) {
|
|
||||||
taosMemoryFree(pReq);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int32_t mndCreateBnode(SMnode *pMnode, SRpcMsg *pReq, SDnodeObj *pDnode, SMCreateBnodeReq *pCreate) {
|
|
||||||
int32_t code = -1;
|
|
||||||
|
|
||||||
SBnodeObj bnodeObj = {0};
|
|
||||||
bnodeObj.id = pDnode->id;
|
|
||||||
bnodeObj.createdTime = taosGetTimestampMs();
|
|
||||||
bnodeObj.updateTime = bnodeObj.createdTime;
|
|
||||||
|
|
||||||
STrans *pTrans = mndTransCreate(pMnode, TRN_POLICY_ROLLBACK, TRN_CONFLICT_NOTHING, pReq, "create-bnode");
|
|
||||||
if (pTrans == NULL) goto _OVER;
|
|
||||||
|
|
||||||
mInfo("trans:%d, used to create bnode:%d", pTrans->id, pCreate->dnodeId);
|
|
||||||
if (mndSetCreateBnodeRedoLogs(pTrans, &bnodeObj) != 0) goto _OVER;
|
|
||||||
if (mndSetCreateBnodeUndoLogs(pTrans, &bnodeObj) != 0) goto _OVER;
|
|
||||||
if (mndSetCreateBnodeCommitLogs(pTrans, &bnodeObj) != 0) goto _OVER;
|
|
||||||
if (mndSetCreateBnodeRedoActions(pTrans, pDnode, &bnodeObj) != 0) goto _OVER;
|
|
||||||
if (mndSetCreateBnodeUndoActions(pTrans, pDnode, &bnodeObj) != 0) goto _OVER;
|
|
||||||
if (mndTransPrepare(pMnode, pTrans) != 0) goto _OVER;
|
|
||||||
|
|
||||||
code = 0;
|
|
||||||
|
|
||||||
_OVER:
|
|
||||||
mndTransDrop(pTrans);
|
|
||||||
return code;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int32_t mndProcessCreateBnodeReq(SRpcMsg *pReq) {
|
|
||||||
SMnode *pMnode = pReq->info.node;
|
|
||||||
int32_t code = -1;
|
|
||||||
SBnodeObj *pObj = NULL;
|
|
||||||
SDnodeObj *pDnode = NULL;
|
|
||||||
SMCreateBnodeReq createReq = {0};
|
|
||||||
|
|
||||||
if (tDeserializeSCreateDropMQSBNodeReq(pReq->pCont, pReq->contLen, &createReq) != 0) {
|
|
||||||
terrno = TSDB_CODE_INVALID_MSG;
|
|
||||||
goto _OVER;
|
|
||||||
}
|
|
||||||
|
|
||||||
mInfo("bnode:%d, start to create", createReq.dnodeId);
|
|
||||||
if (mndCheckOperPrivilege(pMnode, pReq->info.conn.user, MND_OPER_CREATE_BNODE) != 0) {
|
|
||||||
goto _OVER;
|
|
||||||
}
|
|
||||||
|
|
||||||
pObj = mndAcquireBnode(pMnode, createReq.dnodeId);
|
|
||||||
if (pObj != NULL) {
|
|
||||||
terrno = TSDB_CODE_MND_BNODE_ALREADY_EXIST;
|
|
||||||
goto _OVER;
|
|
||||||
} else if (terrno != TSDB_CODE_MND_BNODE_NOT_EXIST) {
|
|
||||||
goto _OVER;
|
|
||||||
}
|
|
||||||
|
|
||||||
pDnode = mndAcquireDnode(pMnode, createReq.dnodeId);
|
|
||||||
if (pDnode == NULL) {
|
|
||||||
terrno = TSDB_CODE_MND_DNODE_NOT_EXIST;
|
|
||||||
goto _OVER;
|
|
||||||
}
|
|
||||||
|
|
||||||
code = mndCreateBnode(pMnode, pReq, pDnode, &createReq);
|
|
||||||
if (code == 0) code = TSDB_CODE_ACTION_IN_PROGRESS;
|
|
||||||
|
|
||||||
_OVER:
|
|
||||||
if (code != 0 && code != TSDB_CODE_ACTION_IN_PROGRESS) {
|
|
||||||
mError("bnode:%d, failed to create since %s", createReq.dnodeId, terrstr());
|
|
||||||
}
|
|
||||||
|
|
||||||
mndReleaseBnode(pMnode, pObj);
|
|
||||||
mndReleaseDnode(pMnode, pDnode);
|
|
||||||
return code;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int32_t mndSetDropBnodeRedoLogs(STrans *pTrans, SBnodeObj *pObj) {
|
|
||||||
SSdbRaw *pRedoRaw = mndBnodeActionEncode(pObj);
|
|
||||||
if (pRedoRaw == NULL) return -1;
|
|
||||||
if (mndTransAppendRedolog(pTrans, pRedoRaw) != 0) return -1;
|
|
||||||
if (sdbSetRawStatus(pRedoRaw, SDB_STATUS_DROPPING) != 0) return -1;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int32_t mndSetDropBnodeCommitLogs(STrans *pTrans, SBnodeObj *pObj) {
|
|
||||||
SSdbRaw *pCommitRaw = mndBnodeActionEncode(pObj);
|
|
||||||
if (pCommitRaw == NULL) return -1;
|
|
||||||
if (mndTransAppendCommitlog(pTrans, pCommitRaw) != 0) return -1;
|
|
||||||
if (sdbSetRawStatus(pCommitRaw, SDB_STATUS_DROPPED) != 0) return -1;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int32_t mndSetDropBnodeRedoActions(STrans *pTrans, SDnodeObj *pDnode, SBnodeObj *pObj) {
|
|
||||||
SDDropBnodeReq dropReq = {0};
|
|
||||||
dropReq.dnodeId = pDnode->id;
|
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
|
||||||
void *pReq = taosMemoryMalloc(contLen);
|
|
||||||
if (pReq == NULL) {
|
|
||||||
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
|
||||||
|
|
||||||
STransAction action = {0};
|
|
||||||
action.epSet = mndGetDnodeEpset(pDnode);
|
|
||||||
action.pCont = pReq;
|
|
||||||
action.contLen = contLen;
|
|
||||||
action.msgType = TDMT_DND_DROP_BNODE;
|
|
||||||
action.acceptableCode = TSDB_CODE_NODE_NOT_DEPLOYED;
|
|
||||||
|
|
||||||
if (mndTransAppendRedoAction(pTrans, &action) != 0) {
|
|
||||||
taosMemoryFree(pReq);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int32_t mndDropBnode(SMnode *pMnode, SRpcMsg *pReq, SBnodeObj *pObj) {
|
|
||||||
int32_t code = -1;
|
|
||||||
|
|
||||||
STrans *pTrans = mndTransCreate(pMnode, TRN_POLICY_RETRY, TRN_CONFLICT_NOTHING, pReq, "drop-bnode");
|
|
||||||
if (pTrans == NULL) goto _OVER;
|
|
||||||
|
|
||||||
mInfo("trans:%d, used to drop bnode:%d", pTrans->id, pObj->id);
|
|
||||||
if (mndSetDropBnodeRedoLogs(pTrans, pObj) != 0) goto _OVER;
|
|
||||||
if (mndSetDropBnodeCommitLogs(pTrans, pObj) != 0) goto _OVER;
|
|
||||||
if (mndSetDropBnodeRedoActions(pTrans, pObj->pDnode, pObj) != 0) goto _OVER;
|
|
||||||
if (mndTransPrepare(pMnode, pTrans) != 0) goto _OVER;
|
|
||||||
|
|
||||||
code = 0;
|
|
||||||
|
|
||||||
_OVER:
|
|
||||||
mndTransDrop(pTrans);
|
|
||||||
return code;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int32_t mndProcessDropBnodeReq(SRpcMsg *pReq) {
|
|
||||||
SMnode *pMnode = pReq->info.node;
|
|
||||||
int32_t code = -1;
|
|
||||||
SBnodeObj *pObj = NULL;
|
|
||||||
SMDropBnodeReq dropReq = {0};
|
|
||||||
|
|
||||||
if (tDeserializeSCreateDropMQSBNodeReq(pReq->pCont, pReq->contLen, &dropReq) != 0) {
|
|
||||||
terrno = TSDB_CODE_INVALID_MSG;
|
|
||||||
goto _OVER;
|
|
||||||
}
|
|
||||||
|
|
||||||
mInfo("bnode:%d, start to drop", dropReq.dnodeId);
|
|
||||||
if (mndCheckOperPrivilege(pMnode, pReq->info.conn.user, MND_OPER_DROP_BNODE) != 0) {
|
|
||||||
goto _OVER;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dropReq.dnodeId <= 0) {
|
|
||||||
terrno = TSDB_CODE_INVALID_MSG;
|
|
||||||
goto _OVER;
|
|
||||||
}
|
|
||||||
|
|
||||||
pObj = mndAcquireBnode(pMnode, dropReq.dnodeId);
|
|
||||||
if (pObj == NULL) {
|
|
||||||
goto _OVER;
|
|
||||||
}
|
|
||||||
|
|
||||||
code = mndDropBnode(pMnode, pReq, pObj);
|
|
||||||
if (code == 0) code = TSDB_CODE_ACTION_IN_PROGRESS;
|
|
||||||
|
|
||||||
_OVER:
|
|
||||||
if (code != 0 && code != TSDB_CODE_ACTION_IN_PROGRESS) {
|
|
||||||
mError("bnode:%d, failed to drop since %s", dropReq.dnodeId, terrstr());
|
|
||||||
}
|
|
||||||
|
|
||||||
mndReleaseBnode(pMnode, pObj);
|
|
||||||
return code;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int32_t mndRetrieveBnodes(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows) {
|
|
||||||
SMnode *pMnode = pReq->info.node;
|
|
||||||
SSdb *pSdb = pMnode->pSdb;
|
|
||||||
int32_t numOfRows = 0;
|
|
||||||
int32_t cols = 0;
|
|
||||||
SBnodeObj *pObj = NULL;
|
|
||||||
|
|
||||||
while (numOfRows < rows) {
|
|
||||||
pShow->pIter = sdbFetch(pSdb, SDB_BNODE, pShow->pIter, (void **)&pObj);
|
|
||||||
if (pShow->pIter == NULL) break;
|
|
||||||
|
|
||||||
cols = 0;
|
|
||||||
SColumnInfoData *pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
|
||||||
colDataAppend(pColInfo, numOfRows, (const char *)&pObj->id, false);
|
|
||||||
|
|
||||||
char buf[TSDB_EP_LEN + VARSTR_HEADER_SIZE] = {0};
|
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(buf, pObj->pDnode->ep, pShow->pMeta->pSchemas[cols].bytes);
|
|
||||||
|
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
|
||||||
colDataAppend(pColInfo, numOfRows, buf, false);
|
|
||||||
|
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
|
||||||
colDataAppend(pColInfo, numOfRows, (const char *)&pObj->createdTime, false);
|
|
||||||
|
|
||||||
numOfRows++;
|
|
||||||
sdbRelease(pSdb, pObj);
|
|
||||||
}
|
|
||||||
|
|
||||||
pShow->numOfRows += numOfRows;
|
|
||||||
|
|
||||||
return numOfRows;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void mndCancelGetNextBnode(SMnode *pMnode, void *pIter) {
|
|
||||||
SSdb *pSdb = pMnode->pSdb;
|
|
||||||
sdbCancelFetch(pSdb, pIter);
|
|
||||||
}
|
|
|
@ -447,10 +447,6 @@ void dumpDnode(SSdb *pSdb, SJson *json) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void dumpBnode(SSdb *pSdb, SJson *json) {
|
|
||||||
// not implemented yet
|
|
||||||
}
|
|
||||||
|
|
||||||
void dumpSnode(SSdb *pSdb, SJson *json) {
|
void dumpSnode(SSdb *pSdb, SJson *json) {
|
||||||
void *pIter = NULL;
|
void *pIter = NULL;
|
||||||
SJson *items = tjsonAddArrayToObject(json, "snodes");
|
SJson *items = tjsonAddArrayToObject(json, "snodes");
|
||||||
|
@ -616,7 +612,6 @@ void mndDumpSdb() {
|
||||||
dumpAuth(pSdb, json);
|
dumpAuth(pSdb, json);
|
||||||
dumpUser(pSdb, json);
|
dumpUser(pSdb, json);
|
||||||
dumpDnode(pSdb, json);
|
dumpDnode(pSdb, json);
|
||||||
dumpBnode(pSdb, json);
|
|
||||||
dumpSnode(pSdb, json);
|
dumpSnode(pSdb, json);
|
||||||
dumpQnode(pSdb, json);
|
dumpQnode(pSdb, json);
|
||||||
dumpMnode(pSdb, json);
|
dumpMnode(pSdb, json);
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
|
|
||||||
#define _DEFAULT_SOURCE
|
#define _DEFAULT_SOURCE
|
||||||
#include "mndAcct.h"
|
#include "mndAcct.h"
|
||||||
#include "mndBnode.h"
|
|
||||||
#include "mndCluster.h"
|
#include "mndCluster.h"
|
||||||
#include "mndConsumer.h"
|
#include "mndConsumer.h"
|
||||||
#include "mndDb.h"
|
#include "mndDb.h"
|
||||||
|
@ -296,7 +295,6 @@ static int32_t mndInitSteps(SMnode *pMnode) {
|
||||||
if (mndAllocStep(pMnode, "mnode-mnode", mndInitMnode, mndCleanupMnode) != 0) return -1;
|
if (mndAllocStep(pMnode, "mnode-mnode", mndInitMnode, mndCleanupMnode) != 0) return -1;
|
||||||
if (mndAllocStep(pMnode, "mnode-qnode", mndInitQnode, mndCleanupQnode) != 0) return -1;
|
if (mndAllocStep(pMnode, "mnode-qnode", mndInitQnode, mndCleanupQnode) != 0) return -1;
|
||||||
if (mndAllocStep(pMnode, "mnode-snode", mndInitSnode, mndCleanupSnode) != 0) return -1;
|
if (mndAllocStep(pMnode, "mnode-snode", mndInitSnode, mndCleanupSnode) != 0) return -1;
|
||||||
if (mndAllocStep(pMnode, "mnode-bnode", mndInitBnode, mndCleanupBnode) != 0) return -1;
|
|
||||||
if (mndAllocStep(pMnode, "mnode-dnode", mndInitDnode, mndCleanupDnode) != 0) return -1;
|
if (mndAllocStep(pMnode, "mnode-dnode", mndInitDnode, mndCleanupDnode) != 0) return -1;
|
||||||
if (mndAllocStep(pMnode, "mnode-user", mndInitUser, mndCleanupUser) != 0) return -1;
|
if (mndAllocStep(pMnode, "mnode-user", mndInitUser, mndCleanupUser) != 0) return -1;
|
||||||
if (mndAllocStep(pMnode, "mnode-grant", mndInitGrant, mndCleanupGrant) != 0) return -1;
|
if (mndAllocStep(pMnode, "mnode-grant", mndInitGrant, mndCleanupGrant) != 0) return -1;
|
||||||
|
@ -603,22 +601,27 @@ static int32_t mndCheckMnodeState(SRpcMsg *pMsg) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (mndAcquireRpc(pMsg->info.node) == 0) return 0;
|
if (mndAcquireRpc(pMsg->info.node) == 0) return 0;
|
||||||
|
|
||||||
|
SMnode *pMnode = pMsg->info.node;
|
||||||
|
const char *role = syncGetMyRoleStr(pMnode->syncMgmt.sync);
|
||||||
|
bool restored = syncIsRestoreFinish(pMnode->syncMgmt.sync);
|
||||||
if (pMsg->msgType == TDMT_MND_MQ_TIMER || pMsg->msgType == TDMT_MND_TELEM_TIMER ||
|
if (pMsg->msgType == TDMT_MND_MQ_TIMER || pMsg->msgType == TDMT_MND_TELEM_TIMER ||
|
||||||
pMsg->msgType == TDMT_MND_TRANS_TIMER || pMsg->msgType == TDMT_MND_TTL_TIMER ||
|
pMsg->msgType == TDMT_MND_TRANS_TIMER || pMsg->msgType == TDMT_MND_TTL_TIMER ||
|
||||||
pMsg->msgType == TDMT_MND_UPTIME_TIMER) {
|
pMsg->msgType == TDMT_MND_UPTIME_TIMER) {
|
||||||
|
mTrace("timer not process since mnode restored:%d stopped:%d, sync restored:%d role:%s ", pMnode->restored,
|
||||||
|
pMnode->stopped, restored, role);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
SEpSet epSet = {0};
|
const STraceId *trace = &pMsg->info.traceId;
|
||||||
SMnode *pMnode = pMsg->info.node;
|
SEpSet epSet = {0};
|
||||||
mndGetMnodeEpSet(pMnode, &epSet);
|
mndGetMnodeEpSet(pMnode, &epSet);
|
||||||
|
|
||||||
const STraceId *trace = &pMsg->info.traceId;
|
|
||||||
mDebug(
|
mDebug(
|
||||||
"msg:%p, failed to check mnode state since %s, mnode restored:%d stopped:%d, sync restored:%d role:%s type:%s "
|
"msg:%p, type:%s failed to process since %s, mnode restored:%d stopped:%d, sync restored:%d "
|
||||||
"numOfEps:%d inUse:%d",
|
"role:%s, redirect numOfEps:%d inUse:%d",
|
||||||
pMsg, terrstr(), pMnode->restored, pMnode->stopped, syncIsRestoreFinish(pMnode->syncMgmt.sync),
|
pMsg, TMSG_INFO(pMsg->msgType), terrstr(), pMnode->restored, pMnode->stopped, restored, role, epSet.numOfEps,
|
||||||
syncGetMyRoleStr(pMnode->syncMgmt.sync), TMSG_INFO(pMsg->msgType), epSet.numOfEps, epSet.inUse);
|
epSet.inUse);
|
||||||
|
|
||||||
if (epSet.numOfEps > 0) {
|
if (epSet.numOfEps > 0) {
|
||||||
for (int32_t i = 0; i < epSet.numOfEps; ++i) {
|
for (int32_t i = 0; i < epSet.numOfEps; ++i) {
|
||||||
|
|
|
@ -324,9 +324,9 @@ static int32_t mndBuildAlterMnodeRedoAction(STrans *pTrans, SDCreateMnodeReq *pA
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t mndBuildDropMnodeRedoAction(STrans *pTrans, SDDropMnodeReq *pDropReq, SEpSet *pDroprEpSet) {
|
static int32_t mndBuildDropMnodeRedoAction(STrans *pTrans, SDDropMnodeReq *pDropReq, SEpSet *pDroprEpSet) {
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, pDropReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, pDropReq);
|
||||||
void *pReq = taosMemoryMalloc(contLen);
|
void *pReq = taosMemoryMalloc(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, pDropReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, pDropReq);
|
||||||
|
|
||||||
STransAction action = {
|
STransAction action = {
|
||||||
.epSet = *pDroprEpSet,
|
.epSet = *pDroprEpSet,
|
||||||
|
@ -394,7 +394,6 @@ static int32_t mndCreateMnode(SMnode *pMnode, SRpcMsg *pReq, SDnodeObj *pDnode,
|
||||||
if (mndSetCreateMnodeRedoActions(pMnode, pTrans, pDnode, &mnodeObj) != 0) goto _OVER;
|
if (mndSetCreateMnodeRedoActions(pMnode, pTrans, pDnode, &mnodeObj) != 0) goto _OVER;
|
||||||
if (mndSetCreateMnodeRedoLogs(pMnode, pTrans, &mnodeObj) != 0) goto _OVER;
|
if (mndSetCreateMnodeRedoLogs(pMnode, pTrans, &mnodeObj) != 0) goto _OVER;
|
||||||
if (mndSetCreateMnodeCommitLogs(pMnode, pTrans, &mnodeObj) != 0) goto _OVER;
|
if (mndSetCreateMnodeCommitLogs(pMnode, pTrans, &mnodeObj) != 0) goto _OVER;
|
||||||
if (mndTransAppendNullLog(pTrans) != 0) goto _OVER;
|
|
||||||
if (mndTransPrepare(pMnode, pTrans) != 0) goto _OVER;
|
if (mndTransPrepare(pMnode, pTrans) != 0) goto _OVER;
|
||||||
|
|
||||||
code = 0;
|
code = 0;
|
||||||
|
@ -411,7 +410,7 @@ static int32_t mndProcessCreateMnodeReq(SRpcMsg *pReq) {
|
||||||
SDnodeObj *pDnode = NULL;
|
SDnodeObj *pDnode = NULL;
|
||||||
SMCreateMnodeReq createReq = {0};
|
SMCreateMnodeReq createReq = {0};
|
||||||
|
|
||||||
if (tDeserializeSCreateDropMQSBNodeReq(pReq->pCont, pReq->contLen, &createReq) != 0) {
|
if (tDeserializeSCreateDropMQSNodeReq(pReq->pCont, pReq->contLen, &createReq) != 0) {
|
||||||
terrno = TSDB_CODE_INVALID_MSG;
|
terrno = TSDB_CODE_INVALID_MSG;
|
||||||
goto _OVER;
|
goto _OVER;
|
||||||
}
|
}
|
||||||
|
@ -478,7 +477,6 @@ static int32_t mndSetDropMnodeCommitLogs(SMnode *pMnode, STrans *pTrans, SMnodeO
|
||||||
static int32_t mndSetDropMnodeRedoActions(SMnode *pMnode, STrans *pTrans, SDnodeObj *pDnode, SMnodeObj *pObj) {
|
static int32_t mndSetDropMnodeRedoActions(SMnode *pMnode, STrans *pTrans, SDnodeObj *pDnode, SMnodeObj *pObj) {
|
||||||
SSdb *pSdb = pMnode->pSdb;
|
SSdb *pSdb = pMnode->pSdb;
|
||||||
void *pIter = NULL;
|
void *pIter = NULL;
|
||||||
int32_t numOfReplicas = 0;
|
|
||||||
SDDropMnodeReq dropReq = {0};
|
SDDropMnodeReq dropReq = {0};
|
||||||
SEpSet dropEpSet = {0};
|
SEpSet dropEpSet = {0};
|
||||||
|
|
||||||
|
@ -505,9 +503,8 @@ static int32_t mndSetDropMnodeRedoActions(SMnode *pMnode, STrans *pTrans, SDnode
|
||||||
|
|
||||||
int32_t mndSetDropMnodeInfoToTrans(SMnode *pMnode, STrans *pTrans, SMnodeObj *pObj) {
|
int32_t mndSetDropMnodeInfoToTrans(SMnode *pMnode, STrans *pTrans, SMnodeObj *pObj) {
|
||||||
if (pObj == NULL) return 0;
|
if (pObj == NULL) return 0;
|
||||||
if (mndSetDropMnodeCommitLogs(pMnode, pTrans, pObj) != 0) return -1;
|
|
||||||
if (mndSetDropMnodeRedoActions(pMnode, pTrans, pObj->pDnode, pObj) != 0) return -1;
|
if (mndSetDropMnodeRedoActions(pMnode, pTrans, pObj->pDnode, pObj) != 0) return -1;
|
||||||
if (mndTransAppendNullLog(pTrans) != 0) return -1;
|
if (mndSetDropMnodeCommitLogs(pMnode, pTrans, pObj) != 0) return -1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -536,7 +533,7 @@ static int32_t mndProcessDropMnodeReq(SRpcMsg *pReq) {
|
||||||
SMnodeObj *pObj = NULL;
|
SMnodeObj *pObj = NULL;
|
||||||
SMDropMnodeReq dropReq = {0};
|
SMDropMnodeReq dropReq = {0};
|
||||||
|
|
||||||
if (tDeserializeSCreateDropMQSBNodeReq(pReq->pCont, pReq->contLen, &dropReq) != 0) {
|
if (tDeserializeSCreateDropMQSNodeReq(pReq->pCont, pReq->contLen, &dropReq) != 0) {
|
||||||
terrno = TSDB_CODE_INVALID_MSG;
|
terrno = TSDB_CODE_INVALID_MSG;
|
||||||
goto _OVER;
|
goto _OVER;
|
||||||
}
|
}
|
||||||
|
@ -715,7 +712,8 @@ static void mndReloadSyncConfig(SMnode *pMnode) {
|
||||||
SMnodeObj *pObj = NULL;
|
SMnodeObj *pObj = NULL;
|
||||||
ESdbStatus objStatus = 0;
|
ESdbStatus objStatus = 0;
|
||||||
void *pIter = NULL;
|
void *pIter = NULL;
|
||||||
bool hasUpdatingMnode = false;
|
int32_t updatingMnodes = 0;
|
||||||
|
int32_t readyMnodes = 0;
|
||||||
SSyncCfg cfg = {.myIndex = -1};
|
SSyncCfg cfg = {.myIndex = -1};
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
|
@ -723,7 +721,11 @@ static void mndReloadSyncConfig(SMnode *pMnode) {
|
||||||
if (pIter == NULL) break;
|
if (pIter == NULL) break;
|
||||||
if (objStatus == SDB_STATUS_CREATING || objStatus == SDB_STATUS_DROPPING) {
|
if (objStatus == SDB_STATUS_CREATING || objStatus == SDB_STATUS_DROPPING) {
|
||||||
mInfo("vgId:1, has updating mnode:%d, status:%s", pObj->id, sdbStatusName(objStatus));
|
mInfo("vgId:1, has updating mnode:%d, status:%s", pObj->id, sdbStatusName(objStatus));
|
||||||
hasUpdatingMnode = true;
|
updatingMnodes++;
|
||||||
|
}
|
||||||
|
if (objStatus == SDB_STATUS_READY) {
|
||||||
|
mInfo("vgId:1, has ready mnode:%d, status:%s", pObj->id, sdbStatusName(objStatus));
|
||||||
|
readyMnodes++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (objStatus == SDB_STATUS_READY || objStatus == SDB_STATUS_CREATING) {
|
if (objStatus == SDB_STATUS_READY || objStatus == SDB_STATUS_CREATING) {
|
||||||
|
@ -739,18 +741,25 @@ static void mndReloadSyncConfig(SMnode *pMnode) {
|
||||||
sdbReleaseLock(pSdb, pObj, false);
|
sdbReleaseLock(pSdb, pObj, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (readyMnodes <= 0 || updatingMnodes <= 0) {
|
||||||
|
mInfo("vgId:1, mnode sync not reconfig since readyMnodes:%d updatingMnodes:%d", readyMnodes, updatingMnodes);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// ASSERT(0);
|
||||||
|
|
||||||
if (cfg.myIndex == -1) {
|
if (cfg.myIndex == -1) {
|
||||||
mInfo("vgId:1, mnode not reload since selfIndex is -1");
|
#if 1
|
||||||
|
mInfo("vgId:1, mnode sync not reconfig since selfIndex is -1");
|
||||||
|
#else
|
||||||
|
// cannot reconfig because the leader may fail to elect after reboot
|
||||||
|
mInfo("vgId:1, mnode sync not reconfig since selfIndex is -1, do sync stop oper");
|
||||||
|
syncStop(pMnode->syncMgmt.sync);
|
||||||
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!mndGetRestored(pMnode)) {
|
if (updatingMnodes > 0) {
|
||||||
mInfo("vgId:1, mnode not reload since restore not finished");
|
mInfo("vgId:1, mnode sync reconfig, replica:%d myIndex:%d", cfg.replicaNum, cfg.myIndex);
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hasUpdatingMnode) {
|
|
||||||
mInfo("vgId:1, start to reload mnode sync, replica:%d myIndex:%d", cfg.replicaNum, cfg.myIndex);
|
|
||||||
for (int32_t i = 0; i < cfg.replicaNum; ++i) {
|
for (int32_t i = 0; i < cfg.replicaNum; ++i) {
|
||||||
SNodeInfo *pNode = &cfg.nodeInfo[i];
|
SNodeInfo *pNode = &cfg.nodeInfo[i];
|
||||||
mInfo("vgId:1, index:%d, fqdn:%s port:%d", i, pNode->nodeFqdn, pNode->nodePort);
|
mInfo("vgId:1, index:%d, fqdn:%s port:%d", i, pNode->nodeFqdn, pNode->nodePort);
|
||||||
|
|
|
@ -190,13 +190,13 @@ static int32_t mndSetCreateQnodeRedoActions(STrans *pTrans, SDnodeObj *pDnode, S
|
||||||
SDCreateQnodeReq createReq = {0};
|
SDCreateQnodeReq createReq = {0};
|
||||||
createReq.dnodeId = pDnode->id;
|
createReq.dnodeId = pDnode->id;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &createReq);
|
||||||
void *pReq = taosMemoryMalloc(contLen);
|
void *pReq = taosMemoryMalloc(contLen);
|
||||||
if (pReq == NULL) {
|
if (pReq == NULL) {
|
||||||
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq);
|
||||||
|
|
||||||
STransAction action = {0};
|
STransAction action = {0};
|
||||||
action.epSet = mndGetDnodeEpset(pDnode);
|
action.epSet = mndGetDnodeEpset(pDnode);
|
||||||
|
@ -217,13 +217,13 @@ static int32_t mndSetCreateQnodeUndoActions(STrans *pTrans, SDnodeObj *pDnode, S
|
||||||
SDDropQnodeReq dropReq = {0};
|
SDDropQnodeReq dropReq = {0};
|
||||||
dropReq.dnodeId = pDnode->id;
|
dropReq.dnodeId = pDnode->id;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &dropReq);
|
||||||
void *pReq = taosMemoryMalloc(contLen);
|
void *pReq = taosMemoryMalloc(contLen);
|
||||||
if (pReq == NULL) {
|
if (pReq == NULL) {
|
||||||
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq);
|
||||||
|
|
||||||
STransAction action = {0};
|
STransAction action = {0};
|
||||||
action.epSet = mndGetDnodeEpset(pDnode);
|
action.epSet = mndGetDnodeEpset(pDnode);
|
||||||
|
@ -273,7 +273,7 @@ static int32_t mndProcessCreateQnodeReq(SRpcMsg *pReq) {
|
||||||
SDnodeObj *pDnode = NULL;
|
SDnodeObj *pDnode = NULL;
|
||||||
SMCreateQnodeReq createReq = {0};
|
SMCreateQnodeReq createReq = {0};
|
||||||
|
|
||||||
if (tDeserializeSCreateDropMQSBNodeReq(pReq->pCont, pReq->contLen, &createReq) != 0) {
|
if (tDeserializeSCreateDropMQSNodeReq(pReq->pCont, pReq->contLen, &createReq) != 0) {
|
||||||
terrno = TSDB_CODE_INVALID_MSG;
|
terrno = TSDB_CODE_INVALID_MSG;
|
||||||
goto _OVER;
|
goto _OVER;
|
||||||
}
|
}
|
||||||
|
@ -330,13 +330,13 @@ static int32_t mndSetDropQnodeRedoActions(STrans *pTrans, SDnodeObj *pDnode, SQn
|
||||||
SDDropQnodeReq dropReq = {0};
|
SDDropQnodeReq dropReq = {0};
|
||||||
dropReq.dnodeId = pDnode->id;
|
dropReq.dnodeId = pDnode->id;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &dropReq);
|
||||||
void *pReq = taosMemoryMalloc(contLen);
|
void *pReq = taosMemoryMalloc(contLen);
|
||||||
if (pReq == NULL) {
|
if (pReq == NULL) {
|
||||||
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq);
|
||||||
|
|
||||||
STransAction action = {0};
|
STransAction action = {0};
|
||||||
action.epSet = mndGetDnodeEpset(pDnode);
|
action.epSet = mndGetDnodeEpset(pDnode);
|
||||||
|
@ -384,7 +384,7 @@ static int32_t mndProcessDropQnodeReq(SRpcMsg *pReq) {
|
||||||
SQnodeObj *pObj = NULL;
|
SQnodeObj *pObj = NULL;
|
||||||
SMDropQnodeReq dropReq = {0};
|
SMDropQnodeReq dropReq = {0};
|
||||||
|
|
||||||
if (tDeserializeSCreateDropMQSBNodeReq(pReq->pCont, pReq->contLen, &dropReq) != 0) {
|
if (tDeserializeSCreateDropMQSNodeReq(pReq->pCont, pReq->contLen, &dropReq) != 0) {
|
||||||
terrno = TSDB_CODE_INVALID_MSG;
|
terrno = TSDB_CODE_INVALID_MSG;
|
||||||
goto _OVER;
|
goto _OVER;
|
||||||
}
|
}
|
||||||
|
|
|
@ -90,14 +90,39 @@ int32_t mndProcessBatchMetaMsg(SRpcMsg *pMsg) {
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int32_t i = 0; i < msgNum; ++i) {
|
for (int32_t i = 0; i < msgNum; ++i) {
|
||||||
|
if (offset >= pMsg->contLen) {
|
||||||
|
mError("offset %d is bigger than contLen %d", offset, pMsg->contLen);
|
||||||
|
terrno = TSDB_CODE_MSG_NOT_PROCESSED;
|
||||||
|
taosArrayDestroy(batchRsp);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
req.msgIdx = ntohl(*(int32_t *)((char *)pMsg->pCont + offset));
|
req.msgIdx = ntohl(*(int32_t *)((char *)pMsg->pCont + offset));
|
||||||
offset += sizeof(req.msgIdx);
|
offset += sizeof(req.msgIdx);
|
||||||
|
if (offset >= pMsg->contLen) {
|
||||||
|
mError("offset %d is bigger than contLen %d", offset, pMsg->contLen);
|
||||||
|
terrno = TSDB_CODE_MSG_NOT_PROCESSED;
|
||||||
|
taosArrayDestroy(batchRsp);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
req.msgType = ntohl(*(int32_t *)((char *)pMsg->pCont + offset));
|
req.msgType = ntohl(*(int32_t *)((char *)pMsg->pCont + offset));
|
||||||
offset += sizeof(req.msgType);
|
offset += sizeof(req.msgType);
|
||||||
|
if (offset >= pMsg->contLen) {
|
||||||
|
mError("offset %d is bigger than contLen %d", offset, pMsg->contLen);
|
||||||
|
terrno = TSDB_CODE_MSG_NOT_PROCESSED;
|
||||||
|
taosArrayDestroy(batchRsp);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
req.msgLen = ntohl(*(int32_t *)((char *)pMsg->pCont + offset));
|
req.msgLen = ntohl(*(int32_t *)((char *)pMsg->pCont + offset));
|
||||||
offset += sizeof(req.msgLen);
|
offset += sizeof(req.msgLen);
|
||||||
|
if (offset >= pMsg->contLen) {
|
||||||
|
mError("offset %d is bigger than contLen %d", offset, pMsg->contLen);
|
||||||
|
terrno = TSDB_CODE_MSG_NOT_PROCESSED;
|
||||||
|
taosArrayDestroy(batchRsp);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
req.msg = (char *)pMsg->pCont + offset;
|
req.msg = (char *)pMsg->pCont + offset;
|
||||||
offset += req.msgLen;
|
offset += req.msgLen;
|
||||||
|
|
|
@ -60,8 +60,6 @@ static int32_t convertToRetrieveType(char *name, int32_t len) {
|
||||||
type = TSDB_MGMT_TABLE_MODULE;
|
type = TSDB_MGMT_TABLE_MODULE;
|
||||||
} else if (strncasecmp(name, TSDB_INS_TABLE_QNODES, len) == 0) {
|
} else if (strncasecmp(name, TSDB_INS_TABLE_QNODES, len) == 0) {
|
||||||
type = TSDB_MGMT_TABLE_QNODE;
|
type = TSDB_MGMT_TABLE_QNODE;
|
||||||
} else if (strncasecmp(name, TSDB_INS_TABLE_BNODES, len) == 0) {
|
|
||||||
type = TSDB_MGMT_TABLE_BNODE;
|
|
||||||
} else if (strncasecmp(name, TSDB_INS_TABLE_SNODES, len) == 0) {
|
} else if (strncasecmp(name, TSDB_INS_TABLE_SNODES, len) == 0) {
|
||||||
type = TSDB_MGMT_TABLE_SNODE;
|
type = TSDB_MGMT_TABLE_SNODE;
|
||||||
} else if (strncasecmp(name, TSDB_INS_TABLE_CLUSTER, len) == 0) {
|
} else if (strncasecmp(name, TSDB_INS_TABLE_CLUSTER, len) == 0) {
|
||||||
|
|
|
@ -195,13 +195,13 @@ static int32_t mndSetCreateSnodeRedoActions(STrans *pTrans, SDnodeObj *pDnode, S
|
||||||
SDCreateSnodeReq createReq = {0};
|
SDCreateSnodeReq createReq = {0};
|
||||||
createReq.dnodeId = pDnode->id;
|
createReq.dnodeId = pDnode->id;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &createReq);
|
||||||
void *pReq = taosMemoryMalloc(contLen);
|
void *pReq = taosMemoryMalloc(contLen);
|
||||||
if (pReq == NULL) {
|
if (pReq == NULL) {
|
||||||
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq);
|
||||||
|
|
||||||
STransAction action = {0};
|
STransAction action = {0};
|
||||||
action.epSet = mndGetDnodeEpset(pDnode);
|
action.epSet = mndGetDnodeEpset(pDnode);
|
||||||
|
@ -222,13 +222,13 @@ static int32_t mndSetCreateSnodeUndoActions(STrans *pTrans, SDnodeObj *pDnode, S
|
||||||
SDDropSnodeReq dropReq = {0};
|
SDDropSnodeReq dropReq = {0};
|
||||||
dropReq.dnodeId = pDnode->id;
|
dropReq.dnodeId = pDnode->id;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &dropReq);
|
||||||
void *pReq = taosMemoryMalloc(contLen);
|
void *pReq = taosMemoryMalloc(contLen);
|
||||||
if (pReq == NULL) {
|
if (pReq == NULL) {
|
||||||
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq);
|
||||||
|
|
||||||
STransAction action = {0};
|
STransAction action = {0};
|
||||||
action.epSet = mndGetDnodeEpset(pDnode);
|
action.epSet = mndGetDnodeEpset(pDnode);
|
||||||
|
@ -282,7 +282,7 @@ static int32_t mndProcessCreateSnodeReq(SRpcMsg *pReq) {
|
||||||
SDnodeObj *pDnode = NULL;
|
SDnodeObj *pDnode = NULL;
|
||||||
SMCreateSnodeReq createReq = {0};
|
SMCreateSnodeReq createReq = {0};
|
||||||
|
|
||||||
if (tDeserializeSCreateDropMQSBNodeReq(pReq->pCont, pReq->contLen, &createReq) != 0) {
|
if (tDeserializeSCreateDropMQSNodeReq(pReq->pCont, pReq->contLen, &createReq) != 0) {
|
||||||
terrno = TSDB_CODE_INVALID_MSG;
|
terrno = TSDB_CODE_INVALID_MSG;
|
||||||
goto _OVER;
|
goto _OVER;
|
||||||
}
|
}
|
||||||
|
@ -341,13 +341,13 @@ static int32_t mndSetDropSnodeRedoActions(STrans *pTrans, SDnodeObj *pDnode, SSn
|
||||||
SDDropSnodeReq dropReq = {0};
|
SDDropSnodeReq dropReq = {0};
|
||||||
dropReq.dnodeId = pDnode->id;
|
dropReq.dnodeId = pDnode->id;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &dropReq);
|
||||||
void *pReq = taosMemoryMalloc(contLen);
|
void *pReq = taosMemoryMalloc(contLen);
|
||||||
if (pReq == NULL) {
|
if (pReq == NULL) {
|
||||||
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq);
|
||||||
|
|
||||||
STransAction action = {0};
|
STransAction action = {0};
|
||||||
action.epSet = mndGetDnodeEpset(pDnode);
|
action.epSet = mndGetDnodeEpset(pDnode);
|
||||||
|
@ -398,7 +398,7 @@ static int32_t mndProcessDropSnodeReq(SRpcMsg *pReq) {
|
||||||
SSnodeObj *pObj = NULL;
|
SSnodeObj *pObj = NULL;
|
||||||
SMDropSnodeReq dropReq = {0};
|
SMDropSnodeReq dropReq = {0};
|
||||||
|
|
||||||
if (tDeserializeSCreateDropMQSBNodeReq(pReq->pCont, pReq->contLen, &dropReq) != 0) {
|
if (tDeserializeSCreateDropMQSNodeReq(pReq->pCont, pReq->contLen, &dropReq) != 0) {
|
||||||
terrno = TSDB_CODE_INVALID_MSG;
|
terrno = TSDB_CODE_INVALID_MSG;
|
||||||
goto _OVER;
|
goto _OVER;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2553,12 +2553,17 @@ static int32_t mndRetrieveStb(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBloc
|
||||||
|
|
||||||
char rollup[160 + VARSTR_HEADER_SIZE] = {0};
|
char rollup[160 + VARSTR_HEADER_SIZE] = {0};
|
||||||
int32_t rollupNum = (int32_t)taosArrayGetSize(pStb->pFuncs);
|
int32_t rollupNum = (int32_t)taosArrayGetSize(pStb->pFuncs);
|
||||||
|
char *sep = ", ";
|
||||||
|
int32_t sepLen = strlen(sep);
|
||||||
|
int32_t rollupLen = sizeof(rollup) - 2;
|
||||||
for (int32_t i = 0; i < rollupNum; ++i) {
|
for (int32_t i = 0; i < rollupNum; ++i) {
|
||||||
char *funcName = taosArrayGet(pStb->pFuncs, i);
|
char *funcName = taosArrayGet(pStb->pFuncs, i);
|
||||||
if (i) {
|
if (i) {
|
||||||
strcat(varDataVal(rollup), ", ");
|
strncat(varDataVal(rollup), sep, rollupLen);
|
||||||
|
rollupLen -= sepLen;
|
||||||
}
|
}
|
||||||
strcat(varDataVal(rollup), funcName);
|
strncat(varDataVal(rollup), funcName, rollupLen);
|
||||||
|
rollupLen -= strlen(funcName);
|
||||||
}
|
}
|
||||||
varDataSetLen(rollup, strlen(varDataVal(rollup)));
|
varDataSetLen(rollup, strlen(varDataVal(rollup)));
|
||||||
|
|
||||||
|
|
|
@ -293,6 +293,14 @@ int32_t mndSyncPropose(SMnode *pMnode, SSdbRaw *pRaw, int32_t transId) {
|
||||||
|
|
||||||
if (code == 0) {
|
if (code == 0) {
|
||||||
tsem_wait(&pMgmt->syncSem);
|
tsem_wait(&pMgmt->syncSem);
|
||||||
|
} else if (code > 0) {
|
||||||
|
mInfo("trans:%d, confirm at once since replica is 1, continue execute", transId);
|
||||||
|
taosWLockLatch(&pMgmt->lock);
|
||||||
|
pMgmt->transId = 0;
|
||||||
|
taosWUnLockLatch(&pMgmt->lock);
|
||||||
|
sdbWriteWithoutFree(pMnode->pSdb, pRaw);
|
||||||
|
sdbSetApplyInfo(pMnode->pSdb, req.info.conn.applyIndex, req.info.conn.applyTerm, SYNC_INDEX_INVALID);
|
||||||
|
code = 0;
|
||||||
} else if (code == -1 && terrno == TSDB_CODE_SYN_NOT_LEADER) {
|
} else if (code == -1 && terrno == TSDB_CODE_SYN_NOT_LEADER) {
|
||||||
terrno = TSDB_CODE_APP_NOT_READY;
|
terrno = TSDB_CODE_APP_NOT_READY;
|
||||||
} else if (code == -1 && terrno == TSDB_CODE_SYN_INTERNAL_ERROR) {
|
} else if (code == -1 && terrno == TSDB_CODE_SYN_INTERNAL_ERROR) {
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
enable_testing()
|
enable_testing()
|
||||||
|
|
||||||
add_subdirectory(acct)
|
add_subdirectory(acct)
|
||||||
add_subdirectory(bnode)
|
|
||||||
add_subdirectory(db)
|
add_subdirectory(db)
|
||||||
#add_subdirectory(dnode)
|
#add_subdirectory(dnode)
|
||||||
add_subdirectory(func)
|
add_subdirectory(func)
|
||||||
|
|
|
@ -1,11 +0,0 @@
|
||||||
# aux_source_directory(. MNODE_BNODE_TEST_SRC)
|
|
||||||
# add_executable(mbnodeTest ${MNODE_BNODE_TEST_SRC})
|
|
||||||
# target_link_libraries(
|
|
||||||
# mbnodeTest
|
|
||||||
# PUBLIC sut
|
|
||||||
# )
|
|
||||||
|
|
||||||
# add_test(
|
|
||||||
# NAME mbnodeTest
|
|
||||||
# COMMAND mbnodeTest
|
|
||||||
# )
|
|
|
@ -1,293 +0,0 @@
|
||||||
/**
|
|
||||||
* @file bnode.cpp
|
|
||||||
* @author slguan (slguan@taosdata.com)
|
|
||||||
* @brief MNODE module bnode tests
|
|
||||||
* @version 1.0
|
|
||||||
* @date 2022-01-05
|
|
||||||
*
|
|
||||||
* @copyright Copyright (c) 2022
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "sut.h"
|
|
||||||
|
|
||||||
class MndTestBnode : public ::testing::Test {
|
|
||||||
public:
|
|
||||||
void SetUp() override {}
|
|
||||||
void TearDown() override {}
|
|
||||||
|
|
||||||
public:
|
|
||||||
static void SetUpTestSuite() {
|
|
||||||
test.Init(TD_TMP_DIR_PATH "mnode_test_bnode1", 9018);
|
|
||||||
const char* fqdn = "localhost";
|
|
||||||
const char* firstEp = "localhost:9018";
|
|
||||||
|
|
||||||
server2.Start(TD_TMP_DIR_PATH "mnode_test_bnode2", 9019);
|
|
||||||
taosMsleep(300);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void TearDownTestSuite() {
|
|
||||||
server2.Stop();
|
|
||||||
test.Cleanup();
|
|
||||||
}
|
|
||||||
|
|
||||||
static Testbase test;
|
|
||||||
static TestServer server2;
|
|
||||||
};
|
|
||||||
|
|
||||||
Testbase MndTestBnode::test;
|
|
||||||
TestServer MndTestBnode::server2;
|
|
||||||
|
|
||||||
TEST_F(MndTestBnode, 01_Show_Bnode) {
|
|
||||||
test.SendShowReq(TSDB_MGMT_TABLE_BNODE, "bnodes", "");
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(MndTestBnode, 02_Create_Bnode) {
|
|
||||||
{
|
|
||||||
SMCreateBnodeReq createReq = {0};
|
|
||||||
createReq.dnodeId = 2;
|
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
|
||||||
void* pReq = rpcMallocCont(contLen);
|
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_BNODE, pReq, contLen);
|
|
||||||
ASSERT_NE(pRsp, nullptr);
|
|
||||||
ASSERT_EQ(pRsp->code, TSDB_CODE_MND_DNODE_NOT_EXIST);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
SMCreateBnodeReq createReq = {0};
|
|
||||||
createReq.dnodeId = 1;
|
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
|
||||||
void* pReq = rpcMallocCont(contLen);
|
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_BNODE, pReq, contLen);
|
|
||||||
ASSERT_NE(pRsp, nullptr);
|
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
|
||||||
|
|
||||||
test.SendShowReq(TSDB_MGMT_TABLE_BNODE, "bnodes", "");
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
SMCreateBnodeReq createReq = {0};
|
|
||||||
createReq.dnodeId = 1;
|
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
|
||||||
void* pReq = rpcMallocCont(contLen);
|
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_BNODE, pReq, contLen);
|
|
||||||
ASSERT_NE(pRsp, nullptr);
|
|
||||||
ASSERT_EQ(pRsp->code, TSDB_CODE_MND_BNODE_ALREADY_EXIST);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(MndTestBnode, 03_Drop_Bnode) {
|
|
||||||
{
|
|
||||||
SCreateDnodeReq createReq = {0};
|
|
||||||
strcpy(createReq.fqdn, "localhost");
|
|
||||||
createReq.port = 9019;
|
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDnodeReq(NULL, 0, &createReq);
|
|
||||||
void* pReq = rpcMallocCont(contLen);
|
|
||||||
tSerializeSCreateDnodeReq(pReq, contLen, &createReq);
|
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_DNODE, pReq, contLen);
|
|
||||||
ASSERT_NE(pRsp, nullptr);
|
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
|
||||||
|
|
||||||
taosMsleep(1300);
|
|
||||||
test.SendShowReq(TSDB_MGMT_TABLE_DNODE, "dnodes", "");
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
SMCreateBnodeReq createReq = {0};
|
|
||||||
createReq.dnodeId = 2;
|
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
|
||||||
void* pReq = rpcMallocCont(contLen);
|
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_BNODE, pReq, contLen);
|
|
||||||
ASSERT_NE(pRsp, nullptr);
|
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
|
||||||
|
|
||||||
test.SendShowReq(TSDB_MGMT_TABLE_BNODE, "bnodes", "");
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
SMDropBnodeReq dropReq = {0};
|
|
||||||
dropReq.dnodeId = 2;
|
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
|
||||||
void* pReq = rpcMallocCont(contLen);
|
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_BNODE, pReq, contLen);
|
|
||||||
ASSERT_NE(pRsp, nullptr);
|
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
|
||||||
|
|
||||||
test.SendShowReq(TSDB_MGMT_TABLE_BNODE, "bnodes", "");
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
SMDropBnodeReq dropReq = {0};
|
|
||||||
dropReq.dnodeId = 2;
|
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
|
||||||
void* pReq = rpcMallocCont(contLen);
|
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_BNODE, pReq, contLen);
|
|
||||||
ASSERT_NE(pRsp, nullptr);
|
|
||||||
ASSERT_EQ(pRsp->code, TSDB_CODE_MND_BNODE_NOT_EXIST);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(MndTestBnode, 03_Create_Bnode_Rollback) {
|
|
||||||
{
|
|
||||||
// send message first, then dnode2 crash, result is returned, and rollback is started
|
|
||||||
SMCreateBnodeReq createReq = {0};
|
|
||||||
createReq.dnodeId = 2;
|
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
|
||||||
void* pReq = rpcMallocCont(contLen);
|
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
|
||||||
|
|
||||||
server2.Stop();
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_BNODE, pReq, contLen);
|
|
||||||
ASSERT_NE(pRsp, nullptr);
|
|
||||||
ASSERT_EQ(pRsp->code, TSDB_CODE_RPC_NETWORK_UNAVAIL);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
// continue send message, bnode is creating
|
|
||||||
SMCreateBnodeReq createReq = {0};
|
|
||||||
createReq.dnodeId = 2;
|
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
|
||||||
void* pReq = rpcMallocCont(contLen);
|
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_BNODE, pReq, contLen);
|
|
||||||
ASSERT_NE(pRsp, nullptr);
|
|
||||||
ASSERT_EQ(pRsp->code, TSDB_CODE_SDB_OBJ_CREATING);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
// continue send message, bnode is creating
|
|
||||||
SMDropBnodeReq dropReq = {0};
|
|
||||||
dropReq.dnodeId = 2;
|
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
|
||||||
void* pReq = rpcMallocCont(contLen);
|
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_BNODE, pReq, contLen);
|
|
||||||
ASSERT_NE(pRsp, nullptr);
|
|
||||||
ASSERT_EQ(pRsp->code, TSDB_CODE_SDB_OBJ_CREATING);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
// server start, wait until the rollback finished
|
|
||||||
server2.DoStart();
|
|
||||||
taosMsleep(1000);
|
|
||||||
|
|
||||||
int32_t retry = 0;
|
|
||||||
int32_t retryMax = 20;
|
|
||||||
|
|
||||||
for (retry = 0; retry < retryMax; retry++) {
|
|
||||||
SMCreateBnodeReq createReq = {0};
|
|
||||||
createReq.dnodeId = 2;
|
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
|
||||||
void* pReq = rpcMallocCont(contLen);
|
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_BNODE, pReq, contLen);
|
|
||||||
ASSERT_NE(pRsp, nullptr);
|
|
||||||
if (pRsp->code == 0) break;
|
|
||||||
taosMsleep(1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
ASSERT_NE(retry, retryMax);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(MndTestBnode, 04_Drop_Bnode_Rollback) {
|
|
||||||
{
|
|
||||||
// send message first, then dnode2 crash, result is returned, and rollback is started
|
|
||||||
SMDropBnodeReq dropReq = {0};
|
|
||||||
dropReq.dnodeId = 2;
|
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
|
||||||
void* pReq = rpcMallocCont(contLen);
|
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
|
||||||
|
|
||||||
server2.Stop();
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_BNODE, pReq, contLen);
|
|
||||||
ASSERT_NE(pRsp, nullptr);
|
|
||||||
ASSERT_EQ(pRsp->code, TSDB_CODE_RPC_NETWORK_UNAVAIL);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
// continue send message, bnode is dropping
|
|
||||||
SMCreateBnodeReq createReq = {0};
|
|
||||||
createReq.dnodeId = 2;
|
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
|
||||||
void* pReq = rpcMallocCont(contLen);
|
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_BNODE, pReq, contLen);
|
|
||||||
ASSERT_NE(pRsp, nullptr);
|
|
||||||
ASSERT_EQ(pRsp->code, TSDB_CODE_SDB_OBJ_DROPPING);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
// continue send message, bnode is dropping
|
|
||||||
SMDropBnodeReq dropReq = {0};
|
|
||||||
dropReq.dnodeId = 2;
|
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
|
||||||
void* pReq = rpcMallocCont(contLen);
|
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_BNODE, pReq, contLen);
|
|
||||||
ASSERT_NE(pRsp, nullptr);
|
|
||||||
ASSERT_EQ(pRsp->code, TSDB_CODE_SDB_OBJ_DROPPING);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
// server start, wait until the rollback finished
|
|
||||||
server2.DoStart();
|
|
||||||
taosMsleep(1000);
|
|
||||||
|
|
||||||
int32_t retry = 0;
|
|
||||||
int32_t retryMax = 20;
|
|
||||||
|
|
||||||
for (retry = 0; retry < retryMax; retry++) {
|
|
||||||
SMCreateBnodeReq createReq = {0};
|
|
||||||
createReq.dnodeId = 2;
|
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
|
||||||
void* pReq = rpcMallocCont(contLen);
|
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_BNODE, pReq, contLen);
|
|
||||||
ASSERT_NE(pRsp, nullptr);
|
|
||||||
if (pRsp->code == 0) break;
|
|
||||||
taosMsleep(1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
ASSERT_NE(retry, retryMax);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -48,9 +48,9 @@ TEST_F(MndTestMnode, 02_Create_Mnode_Invalid_Id) {
|
||||||
SMCreateMnodeReq createReq = {0};
|
SMCreateMnodeReq createReq = {0};
|
||||||
createReq.dnodeId = 1;
|
createReq.dnodeId = 1;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &createReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_MNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_MNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -63,9 +63,9 @@ TEST_F(MndTestMnode, 03_Create_Mnode_Invalid_Id) {
|
||||||
SMCreateMnodeReq createReq = {0};
|
SMCreateMnodeReq createReq = {0};
|
||||||
createReq.dnodeId = 2;
|
createReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &createReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_MNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_MNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -98,9 +98,9 @@ TEST_F(MndTestMnode, 04_Create_Mnode) {
|
||||||
SMCreateMnodeReq createReq = {0};
|
SMCreateMnodeReq createReq = {0};
|
||||||
createReq.dnodeId = 2;
|
createReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &createReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_MNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_MNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -115,9 +115,9 @@ TEST_F(MndTestMnode, 04_Create_Mnode) {
|
||||||
SMDropMnodeReq dropReq = {0};
|
SMDropMnodeReq dropReq = {0};
|
||||||
dropReq.dnodeId = 2;
|
dropReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &dropReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_MNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_MNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -132,9 +132,9 @@ TEST_F(MndTestMnode, 04_Create_Mnode) {
|
||||||
SMDropMnodeReq dropReq = {0};
|
SMDropMnodeReq dropReq = {0};
|
||||||
dropReq.dnodeId = 2;
|
dropReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &dropReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_MNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_MNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -148,9 +148,9 @@ TEST_F(MndTestMnode, 03_Create_Mnode_Rollback) {
|
||||||
SMCreateMnodeReq createReq = {0};
|
SMCreateMnodeReq createReq = {0};
|
||||||
createReq.dnodeId = 2;
|
createReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &createReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq);
|
||||||
|
|
||||||
server2.Stop();
|
server2.Stop();
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_MNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_MNODE, pReq, contLen);
|
||||||
|
@ -163,9 +163,9 @@ TEST_F(MndTestMnode, 03_Create_Mnode_Rollback) {
|
||||||
SMCreateMnodeReq createReq = {0};
|
SMCreateMnodeReq createReq = {0};
|
||||||
createReq.dnodeId = 2;
|
createReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &createReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_MNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_MNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -177,9 +177,9 @@ TEST_F(MndTestMnode, 03_Create_Mnode_Rollback) {
|
||||||
SMDropMnodeReq dropReq = {0};
|
SMDropMnodeReq dropReq = {0};
|
||||||
dropReq.dnodeId = 2;
|
dropReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &dropReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_MNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_MNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -198,9 +198,9 @@ TEST_F(MndTestMnode, 03_Create_Mnode_Rollback) {
|
||||||
SMCreateMnodeReq createReq = {0};
|
SMCreateMnodeReq createReq = {0};
|
||||||
createReq.dnodeId = 2;
|
createReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &createReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_MNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_MNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -218,9 +218,9 @@ TEST_F(MndTestMnode, 04_Drop_Mnode_Rollback) {
|
||||||
SMDropMnodeReq dropReq = {0};
|
SMDropMnodeReq dropReq = {0};
|
||||||
dropReq.dnodeId = 2;
|
dropReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &dropReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq);
|
||||||
|
|
||||||
server2.Stop();
|
server2.Stop();
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_MNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_MNODE, pReq, contLen);
|
||||||
|
@ -233,9 +233,9 @@ TEST_F(MndTestMnode, 04_Drop_Mnode_Rollback) {
|
||||||
SMCreateMnodeReq createReq = {0};
|
SMCreateMnodeReq createReq = {0};
|
||||||
createReq.dnodeId = 2;
|
createReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &createReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_MNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_MNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -247,9 +247,9 @@ TEST_F(MndTestMnode, 04_Drop_Mnode_Rollback) {
|
||||||
SMDropMnodeReq dropReq = {0};
|
SMDropMnodeReq dropReq = {0};
|
||||||
dropReq.dnodeId = 2;
|
dropReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &dropReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_MNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_MNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -268,9 +268,9 @@ TEST_F(MndTestMnode, 04_Drop_Mnode_Rollback) {
|
||||||
SMCreateMnodeReq createReq = {0};
|
SMCreateMnodeReq createReq = {0};
|
||||||
createReq.dnodeId = 2;
|
createReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &createReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_MNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_MNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
|
|
@ -48,9 +48,9 @@ TEST_F(MndTestQnode, 02_Create_Qnode) {
|
||||||
SMCreateQnodeReq createReq = {0};
|
SMCreateQnodeReq createReq = {0};
|
||||||
createReq.dnodeId = 2;
|
createReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &createReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_QNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_QNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -61,9 +61,9 @@ TEST_F(MndTestQnode, 02_Create_Qnode) {
|
||||||
SMCreateQnodeReq createReq = {0};
|
SMCreateQnodeReq createReq = {0};
|
||||||
createReq.dnodeId = 1;
|
createReq.dnodeId = 1;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &createReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_QNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_QNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -77,9 +77,9 @@ TEST_F(MndTestQnode, 02_Create_Qnode) {
|
||||||
SMCreateQnodeReq createReq = {0};
|
SMCreateQnodeReq createReq = {0};
|
||||||
createReq.dnodeId = 1;
|
createReq.dnodeId = 1;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &createReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_QNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_QNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -110,9 +110,9 @@ TEST_F(MndTestQnode, 03_Drop_Qnode) {
|
||||||
SMCreateQnodeReq createReq = {0};
|
SMCreateQnodeReq createReq = {0};
|
||||||
createReq.dnodeId = 2;
|
createReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &createReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_QNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_QNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -126,9 +126,9 @@ TEST_F(MndTestQnode, 03_Drop_Qnode) {
|
||||||
SMDropQnodeReq dropReq = {0};
|
SMDropQnodeReq dropReq = {0};
|
||||||
dropReq.dnodeId = 2;
|
dropReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &dropReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_QNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_QNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -142,9 +142,9 @@ TEST_F(MndTestQnode, 03_Drop_Qnode) {
|
||||||
SMDropQnodeReq dropReq = {0};
|
SMDropQnodeReq dropReq = {0};
|
||||||
dropReq.dnodeId = 2;
|
dropReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &dropReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_QNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_QNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -158,9 +158,9 @@ TEST_F(MndTestQnode, 03_Create_Qnode_Rollback) {
|
||||||
SMCreateQnodeReq createReq = {0};
|
SMCreateQnodeReq createReq = {0};
|
||||||
createReq.dnodeId = 2;
|
createReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &createReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq);
|
||||||
|
|
||||||
server2.Stop();
|
server2.Stop();
|
||||||
taosMsleep(1000);
|
taosMsleep(1000);
|
||||||
|
@ -176,9 +176,9 @@ TEST_F(MndTestQnode, 03_Create_Qnode_Rollback) {
|
||||||
SMCreateQnodeReq createReq = {0};
|
SMCreateQnodeReq createReq = {0};
|
||||||
createReq.dnodeId = 2;
|
createReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &createReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_QNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_QNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -190,9 +190,9 @@ TEST_F(MndTestQnode, 03_Create_Qnode_Rollback) {
|
||||||
SMDropQnodeReq dropReq = {0};
|
SMDropQnodeReq dropReq = {0};
|
||||||
dropReq.dnodeId = 2;
|
dropReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &dropReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_QNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_QNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -212,9 +212,9 @@ TEST_F(MndTestQnode, 03_Create_Qnode_Rollback) {
|
||||||
SMCreateQnodeReq createReq = {0};
|
SMCreateQnodeReq createReq = {0};
|
||||||
createReq.dnodeId = 2;
|
createReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &createReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_QNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_QNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -231,9 +231,9 @@ TEST_F(MndTestQnode, 04_Drop_Qnode_Rollback) {
|
||||||
SMDropQnodeReq dropReq = {0};
|
SMDropQnodeReq dropReq = {0};
|
||||||
dropReq.dnodeId = 2;
|
dropReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &dropReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq);
|
||||||
|
|
||||||
server2.Stop();
|
server2.Stop();
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_QNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_QNODE, pReq, contLen);
|
||||||
|
@ -246,9 +246,9 @@ TEST_F(MndTestQnode, 04_Drop_Qnode_Rollback) {
|
||||||
SMCreateQnodeReq createReq = {0};
|
SMCreateQnodeReq createReq = {0};
|
||||||
createReq.dnodeId = 2;
|
createReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &createReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq);
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_QNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_QNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
ASSERT_EQ(pRsp->code, TSDB_CODE_SDB_OBJ_DROPPING);
|
ASSERT_EQ(pRsp->code, TSDB_CODE_SDB_OBJ_DROPPING);
|
||||||
|
@ -259,9 +259,9 @@ TEST_F(MndTestQnode, 04_Drop_Qnode_Rollback) {
|
||||||
SMDropQnodeReq dropReq = {0};
|
SMDropQnodeReq dropReq = {0};
|
||||||
dropReq.dnodeId = 2;
|
dropReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &dropReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_QNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_QNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -280,9 +280,9 @@ TEST_F(MndTestQnode, 04_Drop_Qnode_Rollback) {
|
||||||
SMCreateQnodeReq createReq = {0};
|
SMCreateQnodeReq createReq = {0};
|
||||||
createReq.dnodeId = 2;
|
createReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &createReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq);
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_QNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_QNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
if (pRsp->code == 0) break;
|
if (pRsp->code == 0) break;
|
||||||
|
|
|
@ -48,9 +48,9 @@ TEST_F(MndTestSnode, 02_Create_Snode) {
|
||||||
SMCreateSnodeReq createReq = {0};
|
SMCreateSnodeReq createReq = {0};
|
||||||
createReq.dnodeId = 2;
|
createReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &createReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_SNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_SNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -61,9 +61,9 @@ TEST_F(MndTestSnode, 02_Create_Snode) {
|
||||||
SMCreateSnodeReq createReq = {0};
|
SMCreateSnodeReq createReq = {0};
|
||||||
createReq.dnodeId = 1;
|
createReq.dnodeId = 1;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &createReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_SNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_SNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -77,9 +77,9 @@ TEST_F(MndTestSnode, 02_Create_Snode) {
|
||||||
SMCreateSnodeReq createReq = {0};
|
SMCreateSnodeReq createReq = {0};
|
||||||
createReq.dnodeId = 1;
|
createReq.dnodeId = 1;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &createReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_SNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_SNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -110,9 +110,9 @@ TEST_F(MndTestSnode, 03_Drop_Snode) {
|
||||||
SMCreateSnodeReq createReq = {0};
|
SMCreateSnodeReq createReq = {0};
|
||||||
createReq.dnodeId = 2;
|
createReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &createReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_SNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_SNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -126,9 +126,9 @@ TEST_F(MndTestSnode, 03_Drop_Snode) {
|
||||||
SMDropSnodeReq dropReq = {0};
|
SMDropSnodeReq dropReq = {0};
|
||||||
dropReq.dnodeId = 2;
|
dropReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &dropReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_SNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_SNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -142,9 +142,9 @@ TEST_F(MndTestSnode, 03_Drop_Snode) {
|
||||||
SMDropSnodeReq dropReq = {0};
|
SMDropSnodeReq dropReq = {0};
|
||||||
dropReq.dnodeId = 2;
|
dropReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &dropReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_SNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_SNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -158,9 +158,9 @@ TEST_F(MndTestSnode, 03_Create_Snode_Rollback) {
|
||||||
SMCreateSnodeReq createReq = {0};
|
SMCreateSnodeReq createReq = {0};
|
||||||
createReq.dnodeId = 2;
|
createReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &createReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq);
|
||||||
|
|
||||||
server2.Stop();
|
server2.Stop();
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_SNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_SNODE, pReq, contLen);
|
||||||
|
@ -173,9 +173,9 @@ TEST_F(MndTestSnode, 03_Create_Snode_Rollback) {
|
||||||
SMCreateSnodeReq createReq = {0};
|
SMCreateSnodeReq createReq = {0};
|
||||||
createReq.dnodeId = 2;
|
createReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &createReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_SNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_SNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -187,9 +187,9 @@ TEST_F(MndTestSnode, 03_Create_Snode_Rollback) {
|
||||||
SMDropSnodeReq dropReq = {0};
|
SMDropSnodeReq dropReq = {0};
|
||||||
dropReq.dnodeId = 2;
|
dropReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &dropReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_SNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_SNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -208,9 +208,9 @@ TEST_F(MndTestSnode, 03_Create_Snode_Rollback) {
|
||||||
SMCreateSnodeReq createReq = {0};
|
SMCreateSnodeReq createReq = {0};
|
||||||
createReq.dnodeId = 2;
|
createReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &createReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_SNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_SNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -228,9 +228,9 @@ TEST_F(MndTestSnode, 04_Drop_Snode_Rollback) {
|
||||||
SMDropSnodeReq dropReq = {0};
|
SMDropSnodeReq dropReq = {0};
|
||||||
dropReq.dnodeId = 2;
|
dropReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &dropReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq);
|
||||||
|
|
||||||
server2.Stop();
|
server2.Stop();
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_SNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_SNODE, pReq, contLen);
|
||||||
|
@ -243,9 +243,9 @@ TEST_F(MndTestSnode, 04_Drop_Snode_Rollback) {
|
||||||
SMCreateSnodeReq createReq = {0};
|
SMCreateSnodeReq createReq = {0};
|
||||||
createReq.dnodeId = 2;
|
createReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &createReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_SNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_SNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -257,9 +257,9 @@ TEST_F(MndTestSnode, 04_Drop_Snode_Rollback) {
|
||||||
SMDropSnodeReq dropReq = {0};
|
SMDropSnodeReq dropReq = {0};
|
||||||
dropReq.dnodeId = 2;
|
dropReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &dropReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &dropReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &dropReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_SNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_SNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
@ -278,9 +278,9 @@ TEST_F(MndTestSnode, 04_Drop_Snode_Rollback) {
|
||||||
SMCreateSnodeReq createReq = {0};
|
SMCreateSnodeReq createReq = {0};
|
||||||
createReq.dnodeId = 2;
|
createReq.dnodeId = 2;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDropMQSBNodeReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &createReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
tSerializeSCreateDropMQSBNodeReq(pReq, contLen, &createReq);
|
tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_SNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_SNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue