Skip to content

Commit 51b177b

Browse files
committed
Merge remote-tracking branch 'origin/release-5.9' into 20250704-sync-release-5.9
2 parents 4757ff6 + 6bcc38b commit 51b177b

35 files changed

+232859
-46804
lines changed

dir.yaml

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -818,16 +818,23 @@
818818
- gateway/coap
819819
- gateway/lwm2m
820820
- gateway/exproto
821-
- gateway/ocpp
821+
- title_en: OCPP Gateway
822+
title_cn: OCPP 网关
823+
title_ja: OCPP ゲートウェイ
824+
path: gateway/ocpp
822825
- title_en: JT/T 808 Gateway
823826
title_cn: JT/T 808 协议网关
824827
title_ja: JT/T 808 ゲートウェイ
825828
path: gateway/jt808
826829
collapsed: true
827830
children:
828831
- gateway/jt808_data_exchange
829-
- gateway/gbt32960
830832
- gateway/nats
833+
- title_en: GB/T 32960 Gateway
834+
title_cn: GB/T 32960 协议网关
835+
title_ja: GB/T 32960 ゲートウェイ
836+
path: gateway/gbt32960
837+
#- gateway/tcp
831838
- client-attributes/client-attributes
832839

833840
- title_en: Tutorials

en_US/changes/all-changes-ce.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ The release notes page for EMQX provides a comprehensive and detailed record of
44

55
## v5.8
66

7+
- [5.8.7](./changes-ce-v5.md#_5-8-7): 2025-07-02
78
- [5.8.6](./changes-ce-v5.md#_5-8-6): 2025-03-25
89
- [5.8.5](./changes-ce-v5.md#_5-8-5): 2025-02-25
910
- [5.8.4](./changes-ce-v5.md#_5-8-4): 2024-12-26

en_US/changes/all-changes-ee.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@ The release notes page for EMQX Enterprise provides a comprehensive and detailed
88

99
## v5.9
1010

11+
- [5.9.1](./changes-ee-v5.md#_5-9-1): 2025-07-02
1112
- [5.9.0](./changes-ee-v5.md#_5-9-0): 2025-05-02
1213

1314
## v5.8
1415

16+
- [5.8.7](./changes-ee-v5.md#_5-8-7): 2025-07-02
1517
- [5.8.6](./changes-ee-v5.md#_5-8-6): 2025-03-25
1618
- [5.8.5](./changes-ee-v5.md#_5-8-5): 2025-02-25
1719
- [5.8.4](./changes-ee-v5.md#_5-8-4): 2024-12-26

en_US/changes/breaking-changes-ee-5.9.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Incompatible Changes in EMQX 5.9
22

3+
## 5.9.1
4+
5+
- [#15156](https://github.com/emqx/emqx/pull/15156) Added strict schema validation for the `dashboard.sso.oidc.issuer` field. This field must now contain a valid URL. Previously, invalid configurations could be accepted by the API without errors but would cause EMQX to fail to restart, potentially resulting in a crash (`erl_crash.dump`).
6+
37
## 5.9.0
48

59
- [#14865](https://github.com/emqx/emqx/pull/14865) Dropped old LDAP authentication config layout (deprecated since v5.4).

en_US/changes/changes-ce-v5.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
# EMQX Open Source Version 5
22

3+
## 5.8.7
4+
5+
*Release Date: 2025-07-02*
6+
7+
### Bug Fixes
8+
9+
- [#15383](https://github.com/emqx/emqx/pull/15383) Fixed a potential resource leak in the MQTT bridge. When the bridge failed to start, the topic index table was not properly cleaned up. This fix ensures that the index table is correctly deleted to prevent resource leaks.
10+
311
## 5.8.6
412

513
*Release Date: 2025-03-25*

en_US/changes/changes-ee-v5.md

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,78 @@ Make sure to check the breaking changes and known issues before upgrading to EMQ
202202

203203
- [#15216](https://github.com/emqx/emqx/pull/15216) Fixed a crash of `emqx_telemetry` process when there are plugins activated.
204204

205+
## 5.9.1
206+
207+
*Release Date: 2025-07-02*
208+
209+
Make sure to check the breaking changes and known issues before upgrading to EMQX 5.9.1.
210+
211+
### Enhancements
212+
213+
- [#15364](https://github.com/emqx/emqx/pull/15364) Added support for custom HTTP headers in the OpenTelemetry gRPC (over HTTP/2) integration. This enhancement enables compatibility with collectors that require HTTP authentication.
214+
215+
- [#15160](https://github.com/emqx/emqx/pull/15160) Added the `DELETE /mt/bulk_delete_ns` API for multi-tenancy management, which allows deleting namespaces in bulk.
216+
217+
- [#15158](https://github.com/emqx/emqx/pull/15158) Added new `emqx ctl conf remove x.y.z` command, which removes the configuration key path `x.y.z` from the existing configuration.
218+
219+
- [#15157](https://github.com/emqx/emqx/pull/15157) Added support for specifying private key file path for Snowflake Connector instead of using password.
220+
221+
Users should either use password, private key, or neither (set parameters in `/etc/odbc.ini`).
222+
223+
- [#15043](https://github.com/emqx/emqx/pull/15043) Instrument the DS Raft backend with basic metrics to provide insights into cluster status, database overview, shard replication, and replica transitions.
224+
225+
### Bug Fixes
226+
227+
#### Data Integration
228+
229+
- [#15331](https://github.com/emqx/emqx/pull/15331) Fixed an issue in the InfluxDB action where line protocol conversion failed if the `timestamp` in `WriteSyntax` was left blank and no timestamp field was provided in the rule.
230+
Now the system's current millisecond value is used instead, and millisecond precision is enforced.
231+
232+
- [#15274](https://github.com/emqx/emqx/pull/15274) Improved the resilience of Postgres, Matrix, and TimescaleDB connectors by triggering a full reconnection on any health check failure. Previously, failed health checks could leave the connection in a broken state, causing operations to hang and potentially leading to out-of-memory issues.
233+
234+
- [#15154](https://github.com/emqx/emqx/pull/15154) Fixed a rare race condition in Actions running in aggregated mode (e.g., S3, Azure Blob Storage, Snowflake) that could lead to a crash with errors like:
235+
236+
```
237+
** Reason for termination ==
238+
** {function_clause,[{emqx_connector_aggregator,handle_close_buffer,[...], ...
239+
```
240+
241+
- [#15147](https://github.com/emqx/emqx/pull/15147) Fixed an issue where some Actions failed to emit trace events during rule testing with simulated input data, even after request rendering.
242+
243+
Affected Actions:
244+
245+
- Couchbase
246+
- Snowflake
247+
- IoTDB (Thrift driver)
248+
249+
- [#15383](https://github.com/emqx/emqx/pull/15383) Fixed a potential resource leak in the MQTT bridge. When the bridge failed to start, the topic index table was not properly cleaned up. This fix ensures that the index table is correctly deleted to prevent resource leaks.
250+
251+
#### Smart Data Hub
252+
253+
- [#15224](https://github.com/emqx/emqx/pull/15224) Fixed an issue where updating an External Schema Registry via the Dashboard would unintentionally overwrite the existing password with `******`. The password is now correctly preserved during updates.
254+
- [#15190](https://github.com/emqx/emqx/pull/15190) Enhanced Message Transformation by allowing hard-coded values for QoS and topic.
255+
256+
#### Observability
257+
258+
- [#15299](https://github.com/emqx/emqx/pull/15299) Fixed a `badarg` error that occurred when exporting OpenTelemetry metrics.
259+
260+
#### Telemetry
261+
262+
- [#15216](https://github.com/emqx/emqx/pull/15216) Fixed a crash in the `emqx_telemetry` process that could occur when plugins were activated.
263+
264+
#### Access Control
265+
266+
- [#15184](https://github.com/emqx/emqx/pull/15184) Fixed the formatting of error messages returned when creating a blacklist fails.
267+
268+
#### Clustering
269+
270+
- [#15180](https://github.com/emqx/emqx/pull/15180) Reduced the risk of deadlocks during channel registration by fixing improper handling of `badrpc` errors in the `ekka_locker` module. These errors previously led to false positives in lock operations, potentially causing inconsistent cluster state and deadlocks.
271+
272+
#### Security
273+
274+
275+
- [#15159](https://github.com/emqx/emqx/pull/15159) Improved handling of Certificate Revocation List (CRL) Distribution Point URLs by stopping their refresh after repeated failures (default: 60 seconds). This prevents excessive error logs from unreachable URLs and improves overall system stability.
276+
205277
## 5.9.0
206278

207279
*Release Date: 2025-05-02*
@@ -636,6 +708,41 @@ Make sure to check the breaking changes and known issues before upgrading to EMQ
636708

637709
- [#14775](https://github.com/emqx/emqx/pull/14775) QUIC Listener: Fixed issue where zone configurations are not applied after a config reload.
638710

711+
## 5.8.7
712+
713+
*Release Date: 2025-07-02*
714+
715+
### Enhancements
716+
717+
- [#15364](https://github.com/emqx/emqx/pull/15364) Added support for custom HTTP headers in the OpenTelemetry gRPC (over HTTP/2) integration. This enhancement enables compatibility with collectors that require HTTP authentication.
718+
719+
### Bug Fixes
720+
721+
- [#15383](https://github.com/emqx/emqx/pull/15383) Fixed a potential resource leak in the MQTT bridge. When the bridge failed to start, the topic index table was not properly cleaned up. This fix ensures that the index table is correctly deleted to prevent resource leaks.
722+
- [#15331](https://github.com/emqx/emqx/pull/15331) Fixed an issue in the InfluxDB action where line protocol conversion failed if the `timestamp` in `WriteSyntax` was left blank and no timestamp field was provided in the rule. Now the system's current millisecond value is used instead, and millisecond precision is enforced.
723+
- [#15274](https://github.com/emqx/emqx/pull/15274) Improved the resilience of Postgres, Matrix, and TimescaleDB connectors by triggering a full reconnection on any health check failure. Previously, failed health checks could leave the connection in a broken state, causing operations to hang and potentially leading to out-of-memory issues.
724+
- [#15224](https://github.com/emqx/emqx/pull/15224) Fixed an issue where updating an External Schema Registry via the Dashboard would unintentionally overwrite the existing password with `******`. The password is now correctly preserved during updates.
725+
- [#14989](https://github.com/emqx/emqx/pull/14989) Optimized the Kinesis Connector and Action to significantly reduce the number of AWS API calls during startup and health checks. This change helps prevent exceeding AWS Kinesis API rate limits (e.g., `ListStreams` and `DescribeStream`), which previously led to frequent health check failures when using larger connection pools or multiple connectors.
726+
- [#15299](https://github.com/emqx/emqx/pull/15299) Fixed a `badarg` error that occurred when exporting OpenTelemetry metrics.
727+
728+
## 5.8.7
729+
730+
*Release Date: 2025-07-02*
731+
732+
### Enhancements
733+
734+
- [#15364](https://github.com/emqx/emqx/pull/15364) Added support for custom HTTP headers in the OpenTelemetry gRPC (over HTTP/2) integration. This enhancement enables compatibility with collectors that require HTTP authentication.
735+
736+
### Bug Fixes
737+
738+
- [#15383](https://github.com/emqx/emqx/pull/15383) Fixed a potential resource leak in the MQTT bridge. When the bridge failed to start, the topic index table was not properly cleaned up. This fix ensures that the index table is correctly deleted to prevent resource leaks.
739+
- [#15331](https://github.com/emqx/emqx/pull/15331) Fixed an issue in the InfluxDB action where line protocol conversion failed if the `timestamp` in `WriteSyntax` was left blank and no timestamp field was provided in the rule.
740+
Now the system's current millisecond value is used instead, and millisecond precision is enforced.
741+
- [#15274](https://github.com/emqx/emqx/pull/15274) Improved the resilience of Postgres, Matrix, and TimescaleDB connectors by triggering a full reconnection on any health check failure. Previously, failed health checks could leave the connection in a broken state, causing operations to hang and potentially leading to out-of-memory issues.
742+
- [#15224](https://github.com/emqx/emqx/pull/15224) Fixed an issue where updating an External Schema Registry via the Dashboard would unintentionally overwrite the existing password with `******`. The password is now correctly preserved during updates.
743+
- [#14989](https://github.com/emqx/emqx/pull/14989) Optimized the Kinesis Connector and Action to significantly reduce the number of AWS API calls during startup and health checks. This change helps prevent exceeding AWS Kinesis API rate limits (e.g., `ListStreams` and `DescribeStream`), which previously led to frequent health check failures when using larger connection pools or multiple connectors.
744+
- [#15299](https://github.com/emqx/emqx/pull/15299) Fixed a `badarg` error that occurred when exporting OpenTelemetry metrics.
745+
639746
## 5.8.6
640747

641748
*Release Date: 2025-03-25*

en_US/dashboard/introduction.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,45 @@ For users who have installed EMQX for the first time, you can use the default us
5858

5959
After logging in for the first time, the system will automatically detect that you are logging in with the default username and password. It will force you to change the default password, which is good for the security of accessing the Dashboard. Note that the changed password cannot be the same as the original password, and it is not recommended to use `public` as the login password again.
6060

61+
### Token-Based Login via URL
62+
63+
Starting from EMQX 5.6.0, the Dashboard supports a token-based login method that allows users to log in directly by embedding authentication information in the URL.
64+
65+
This feature is particularly useful for seamless redirection and integration scenarios where a user should be logged in automatically without entering credentials manually.
66+
67+
#### How To Use This Login Method
68+
69+
1. Use the `/login` endpoint to obtain an authentication token. Since the response does not include the username, you will need to manually add it before encoding the full JSON payload.
70+
71+
You can perform all steps, including requesting the token, injecting the username, and encoding the result in Base64, in a single command, as shown below:
72+
73+
```
74+
curl -s -X POST "http://127.0.0.1:18083/api/v5/login" \
75+
-H 'accept: application/json' \
76+
-H 'Content-Type: application/json' \
77+
-d '{"username": "admin","password": "public"}' | jq '.username = "admin"' | base64
78+
```
79+
80+
2. Construct the login URL. Embed the encoded string in the `login_meta` query parameter of the Dashboard URL. For example:
81+
82+
For EMQX versions **before 5.6.0**:
83+
84+
```bash
85+
http://localhost:18083?login_meta=BASE64_ENCODED_STRING
86+
```
87+
88+
This redirects to the default cluster overview page.
89+
90+
For EMQX **version 5.6.0 and later**:
91+
92+
```bash
93+
http://localhost:18083/#/dashboard/overview?login_meta=BASE64_ENCODED_STRING
94+
```
95+
96+
This allows specifying the target page after login.
97+
98+
This method provides a smooth, pre-authenticated user experience for accessing the EMQX Dashboard. Make sure to handle the token securely and ensure it has appropriate expiration and scope limits.
99+
61100
### Reset Password
62101

63102
You can reset your Dashboard login password via the `admins` command. For details, see [CLI - admins](../admin/cli.md#admins).

en_US/data-integration/rule-sql-builtin-functions.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1437,7 +1437,7 @@ Parses the datetime string `DateTimeString` according to the format string `Form
14371437
The placeholders that can be used in `FormatString` are as follows:
14381438
14391439
| Placeholder | Meaning | Value range |
1440-
| ------ | ---------------------------------- | ----- ---------------- |
1440+
| ----------- | ------- | ------------|
14411441
| `%Y` | Four-digit year | 0000 - 9999 |
14421442
| `%m` | Two-digit month | 01 - 12 |
14431443
| `%d` | Two-digit day of the month | 01 - 31 |

en_US/data-integration/snowflake.md

Lines changed: 60 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,18 +50,71 @@ For more information, refer to the official [ODBC Driver](https://docs.snowflake
5050

5151
#### Linux
5252

53-
Run the following script to install the Snowflake ODBC driver and configure the `odbc.ini` file:
54-
55-
```
56-
scripts/install-snowflake-driver.sh
57-
```
53+
EMQX provides an [installation script](https://github.com/emqx/emqx/blob/master/scripts/install-snowflake-driver.sh) designed specifically for the quick deployment of the Snowflake ODBC driver on Debian-based systems (such as Ubuntu), along with the required system configuration.
5854

5955
::: tip Note
6056

6157
This script is for testing only, not a recommendation on how to set up the ODBC driver in production environments. You can refer to the official [installation instructions for Linux](https://docs.snowflake.com/en/developer-guide/odbc/odbc-linux).
6258

6359
:::
6460

61+
**Run the Installation Script**
62+
63+
Copy the `scripts/install-snowflake-driver.sh` script to your local machine. Run `chmod a+x` to make the script executable, and run it with `sudo`:
64+
65+
```bash
66+
chmod a+x scripts/install-snowflake-driver.sh
67+
sudo ./scripts/install-snowflake-driver.sh
68+
```
69+
70+
The script automatically downloads the Snowflake ODBC `.deb` installation package (e.g., `snowflake-odbc-3.4.1.x86_64.deb`) to the current working directory. It then installs the driver and updates the following system configuration files:
71+
72+
- `/etc/odbc.ini`: Adds the Snowflake data source configuration
73+
- `/etc/odbcinst.ini`: Registers the Snowflake driver path
74+
75+
**Sample Configuration**
76+
77+
Run the following command to view the configurations in the `/etc/odbc.ini` file:
78+
79+
```
80+
emqx@emqx-0:~$ cat /etc/odbc.ini
81+
82+
[snowflake]
83+
Description=SnowflakeDB
84+
Driver=SnowflakeDSIIDriver
85+
Locale=en-US
86+
PORT=443
87+
SSL=on
88+
89+
[ODBC Data Sources]
90+
snowflake = SnowflakeDSIIDriver
91+
```
92+
93+
Run the following command to view the configurations in the `/etc/odbcinst.ini` file:
94+
95+
```
96+
emqx@emqx-0:~$ cat /etc/odbcinst.ini
97+
98+
[ODBC Driver 18 for SQL Server]
99+
Description=Microsoft ODBC Driver 18 for SQL Server
100+
Driver=/opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.5.so.1.1
101+
UsageCount=1
102+
103+
[ODBC Driver 17 for SQL Server]
104+
Description=Microsoft ODBC Driver 17 for SQL Server
105+
Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.10.so.6.1
106+
UsageCount=1
107+
108+
[SnowflakeDSIIDriver]
109+
APILevel=1
110+
ConnectFunctions=YYY
111+
Description=Snowflake DSII
112+
Driver=/usr/lib/snowflake/odbc/lib/libSnowflake.so
113+
DriverODBCVer=03.52
114+
SQLLevel=1
115+
UsageCount=1
116+
```
117+
65118
#### macOS
66119

67120
To install and configure the Snowflake ODBC driver on macOS, follow these steps:
@@ -108,7 +161,7 @@ To install and configure the Snowflake ODBC driver on macOS, follow these steps:
108161
109162
### Create a User Account and Database
110163
111-
Once the Snowflake ODBC driver is installed, you need to set up a user account, database, and related resources for data ingestion. The following credentials will be required later for configuring the connector and Sink in EMQX:
164+
Once the Snowflake ODBC driver is installed, you need to set up a user account, database, and related resources for data ingestion. The following credentials will be required later for configuring the Connector and Sink in EMQX:
112165
113166
| Field | Value |
114167
| ---------------------- | ------------------------------------------------ |
@@ -364,4 +417,4 @@ This section delves into the advanced configuration options available for the Sn
364417
| **Inflight Window** | "In-flight queue requests" refer to requests that have been initiated but have not yet received a response or acknowledgment. This setting controls the maximum number of in-flight queue requests that can exist simultaneously during Sink communication with Snowflake. <br/>When **Request Mode** is set to `asynchronous`, the "Request In-flight Queue Window" parameter becomes particularly important. If strict sequential processing of messages from the same MQTT client is crucial, then this value should be set to `1`. | `100` |
365418
| **Connect Timeout** | This specifies the time (in seconds) the system will wait for a connection to Snowflake before timing out. For example, you can set this to `30` seconds. If the connection cannot be established within this time, EMQX will attempt to retry (based on your **Max Retries** setting) or raise an error. This setting is useful for managing network latency or connection reliability. | `15` |
366419
| **HTTP Pipelining ** | Specifies the maximum number of HTTP requests that can be sent out before waiting for responses. | `100` |
367-
| **Connection Pool Size** | Defines how many connections EMQX can maintain simultaneously to Snowflake. A larger pool size allows for more concurrent requests, which is important in high-load scenarios, but it also consumes more system resources. | `8` |
420+
| **Connection Pool Size** | Defines how many connections EMQX can maintain simultaneously to Snowflake. A larger pool size allows for more concurrent requests, which is important in high-load scenarios, but it also consumes more system resources. | `8` |
301 KB
Loading

0 commit comments

Comments
 (0)