Merge branch 'main-v4.4' into 0309-fix-emqx_cm-log-stale-session-pid-correctly

This commit is contained in:
Xinyu Liu 2023-03-20 16:29:37 +08:00 committed by GitHub
commit 2a3dc6918e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
97 changed files with 522 additions and 294 deletions

View File

@ -29,7 +29,7 @@
!export EMQX_LOG__LEVEL=debug
!./bin/emqx start
?EMQ X .* is started successfully!
?EMQ.* is started successfully!
?SH-PROMPT
[shell emqx2]
@ -43,7 +43,7 @@
!export EMQX_LOG__LEVEL=debug
!./bin/emqx start
?EMQ X .* is started successfully!
?EMQ.* is started successfully!
?SH-PROMPT
!./bin/emqx_ctl cluster join emqx@127.0.0.1

View File

@ -93,9 +93,9 @@ jobs:
./_build/${{ matrix.profile }}/rel/emqx/bin/emqx stop
echo "EMQX stopped"
./_build/${{ matrix.profile }}/rel/emqx/bin/emqx install
echo "EQMX installed"
echo "EMQX installed"
./_build/${{ matrix.profile }}/rel/emqx/bin/emqx uninstall
echo "EQMX uninstaled"
echo "EMQX uninstaled"
- uses: actions/upload-artifact@v3
with:
name: ${{ matrix.profile }}

View File

@ -109,9 +109,9 @@ jobs:
./_build/${{ matrix.profile }}/rel/emqx/bin/emqx stop
echo "EMQX stopped"
./_build/${{ matrix.profile }}/rel/emqx/bin/emqx install
echo "EQMX installed"
echo "EMQX installed"
./_build/${{ matrix.profile }}/rel/emqx/bin/emqx uninstall
echo "EQMX uninstaled"
echo "EMQX uninstaled"
mac:
strategy:

View File

@ -79,7 +79,7 @@ jobs:
TARGET: emqx/${{ needs.build.outputs.imgname }}
EMQX_TAG: ${{ needs.build.outputs.version }}
run: |
docker-compose \
docker compose \
-f .ci/docker-compose-file/docker-compose-emqx-cluster.yaml \
up -d --build
- uses: actions/checkout@v3
@ -180,7 +180,7 @@ jobs:
EMQX_TAG: ${{ needs.build.outputs.version }}
MYSQL_TAG: ${{ matrix.mysql_tag }}
run: |
docker-compose \
docker compose \
-f .ci/docker-compose-file/docker-compose-emqx-cluster.yaml \
-f .ci/docker-compose-file/docker-compose-mysql-tls.yaml \
up -d --build
@ -287,7 +287,7 @@ jobs:
EMQX_TAG: ${{ needs.build.outputs.version }}
PGSQL_TAG: ${{ matrix.pgsql_tag }}
run: |
docker-compose \
docker compose \
-f .ci/docker-compose-file/docker-compose-emqx-broker-cluster.yaml \
-f .ci/docker-compose-file/docker-compose-pgsql-tls.yaml \
up -d --build
@ -383,7 +383,7 @@ jobs:
EMQX_TAG: ${{ needs.build.outputs.version }}
MYSQL_TAG: 8
run: |
docker-compose \
docker compose \
-f .ci/docker-compose-file/docker-compose-emqx-broker-cluster.yaml \
-f .ci/docker-compose-file/docker-compose-mysql-tcp.yaml \
-f .ci/docker-compose-file/docker-compose-enterprise-tomcat-tcp.yaml \

View File

@ -33,7 +33,7 @@ jobs:
env:
LDAP_TAG: ${{ matrix.ldap_tag }}
run: |
docker-compose \
docker compose \
-f .ci/docker-compose-file/docker-compose-ldap-tcp.yaml \
-f .ci/docker-compose-file/docker-compose.yaml \
up -d --build
@ -88,9 +88,9 @@ jobs:
run: |
docker rm -f $(docker ps -qa) || true
docker network rm $(docker network ls -q) || true
- name: docker-compose up
- name: docker compose up
run: |
docker-compose \
docker compose \
-f .ci/docker-compose-file/docker-compose-toxiproxy.yaml \
-f .ci/docker-compose-file/docker-compose-mongo-${{ matrix.connect_type }}.yaml \
-f .ci/docker-compose-file/docker-compose.yaml \
@ -164,10 +164,10 @@ jobs:
run: |
docker rm -f $(docker ps -qa) || true
docker network rm $(docker network ls -q) || true
- name: docker-compose up
- name: docker compose up
timeout-minutes: 5
run: |
docker-compose \
docker compose \
-f .ci/docker-compose-file/docker-compose-mysql-${{ matrix.connect_type }}.yaml \
-f .ci/docker-compose-file/docker-compose.yaml \
up -d --build
@ -254,9 +254,9 @@ jobs:
run: |
docker rm -f $(docker ps -qa) || true
docker network rm $(docker network ls -q) || true
- name: docker-compose up
- name: docker compose up
run: |
docker-compose \
docker compose \
-f .ci/docker-compose-file/docker-compose-pgsql-${{ matrix.connect_type }}.yaml \
-f .ci/docker-compose-file/docker-compose.yaml \
up -d --build
@ -339,9 +339,9 @@ jobs:
run: |
docker rm -f $(docker ps -qa) || true
docker network rm $(docker network ls -q) || true
- name: docker-compose up
- name: docker compose up
run: |
docker-compose \
docker compose \
-f .ci/docker-compose-file/docker-compose-redis-${{ matrix.node_type }}-${{ matrix.connect_type }}.yaml \
-f .ci/docker-compose-file/docker-compose.yaml \
up -d --build

View File

@ -235,8 +235,8 @@ This patch release is only to fix windows build which failed on v4.4.0.
### Important changes
- **For Debian/Ubuntu users**, Debian/Ubuntu package (deb) installed EMQ X is now started from systemd.
This is to use systemd's supervision functionality to ensure that EMQ X service restarts after a crash.
- **For Debian/Ubuntu users**, Debian/Ubuntu package (deb) installed EMQX is now started from systemd.
This is to use systemd's supervision functionality to ensure that EMQX service restarts after a crash.
The package installation service upgrade from init.d to systemd has been verified,
it is still recommended that you verify and confirm again before deploying to the production environment,
at least to ensure that systemd is available in your system
@ -280,7 +280,7 @@ This patch release is only to fix windows build which failed on v4.4.0.
- Improve the error log content when the Proxy Protocol message is received without `proxy_protocol` configured.
- Add additional message attributes to the message reported by the gateway.
Messages from gateways such as CoAP, LwM2M, Stomp, ExProto, etc., when converted to EMQ X messages,
Messages from gateways such as CoAP, LwM2M, Stomp, ExProto, etc., when converted to EMQX messages,
add fields such as protocol name, protocol version, user name, client IP, etc.,
which can be used for multi-language hook extension (ExHook)

View File

@ -43,7 +43,9 @@ check_acl(ClientInfo, PubSub, Topic, _AclResult, #{acl := ACLParams = #{path :=
ClientInfo1 = ClientInfo#{access => access(PubSub), topic => Topic},
Username = maps:get(username, ClientInfo1, undefined),
case check_acl_request(ACLParams, ClientInfo1) of
{ok, 200, <<"ignore">>} -> ok;
{ok, 200, <<"ignore">>} ->
?LOG(debug, "ignored, ~s to topic ~ts, username: ~ts",
[PubSub, Topic, Username]);
{ok, 200, _Body} ->
?LOG(debug, "Allow ~s to topic ~ts, username: ~ts",
[PubSub, Topic, Username]),

View File

@ -1,13 +1,13 @@
{application, emqx_auth_http,
[{description, "EMQ X Authentication/ACL with HTTP API"},
{vsn, "4.3.11"}, % strict semver, bump manually!
[{description, "EMQX Authentication/ACL with HTTP API"},
{vsn, "4.3.12"}, % strict semver, bump manually!
{modules, []},
{registered, [emqx_auth_http_sup]},
{applications, [kernel,stdlib,ehttpc]},
{mod, {emqx_auth_http_app, []}},
{env, []},
{licenses, ["Apache-2.0"]},
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
{maintainers, ["EMQX Team <contact@emqx.io>"]},
{links, [{"Homepage", "https://emqx.io/"},
{"Github", "https://github.com/emqx/emqx-auth-http"}
]}

View File

@ -1,7 +1,10 @@
%% -*- mode: erlang -*-
%% Unless you know what you are doing, DO NOT edit manually!!
{VSN,
[{"4.3.10",
[{"4.3.11",
[{load_module,emqx_auth_http,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_http,brutal_purge,soft_purge,[]}]},
{"4.3.10",
[{load_module,emqx_auth_http,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_http,brutal_purge,soft_purge,[]}]},
{"4.3.9",
@ -45,7 +48,10 @@
{load_module,emqx_auth_http_cli,brutal_purge,soft_purge,[]}]},
{<<"4.3.[0-1]">>,[{restart_application,emqx_auth_http}]},
{<<".*">>,[]}],
[{"4.3.10",
[{"4.3.11",
[{load_module,emqx_auth_http,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_http,brutal_purge,soft_purge,[]}]},
{"4.3.10",
[{load_module,emqx_auth_http,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_http,brutal_purge,soft_purge,[]}]},
{"4.3.9",

View File

@ -39,7 +39,7 @@ check(ClientInfo, AuthResult, #{auth := AuthParms = #{path := Path},
Username = maps:get(username, ClientInfo, undefined),
case authenticate(AuthParms, ClientInfo) of
{ok, 200, <<"ignore">>} ->
ok;
?LOG(debug, "Auth ignored, path: ~ts, username: ~ts", [Path, Username]);
{ok, 200, Body} ->
?LOG(debug, "Auth succeeded from path: ~ts, username: ~ts", [Path, Username]),
IsSuperuser = is_superuser(SuperParams, ClientInfo),

View File

@ -1,6 +1,6 @@
{application, emqx_auth_jwt,
[{description, "EMQ X Authentication with JWT"},
{vsn, "4.4.9"}, % strict semver, bump manually!
[{description, "EMQX Authentication with JWT"},
{vsn, "4.4.10"}, % strict semver, bump manually!
{modules, []},
{registered, [emqx_auth_jwt_sup]},
{applications, [kernel,stdlib,jose]},

View File

@ -1,7 +1,8 @@
%% -*- mode: erlang -*-
%% Unless you know what you are doing, DO NOT edit manually!!
{VSN,
[{"4.4.8",
[{"4.4.9",[{load_module,emqx_auth_jwt,brutal_purge,soft_purge,[]}]},
{"4.4.8",
[{load_module,emqx_auth_jwt,brutal_purge,soft_purge,[]},
{load_module,emqx_auth_jwt_svr,brutal_purge,soft_purge,[]}]},
{<<"4\\.4\\.[2-7]">>,
@ -9,7 +10,8 @@
{load_module,emqx_auth_jwt,brutal_purge,soft_purge,[]}]},
{<<"4\\.4\\.[0-1]">>,[{restart_application,emqx_auth_jwt}]},
{<<".*">>,[]}],
[{"4.4.8",
[{"4.4.9",[{load_module,emqx_auth_jwt,brutal_purge,soft_purge,[]}]},
{"4.4.8",
[{load_module,emqx_auth_jwt,brutal_purge,soft_purge,[]},
{load_module,emqx_auth_jwt_svr,brutal_purge,soft_purge,[]}]},
{<<"4\\.4\\.[2-7]">>,

View File

@ -41,15 +41,15 @@ check(ClientInfo, AuthResult, State) ->
check_auth(ClientInfo, AuthResult, #{from := From, checklists := Checklists}) ->
case maps:find(From, ClientInfo) of
error ->
ok;
?LOG(debug, "Auth ignored, ~p not found in Client: ~p", [From, ClientInfo]);
{ok, undefined} ->
ok;
?LOG(debug, "Auth ignored, ~p undefined, Client: ~p", [From, ClientInfo]);
{ok, Token} ->
case emqx_auth_jwt_svr:verify(Token) of
{error, not_found} ->
ok;
?LOG_SENSITIVE(debug, "Auth ignored, ~p not_found, Client: ~p", [Token, ClientInfo]);
{error, not_token} ->
ok;
?LOG_SENSITIVE(debug, "Auth ignored, ~p not_token, Client: ~p", [Token, ClientInfo]);
{error, Reason} ->
?LOG_SENSITIVE(debug,
"Auth from JWT failed, Client: ~p, Reason: ~p",

View File

@ -28,7 +28,9 @@
check_acl(ClientInfo, PubSub, Topic, NoMatchAction, State) ->
case do_check_acl(ClientInfo, PubSub, Topic, NoMatchAction, State) of
ok -> ok;
ok -> ?LOG_SENSITIVE(debug,
"[LDAP] ACL ignored, Topic: ~p, Action: ~p for Client: ~p",
[Topic, PubSub, ClientInfo]);
{stop, allow} ->
?LOG_SENSITIVE(debug,
"[LDAP] Allow Topic: ~p, Action: ~p for Client: ~p",

View File

@ -1,13 +1,13 @@
{application, emqx_auth_ldap,
[{description, "EMQ X Authentication/ACL with LDAP"},
{vsn, "4.3.7"}, % strict semver, bump manually!
[{description, "EMQX Authentication/ACL with LDAP"},
{vsn, "4.3.8"}, % strict semver, bump manually!
{modules, []},
{registered, [emqx_auth_ldap_sup]},
{applications, [kernel,stdlib,eldap2,ecpool]},
{mod, {emqx_auth_ldap_app,[]}},
{env, []},
{licenses, ["Apache-2.0"]},
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
{maintainers, ["EMQX Team <contact@emqx.io>"]},
{links, [{"Homepage", "https://emqx.io/"},
{"Github", "https://github.com/emqx/emqx-auth-ldap"}
]}

View File

@ -1,7 +1,10 @@
%% -*- mode: erlang -*-
%% Unless you know what you are doing, DO NOT edit manually!!
{VSN,
[{"4.3.6",
[{"4.3.7",
[{load_module,emqx_auth_ldap,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_ldap,brutal_purge,soft_purge,[]}]},
{"4.3.6",
[{load_module,emqx_acl_ldap,brutal_purge,soft_purge,[]},
{load_module,emqx_auth_ldap,brutal_purge,soft_purge,[]}]},
{"4.3.5",
@ -24,7 +27,10 @@
{load_module,emqx_acl_ldap,brutal_purge,soft_purge,[]},
{load_module,emqx_auth_ldap_cli,brutal_purge,soft_purge,[]}]},
{<<".*">>,[]}],
[{"4.3.6",
[{"4.3.7",
[{load_module,emqx_auth_ldap,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_ldap,brutal_purge,soft_purge,[]}]},
{"4.3.6",
[{load_module,emqx_acl_ldap,brutal_purge,soft_purge,[]},
{load_module,emqx_auth_ldap,brutal_purge,soft_purge,[]}]},
{"4.3.5",

View File

@ -59,13 +59,15 @@ check(ClientInfo = #{username := Username, password := Password}, AuthResult,
case CheckResult of
ok ->
?LOG_SENSITIVE(debug,
"[LDAP] Auth from ldap succeeded, Client: ~p",
"[LDAP] Auth succeeded, Client: ~p",
[ClientInfo]),
{stop, AuthResult#{auth_result => success, anonymous => false}};
{error, not_found} ->
ok;
?LOG_SENSITIVE(debug,
"[LDAP] Auth ignored, Client: ~p",
[ClientInfo]);
{error, ResultCode} ->
?LOG_SENSITIVE(error, "[LDAP] Auth from ldap failed: ~p", [ResultCode]),
?LOG_SENSITIVE(error, "[LDAP] Auth failed: ~p", [ResultCode]),
{stop, AuthResult#{auth_result => ResultCode, anonymous => false}}
end.

View File

@ -54,7 +54,9 @@ check_acl(ClientInfo = #{ clientid := Clientid }, PubSub, Topic, _NoMatchAction,
[Topic, PubSub, ClientInfo]),
{stop, deny};
_ ->
ok
?LOG_SENSITIVE(debug,
"[Mnesia] ACL ignored, Topic: ~p, Action: ~p for Client: ~p",
[Topic, PubSub, ClientInfo])
end.
description() -> "Acl with Mnesia".

View File

@ -1,13 +1,13 @@
{application, emqx_auth_mnesia,
[{description, "EMQ X Authentication with Mnesia"},
{vsn, "4.3.11"}, % strict semver, bump manually
[{description, "EMQX Authentication with Mnesia"},
{vsn, "4.3.12"}, % strict semver, bump manually
{modules, []},
{registered, []},
{applications, [kernel,stdlib,mnesia]},
{mod, {emqx_auth_mnesia_app,[]}},
{env, []},
{licenses, ["Apache-2.0"]},
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
{maintainers, ["EMQX Team <contact@emqx.io>"]},
{links, [{"Homepage", "https://emqx.io/"},
{"Github", "https://github.com/emqx/emqx-auth-mnesia"}
]}

View File

@ -1,7 +1,10 @@
%% -*- mode: erlang -*-
%% Unless you know what you are doing, DO NOT edit manually!!
{VSN,
[{"4.3.10",
[{"4.3.11",
[{load_module,emqx_auth_mnesia,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_mnesia,brutal_purge,soft_purge,[]}]},
{"4.3.10",
[{load_module,emqx_auth_mnesia,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_mnesia,brutal_purge,soft_purge,[]}]},
{"4.3.9",
@ -47,7 +50,10 @@
{load_module,emqx_acl_mnesia_cli,brutal_purge,soft_purge,[]},
{load_module,emqx_auth_mnesia_app,brutal_purge,soft_purge,[]}]},
{<<".*">>,[]}],
[{"4.3.10",
[{"4.3.11",
[{load_module,emqx_auth_mnesia,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_mnesia,brutal_purge,soft_purge,[]}]},
{"4.3.10",
[{load_module,emqx_auth_mnesia,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_mnesia,brutal_purge,soft_purge,[]}]},
{"4.3.9",

View File

@ -60,19 +60,17 @@ check(ClientInfo = #{ clientid := Clientid
MatchSpec = ets:fun2ms(fun({?TABLE, {clientid, X}, Password, InterTime}) when X =:= Clientid-> Password;
({?TABLE, {username, X}, Password, InterTime}) when X =:= Username andalso X =/= undefined -> Password
end),
Info = maps:without([password], ClientInfo),
case ets:select(?TABLE, MatchSpec) of
[] ->
ok;
?LOG(debug, "[Mnesia] Auth ignored, Client: ~p", [Info]);
List ->
case match_password(NPassword, HashType, List) of
false ->
Info = maps:without([password], ClientInfo),
?LOG(info, "[Mnesia] Auth from mnesia failed: ~p", [Info]),
{stop, AuthResult#{anonymous => false, auth_result => password_error}};
_ ->
?LOG_SENSITIVE(debug,
"[Mnesia] Auth from mnesia succeeded, Client: ~p",
[ClientInfo]),
?LOG(debug,"[Mnesia] Auth from mnesia succeeded, Client: ~p", [Info]),
{stop, AuthResult#{anonymous => false, auth_result => success}}
end
end.

View File

@ -35,7 +35,9 @@ check_acl(ClientInfo, PubSub, Topic, _AclResult, Env = #{aclquery := AclQuery})
maps:from_list(emqx_auth_mongo:replvars(Selector, ClientInfo))
end, SelectorList),
case emqx_auth_mongo:query_multi(Pool, Coll, SelectorMapList) of
[] -> ok;
[] -> ?LOG_SENSITIVE(debug,
"[MongoDB] ACL ignored, Topic: ~p, Action: ~p for Client: ~p",
[Topic, PubSub, ClientInfo]);
Rows ->
try match(ClientInfo, Topic, topics(PubSub, Rows)) of
matched ->
@ -50,7 +52,7 @@ check_acl(ClientInfo, PubSub, Topic, _AclResult, Env = #{aclquery := AclQuery})
{stop, deny}
catch
_Err:Reason->
?LOG(error, "[MongoDB] Check mongo ~p ACL failed, got ACL config: ~p, error: :~p",
?LOG(error, "[MongoDB] ACL ignored, check mongo ~p ACL failed, got ACL config: ~p, error: ~p",
[PubSub, Rows, Reason]),
ignore
end

View File

@ -1,13 +1,13 @@
{application, emqx_auth_mongo,
[{description, "EMQ X Authentication/ACL with MongoDB"},
{vsn, "4.4.6"}, % strict semver, bump manually!
[{description, "EMQX Authentication/ACL with MongoDB"},
{vsn, "4.4.7"}, % strict semver, bump manually!
{modules, []},
{registered, [emqx_auth_mongo_sup]},
{applications, [kernel,stdlib,mongodb,ecpool]},
{mod, {emqx_auth_mongo_app,[]}},
{env, []},
{licenses, ["Apache-2.0"]},
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
{maintainers, ["EMQX Team <contact@emqx.io>"]},
{links, [{"Homepage", "https://emqx.io/"},
{"Github", "https://github.com/emqx/emqx-auth-mongo"}
]}

View File

@ -1,7 +1,10 @@
%% -*- mode: erlang -*-
%% Unless you know what you are doing, DO NOT edit manually!!
{VSN,
[{"4.4.5",
[{"4.4.6",
[{load_module,emqx_auth_mongo,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_mongo,brutal_purge,soft_purge,[]}]},
{"4.4.5",
[{load_module,emqx_acl_mongo,brutal_purge,soft_purge,[]},
{load_module,emqx_auth_mongo,brutal_purge,soft_purge,[]}]},
{"4.4.4",
@ -22,7 +25,10 @@
{load_module,emqx_auth_mongo,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_mongo,brutal_purge,soft_purge,[]}]},
{<<".*">>,[]}],
[{"4.4.5",
[{"4.4.6",
[{load_module,emqx_auth_mongo,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_mongo,brutal_purge,soft_purge,[]}]},
{"4.4.5",
[{load_module,emqx_acl_mongo,brutal_purge,soft_purge,[]},
{load_module,emqx_auth_mongo,brutal_purge,soft_purge,[]}]},
{"4.4.4",

View File

@ -52,10 +52,11 @@ check(ClientInfo = #{password := Password}, AuthResult,
hash = HashType, selector = Selector} = AuthQuery,
Pool = maps:get(pool, Env, ?APP),
case query(Pool, Collection, maps:from_list(replvars(Selector, ClientInfo))) of
undefined -> ok;
undefined ->
?LOG_SENSITIVE(debug, "[MongoDB] Auth ignored, Client: ~p", [ClientInfo]);
{error, Reason} ->
?tp(emqx_auth_mongo_check_authn_error, #{error => Reason}),
?LOG_SENSITIVE(error, "[MongoDB] Can't connect to MongoDB server: ~0p", [Reason]),
?LOG_SENSITIVE(error, "[MongoDB] Auth failed, Can't connect to MongoDB server: ~0p", [Reason]),
{stop, AuthResult#{auth_result => not_authorized, anonymous => false}};
UserMap ->
Result = case [maps:get(Field, UserMap, undefined) || Field <- Fields] of
@ -69,7 +70,7 @@ check(ClientInfo = #{password := Password}, AuthResult,
ok ->
?tp(emqx_auth_mongo_superuser_check_authn_ok, #{}),
?LOG_SENSITIVE(debug,
"[MongoDB] Auth from mongo succeeded, Client: ~p",
"[MongoDB] Auth succeeded, Client: ~p",
[ClientInfo]),
{stop, AuthResult#{is_superuser => is_superuser(Pool, SuperQuery, ClientInfo),
anonymous => false,

View File

@ -28,7 +28,10 @@
check_acl(ClientInfo, PubSub, Topic, NoMatchAction, #{pool := Pool} = State) ->
case do_check_acl(Pool, ClientInfo, PubSub, Topic, NoMatchAction, State) of
ok -> ok;
ok ->
?LOG_SENSITIVE(debug,
"[MySQL] ACL ignored, Topic: ~p, Action: ~p for Client: ~p",
[Topic, PubSub, ClientInfo]);
{stop, allow} ->
?LOG_SENSITIVE(debug,
"[MySQL] Allow Topic: ~p, Action: ~p for Client: ~p",

View File

@ -1,13 +1,13 @@
{application, emqx_auth_mysql,
[{description, "EMQ X Authentication/ACL with MySQL"},
{vsn, "4.3.5"}, % strict semver, bump manually!
[{description, "EMQX Authentication/ACL with MySQL"},
{vsn, "4.3.6"}, % strict semver, bump manually!
{modules, []},
{registered, [emqx_auth_mysql_sup]},
{applications, [kernel,stdlib,mysql,ecpool]},
{mod, {emqx_auth_mysql_app,[]}},
{env, []},
{licenses, ["Apache-2.0"]},
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
{maintainers, ["EMQX Team <contact@emqx.io>"]},
{links, [{"Homepage", "https://emqx.io/"},
{"Github", "https://github.com/emqx/emqx-auth-mysql"}
]}

View File

@ -1,7 +1,10 @@
%% -*- mode: erlang -*-
%% Unless you know what you are doing, DO NOT edit manually!!
{VSN,
[{"4.3.4",
[{"4.3.5",
[{load_module,emqx_auth_mysql,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_mysql,brutal_purge,soft_purge,[]}]},
{"4.3.4",
[{load_module,emqx_auth_mysql,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_mysql,brutal_purge,soft_purge,[]},
{load_module,emqx_auth_mysql_cli,brutal_purge,soft_purge,[]}]},
@ -20,7 +23,10 @@
{load_module,emqx_auth_mysql,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_mysql,brutal_purge,soft_purge,[]}]},
{<<".*">>,[]}],
[{"4.3.4",
[{"4.3.5",
[{load_module,emqx_auth_mysql,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_mysql,brutal_purge,soft_purge,[]}]},
{"4.3.4",
[{load_module,emqx_auth_mysql,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_mysql,brutal_purge,soft_purge,[]},
{load_module,emqx_auth_mysql_cli,brutal_purge,soft_purge,[]}]},

View File

@ -46,16 +46,14 @@ check(ClientInfo = #{password := Password}, AuthResult,
end,
case CheckPass of
ok ->
?LOG_SENSITIVE(debug,
"[MySQL] Auth from mysql succeeded, Client: ~p",
[ClientInfo]),
?LOG_SENSITIVE(debug, "[MySQL] Auth succeeded, Client: ~p", [ClientInfo]),
{stop, AuthResult#{is_superuser => is_superuser(Pool, SuperQuery, ClientInfo),
anonymous => false,
auth_result => success}};
{error, not_found} ->
ok;
?LOG_SENSITIVE(debug, "[MySQL] Auth ignored, Client: ~p", [ClientInfo]);
{error, ResultCode} ->
?LOG_SENSITIVE(error, "[MySQL] Auth from mysql failed: ~p", [ResultCode]),
?LOG_SENSITIVE(error, "[MySQL] Auth failed: ~p", [ResultCode]),
{stop, AuthResult#{auth_result => ResultCode, anonymous => false}}
end.

View File

@ -32,7 +32,10 @@ do_check_acl(_Pool, #{username := <<$$, _/binary>>}, _PubSub, _Topic, _NoMatchAc
ok;
do_check_acl(Pool, ClientInfo, PubSub, Topic, _NoMatchAction, #{acl_query := {AclSql, AclParams}}) ->
case emqx_auth_pgsql_cli:equery(Pool, AclSql, AclParams, ClientInfo) of
{ok, _, []} -> ok;
{ok, _, []} ->
?LOG_SENSITIVE(debug,
"[Postgres] ACL ignored, Topic: ~p, Action: ~p for Client: ~p",
[Topic, PubSub, ClientInfo]);
{ok, _, Rows} ->
Rules = filter(PubSub, compile(Rows)),
case match(ClientInfo, Topic, Rules) of

View File

@ -1,13 +1,13 @@
{application, emqx_auth_pgsql,
[{description, "EMQ X Authentication/ACL with PostgreSQL"},
{vsn, "4.4.5"}, % strict semver, bump manually!
[{description, "EMQX Authentication/ACL with PostgreSQL"},
{vsn, "4.4.6"}, % strict semver, bump manually!
{modules, []},
{registered, [emqx_auth_pgsql_sup]},
{applications, [kernel,stdlib,epgsql,ecpool]},
{mod, {emqx_auth_pgsql_app,[]}},
{env, []},
{licenses, ["Apache-2.0"]},
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
{maintainers, ["EMQX Team <contact@emqx.io>"]},
{links, [{"Homepage", "https://emqx.io/"},
{"Github", "https://github.com/emqx/emqx-auth-pgsql"}
]}

View File

@ -1,7 +1,10 @@
%% -*- mode: erlang -*-
%% Unless you know what you are doing, DO NOT edit manually!!
{VSN,
[{"4.4.4",
[{"4.4.5",
[{load_module,emqx_auth_pgsql,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_pgsql,brutal_purge,soft_purge,[]}]},
{"4.4.4",
[{load_module,emqx_acl_pgsql,brutal_purge,soft_purge,[]},
{load_module,emqx_auth_pgsql,brutal_purge,soft_purge,[]}]},
{"4.4.3",
@ -14,7 +17,10 @@
{load_module,emqx_auth_pgsql,brutal_purge,soft_purge,[]},
{load_module,emqx_auth_pgsql_app,brutal_purge,soft_purge,[]}]},
{<<".*">>,[]}],
[{"4.4.4",
[{"4.4.5",
[{load_module,emqx_auth_pgsql,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_pgsql,brutal_purge,soft_purge,[]}]},
{"4.4.4",
[{load_module,emqx_acl_pgsql,brutal_purge,soft_purge,[]},
{load_module,emqx_auth_pgsql,brutal_purge,soft_purge,[]}]},
{"4.4.3",

View File

@ -45,16 +45,14 @@ check(ClientInfo = #{password := Password}, AuthResult,
end,
case CheckPass of
ok ->
?LOG_SENSITIVE(debug,
"[Postgres] Auth from pgsql succeeded, Client: ~p",
[ClientInfo]),
?LOG_SENSITIVE(debug, "[Postgres] Auth succeeded, Client: ~p", [ClientInfo]),
{stop, AuthResult#{is_superuser => is_superuser(Pool, SuperQuery, ClientInfo),
anonymous => false,
auth_result => success}};
{error, not_found} ->
ok;
?LOG_SENSITIVE(debug, "[Postgres] Auth ignored, Client: ~p", [ClientInfo]);
{error, ResultCode} ->
?LOG_SENSITIVE(error, "[Postgres] Auth from pgsql failed: ~p", [ResultCode]),
?LOG_SENSITIVE(error, "[Postgres] Auth failed: ~p", [ResultCode]),
{stop, AuthResult#{auth_result => ResultCode, anonymous => false}}
end.

View File

@ -30,7 +30,10 @@ check_acl(#{username := <<$$, _/binary>>}, _PubSub, _Topic, _AclResult, _Config)
check_acl(ClientInfo, PubSub, Topic, _AclResult,
#{acl_cmd := AclCmd, timeout := Timeout, type := Type, pool := Pool}) ->
case emqx_auth_redis_cli:q(Pool, Type, AclCmd, ClientInfo, Timeout) of
{ok, []} -> ok;
{ok, []} ->
?LOG_SENSITIVE(debug,
"[Redis] ACL ignored, Topic: ~p, Action: ~p for Client: ~p",
[Topic, PubSub, ClientInfo]);
{ok, Rules} ->
case match(ClientInfo, PubSub, Topic, Rules) of
allow ->

View File

@ -1,13 +1,13 @@
{application, emqx_auth_redis,
[{description, "EMQ X Authentication/ACL with Redis"},
{vsn, "4.3.5"}, % strict semver, bump manually!
[{description, "EMQX Authentication/ACL with Redis"},
{vsn, "4.3.6"}, % strict semver, bump manually!
{modules, []},
{registered, [emqx_auth_redis_sup]},
{applications, [kernel,stdlib,eredis,eredis_cluster,ecpool]},
{mod, {emqx_auth_redis_app, []}},
{env, []},
{licenses, ["Apache-2.0"]},
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
{maintainers, ["EMQX Team <contact@emqx.io>"]},
{links, [{"Homepage", "https://emqx.io/"},
{"Github", "https://github.com/emqx/emqx-auth-redis"}
]}

View File

@ -1,8 +1,12 @@
%% -*- mode: erlang -*-
%% Unless you know what you are doing, DO NOT edit manually!!
{VSN,
[{"4.3.4",
[{load_module,emqx_acl_redis,brutal_purge,soft_purge,[]}]},
[{"4.3.5",
[{load_module,emqx_acl_redis,brutal_purge,soft_purge,[]},
{load_module,emqx_auth_redis,brutal_purge,soft_purge,[]}]},
{"4.3.4",
[{load_module,emqx_auth_redis,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_redis,brutal_purge,soft_purge,[]}]},
{"4.3.3",
[{load_module,emqx_acl_redis,brutal_purge,soft_purge,[]},
{load_module,emqx_auth_redis,brutal_purge,soft_purge,[]},
@ -18,8 +22,12 @@
{load_module,emqx_auth_redis,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_redis,brutal_purge,soft_purge,[]}]},
{<<".*">>,[]}],
[{"4.3.4",
[{load_module,emqx_acl_redis,brutal_purge,soft_purge,[]}]},
[{"4.3.5",
[{load_module,emqx_acl_redis,brutal_purge,soft_purge,[]},
{load_module,emqx_auth_redis,brutal_purge,soft_purge,[]}]},
{"4.3.4",
[{load_module,emqx_auth_redis,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_redis,brutal_purge,soft_purge,[]}]},
{"4.3.3",
[{load_module,emqx_acl_redis,brutal_purge,soft_purge,[]},
{load_module,emqx_auth_redis,brutal_purge,soft_purge,[]},

View File

@ -47,14 +47,15 @@ check(ClientInfo = #{password := Password}, AuthResult,
end,
case CheckPass of
ok ->
?LOG_SENSITIVE(debug, "[Redis] Auth succeeded, Client: ~p", [ClientInfo]),
IsSuperuser = is_superuser(Pool, Type, SuperCmd, ClientInfo, Timeout),
{stop, AuthResult#{is_superuser => IsSuperuser,
anonymous => false,
auth_result => success}};
{error, not_found} ->
ok;
?LOG_SENSITIVE(debug, "[Redis] Auth ignored, Client: ~p", [ClientInfo]);
{error, ResultCode} ->
?LOG_SENSITIVE(error, "[Redis] Auth from redis failed: ~p", [ResultCode]),
?LOG_SENSITIVE(error, "[Redis] Auth failed: ~p", [ResultCode]),
{stop, AuthResult#{auth_result => ResultCode, anonymous => false}}
end.

View File

@ -1,13 +1,13 @@
{application, emqx_bridge_mqtt,
[{description, "EMQ X Bridge to MQTT Broker"},
{vsn, "4.3.8"}, % strict semver, bump manually!
[{description, "EMQX Bridge to MQTT Broker"},
{vsn, "4.3.9"}, % strict semver, bump manually!
{modules, []},
{registered, []},
{applications, [kernel,stdlib,replayq,emqtt]},
{mod, {emqx_bridge_mqtt_app, []}},
{env, []},
{licenses, ["Apache-2.0"]},
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
{maintainers, ["EMQX Team <contact@emqx.io>"]},
{links, [{"Homepage", "https://emqx.io/"},
{"Github", "https://github.com/emqx/emqx-bridge-mqtt"}
]}

View File

@ -1,7 +1,9 @@
%% -*- mode: erlang -*-
%% Unless you know what you are doing, DO NOT edit manually!!
{VSN,
[{"4.3.7",
[{"4.3.8",
[{load_module,emqx_bridge_mqtt_actions,brutal_purge,soft_purge,[]}]},
{"4.3.7",
[{load_module,emqx_bridge_mqtt_actions,brutal_purge,soft_purge,[]}]},
{"4.3.6",
[{load_module,emqx_bridge_connect,brutal_purge,soft_purge,[]},
@ -23,7 +25,9 @@
{load_module,emqx_bridge_worker,brutal_purge,soft_purge,[]},
{load_module,emqx_bridge_mqtt_actions,brutal_purge,soft_purge,[]}]},
{<<".*">>,[]}],
[{"4.3.7",
[{"4.3.8",
[{load_module,emqx_bridge_mqtt_actions,brutal_purge,soft_purge,[]}]},
{"4.3.7",
[{load_module,emqx_bridge_mqtt_actions,brutal_purge,soft_purge,[]}]},
{"4.3.6",
[{load_module,emqx_bridge_connect,brutal_purge,soft_purge,[]},

View File

@ -1,13 +1,13 @@
{application, emqx_coap,
[{description, "EMQ X CoAP Gateway"},
{vsn, "4.3.3"}, % strict semver, bump manually!
[{description, "EMQX CoAP Gateway"},
{vsn, "4.3.4"}, % strict semver, bump manually!
{modules, []},
{registered, []},
{applications, [kernel,stdlib,gen_coap]},
{mod, {emqx_coap_app, []}},
{env, []},
{licenses, ["Apache-2.0"]},
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
{maintainers, ["EMQX Team <contact@emqx.io>"]},
{links, [{"Homepage", "https://emqx.io/"},
{"Github", "https://github.com/emqx/emqx-coap"}
]}

View File

@ -1,13 +1,13 @@
%% -*- mode: erlang -*-
{application, emqx_exhook,
[{description, "EMQ X Extension for Hook"},
{vsn, "4.4.6"},
[{description, "EMQX Extension for Hook"},
{vsn, "4.4.7"},
{modules, []},
{registered, []},
{mod, {emqx_exhook_app, []}},
{applications, [kernel,stdlib,grpc]},
{env,[]},
{licenses, ["Apache-2.0"]},
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
{maintainers, ["EMQX Team <contact@emqx.io>"]},
{links, [{"Homepage", "https://emqx.io/"}]}
]}.

View File

@ -1,12 +1,12 @@
{application, emqx_exproto,
[{description, "EMQ X Extension for Protocol"},
{vsn, "4.3.15"}, %% 4.3.3 is used by ee
[{description, "EMQX Extension for Protocol"},
{vsn, "4.3.16"}, %% 4.3.3 is used by ee
{modules, []},
{registered, []},
{mod, {emqx_exproto_app, []}},
{applications, [kernel,stdlib,grpc]},
{env,[]},
{licenses, ["Apache-2.0"]},
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
{maintainers, ["EMQX Team <contact@emqx.io>"]},
{links, [{"Homepage", "https://emqx.io/"}]}
]}.

View File

@ -1,13 +1,13 @@
{application, emqx_lua_hook,
[{description, "EMQ X Lua Hooks"},
{vsn, "4.3.2"}, % strict semver, bump manually!
[{description, "EMQX Lua Hooks"},
{vsn, "4.3.3"}, % strict semver, bump manually!
{modules, []},
{registered, []},
{applications, [kernel,stdlib]},
{mod, {emqx_lua_hook_app,[]}},
{env,[]},
{licenses, ["Apache-2.0"]},
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
{maintainers, ["EMQX Team <contact@emqx.io>"]},
{links, [{"Homepage", "https://emqx.io/"},
{"Github", "https://github.com/emqx/emqx-lua-hook"}
]}

View File

@ -2,6 +2,8 @@
%% Unless you know what you are doing, DO NOT edit manually!!
{VSN,
[{"4.3.1",[{load_module,emqx_lua_script,brutal_purge,soft_purge,[]}]},
{"4.3.0",[{load_module,emqx_lua_script,brutal_purge,soft_purge,[]}]}],
{"4.3.0",[{load_module,emqx_lua_script,brutal_purge,soft_purge,[]}]},
{<<".*">>,[]}],
[{"4.3.1",[{load_module,emqx_lua_script,brutal_purge,soft_purge,[]}]},
{"4.3.0",[{load_module,emqx_lua_script,brutal_purge,soft_purge,[]}]}]}.
{"4.3.0",[{load_module,emqx_lua_script,brutal_purge,soft_purge,[]}]},
{<<".*">>,[]}]}.

View File

@ -1,6 +1,6 @@
{application,emqx_lwm2m,
[{description,"EMQ X LwM2M Gateway"},
{vsn, "4.3.8"}, % strict semver, bump manually!
[{description,"EMQX LwM2M Gateway"},
{vsn, "4.3.9"}, % strict semver, bump manually!
{modules,[]},
{registered,[emqx_lwm2m_sup]},
{applications,[kernel,stdlib,lwm2m_coap]},

View File

@ -7,14 +7,18 @@
{load_module,emqx_lwm2m_message,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_json,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_cmd_handler,brutal_purge,soft_purge,[]}]},
{<<"4\\.3\\.[0-1]">>,[{restart_application,emqx_lwm2m}]},
{"4.3.2",
{"4.3.6",
[{load_module,emqx_lwm2m_xml_object_db,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_xml_object,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_message,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_json,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_cmd_handler,brutal_purge,soft_purge,[]}]},
{"4.3.5",
[{load_module,emqx_lwm2m_xml_object_db,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_xml_object,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_message,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_json,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_cmd_handler,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_protocol,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_message,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_api,brutal_purge,soft_purge,[]}]},
{<<"4\\.3\\.[3-4]">>,
[{load_module,emqx_lwm2m_xml_object_db,brutal_purge,soft_purge,[]},
@ -24,33 +28,34 @@
{load_module,emqx_lwm2m_cmd_handler,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_protocol,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_api,brutal_purge,soft_purge,[]}]},
{"4.3.5",
{"4.3.2",
[{load_module,emqx_lwm2m_xml_object_db,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_xml_object,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_message,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_json,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_cmd_handler,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_api,brutal_purge,soft_purge,[]}]},
{"4.3.6",
[{load_module,emqx_lwm2m_xml_object_db,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_xml_object,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_protocol,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_message,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_json,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_cmd_handler,brutal_purge,soft_purge,[]}]}],
{load_module,emqx_lwm2m_api,brutal_purge,soft_purge,[]}]},
{<<"4\\.3\\.[0-1]">>,[{restart_application,emqx_lwm2m}]},
{<<".*">>,[]}],
[{"4.3.7",
[{load_module,emqx_lwm2m_xml_object_db,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_xml_object,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_message,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_json,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_cmd_handler,brutal_purge,soft_purge,[]}]},
{<<"4\\.3\\.[0-1]">>,[{restart_application,emqx_lwm2m}]},
{"4.3.2",
{"4.3.6",
[{load_module,emqx_lwm2m_xml_object_db,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_xml_object,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_message,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_json,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_cmd_handler,brutal_purge,soft_purge,[]}]},
{"4.3.5",
[{load_module,emqx_lwm2m_xml_object_db,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_xml_object,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_message,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_json,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_cmd_handler,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_protocol,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_message,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_api,brutal_purge,soft_purge,[]}]},
{<<"4\\.3\\.[3-4]">>,
[{load_module,emqx_lwm2m_xml_object_db,brutal_purge,soft_purge,[]},
@ -60,16 +65,13 @@
{load_module,emqx_lwm2m_cmd_handler,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_protocol,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_api,brutal_purge,soft_purge,[]}]},
{"4.3.5",
{"4.3.2",
[{load_module,emqx_lwm2m_xml_object_db,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_xml_object,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_message,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_json,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_cmd_handler,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_api,brutal_purge,soft_purge,[]}]},
{"4.3.6",
[{load_module,emqx_lwm2m_xml_object_db,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_xml_object,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_protocol,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_message,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_json,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_cmd_handler,brutal_purge,soft_purge,[]}]}]}.
{load_module,emqx_lwm2m_api,brutal_purge,soft_purge,[]}]},
{<<"4\\.3\\.[0-1]">>,[{restart_application,emqx_lwm2m}]},
{<<".*">>,[]}]}.

View File

@ -1,13 +1,13 @@
{application, emqx_management,
[{description, "EMQ X Management API and CLI"},
{vsn, "4.4.13"}, % strict semver, bump manually!
[{description, "EMQX Management API and CLI"},
{vsn, "4.4.14"}, % strict semver, bump manually!
{modules, []},
{registered, [emqx_management_sup]},
{applications, [kernel,stdlib,emqx_plugin_libs,minirest]},
{mod, {emqx_mgmt_app,[]}},
{env, []},
{licenses, ["Apache-2.0"]},
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
{maintainers, ["EMQX Team <contact@emqx.io>"]},
{links, [{"Homepage", "https://emqx.io/"},
{"Github", "https://github.com/emqx/emqx-management"}
]}

View File

@ -1,6 +1,6 @@
{application, emqx_plugin_libs,
[{description, "EMQ X Plugin utility libs"},
{vsn, "4.4.6"},
[{description, "EMQX Plugin utility libs"},
{vsn, "4.4.8"},
{modules, []},
{applications, [kernel,stdlib]},
{env, []}

View File

@ -1,14 +1,16 @@
%% -*- mode: erlang -*-
%% Unless you know what you are doing, DO NOT edit manually!!
{VSN,
[
{<<"4\\.4\\.[3-5]">>,
[{"4.4.7",[{load_module,emqx_plugin_libs_ssl,brutal_purge,soft_purge,[]}]},
{"4.4.6",[{load_module,emqx_plugin_libs_ssl,brutal_purge,soft_purge,[]}]},
{<<"4\\.4\\.[3-5]">>,
[{load_module,emqx_trace,brutal_purge,soft_purge,[]},
{load_module,emqx_trace_api,brutal_purge,soft_purge,[]}]},
{"4.4.2",[
{load_module,emqx_plugin_libs_ssl,brutal_purge,soft_purge,[]},
{load_module,emqx_trace,brutal_purge,soft_purge,[]},
{load_module,emqx_trace_api,brutal_purge,soft_purge,[]}]},
{load_module,emqx_trace_api,brutal_purge,soft_purge,[]},
{load_module,emqx_plugin_libs_ssl,brutal_purge,soft_purge,[]}]},
{"4.4.2",
[{load_module,emqx_plugin_libs_ssl,brutal_purge,soft_purge,[]},
{load_module,emqx_trace,brutal_purge,soft_purge,[]},
{load_module,emqx_trace_api,brutal_purge,soft_purge,[]}]},
{"4.4.1",
[{load_module,emqx_plugin_libs_ssl,brutal_purge,soft_purge,[]},
{load_module,emqx_trace,brutal_purge,soft_purge,[]},
@ -20,17 +22,16 @@
{update,emqx_slow_subs,{advanced,["4.4.0"]}},
{load_module,emqx_slow_subs_api,brutal_purge,soft_purge,[]}]},
{<<".*">>,[]}],
[
{<<"4\\.4\\.[3-5]">>,
[{"4.4.7",[{load_module,emqx_plugin_libs_ssl,brutal_purge,soft_purge,[]}]},
{"4.4.6",[{load_module,emqx_plugin_libs_ssl,brutal_purge,soft_purge,[]}]},
{<<"4\\.4\\.[3-5]">>,
[{load_module,emqx_trace,brutal_purge,soft_purge,[]},
{load_module,emqx_trace_api,brutal_purge,soft_purge,[]}]},
{"4.4.3",
[{load_module,emqx_trace,brutal_purge,soft_purge,[]},
{load_module,emqx_trace_api,brutal_purge,soft_purge,[]}]},
{load_module,emqx_trace_api,brutal_purge,soft_purge,[]},
{load_module,emqx_plugin_libs_ssl,brutal_purge,soft_purge,[]}]},
{"4.4.2",
[{load_module,emqx_plugin_libs_ssl,brutal_purge,soft_purge,[]},
{load_module,emqx_trace,brutal_purge,soft_purge,[]},
{load_module,emqx_trace_api,brutal_purge,soft_purge,[]}]},
[{load_module,emqx_plugin_libs_ssl,brutal_purge,soft_purge,[]},
{load_module,emqx_trace,brutal_purge,soft_purge,[]},
{load_module,emqx_trace_api,brutal_purge,soft_purge,[]}]},
{"4.4.1",
[{load_module,emqx_plugin_libs_ssl,brutal_purge,soft_purge,[]},
{load_module,emqx_trace,brutal_purge,soft_purge,[]},

View File

@ -18,9 +18,14 @@
-export([save_files_return_opts/2,
save_files_return_opts/3,
save_files_return_opts/4,
save_file/2
]).
-export([maybe_delete_dir/1,
maybe_delete_dir/2
]).
-type file_input_key() :: binary(). %% <<"file">> | <<"filename">>
-type file_input() :: #{file_input_key() => binary()}.
@ -38,11 +43,18 @@
-type opt_key() :: keyfile | certfile | cacertfile | verify | versions | ciphers.
-type opt_value() :: term().
-type opts() :: [{opt_key(), opt_value()}].
-type dirname() :: atom() | string() | binary().
%% @doc Parse ssl options input.
%% If the input contains file content, save the files in the given dir.
%% Returns ssl options for Erlang's ssl application.
-spec save_files_return_opts(opts_input(), atom() | string() | binary(),
-spec save_files_return_opts(opts_input(), dirname(),
string() | binary(), dirname()) -> opts().
save_files_return_opts(Options, SubDir, ResId, ResSubdir) ->
Dir = filename:join([emqx:get_env(data_dir), SubDir, ResId, ResSubdir]),
save_files_return_opts(Options, Dir).
-spec save_files_return_opts(opts_input(), dirname(),
string() | binary()) -> opts().
save_files_return_opts(Options, SubDir, ResId) ->
Dir = filename:join([emqx:get_env(data_dir), SubDir, ResId]),
@ -141,6 +153,20 @@ maybe_save_file(FileName, Content, Dir) ->
error({"failed_to_save_ssl_file", FullFilename, Reason})
end.
maybe_delete_dir(SubDir, ResId) ->
Dir = filename:join([emqx:get_env(data_dir), SubDir, ResId]),
maybe_delete_dir(Dir).
maybe_delete_dir(Dir) ->
case file:del_dir_r(Dir) of
ok ->
ok;
{error, enoent} ->
ok;
{error, Reason} ->
logger:error("Delete Resource dir ~p failed for reason: ~p", [Dir, Reason])
end.
ensure_str(L) when is_list(L) -> L;
ensure_str(B) when is_binary(B) -> unicode:characters_to_list(B, utf8).

View File

@ -1,13 +1,13 @@
{application, emqx_prometheus,
[{description, "Prometheus for EMQ X"},
{vsn, "4.3.2"}, % strict semver, bump manually!
[{description, "Prometheus for EMQX"},
{vsn, "4.3.3"}, % strict semver, bump manually!
{modules, []},
{registered, [emqx_prometheus_sup]},
{applications, [kernel,stdlib,prometheus]},
{mod, {emqx_prometheus_app,[]}},
{env, []},
{licenses, ["Apache-2.0"]},
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
{maintainers, ["EMQX Team <contact@emqx.io>"]},
{links, [{"Homepage", "https://emqx.io/"},
{"Github", "https://github.com/emqx/emqx-prometheus"}
]}

View File

@ -1,13 +1,13 @@
{application, emqx_psk_file,
[{description,"EMQX PSK Plugin from File"},
{vsn, "4.3.1"}, % strict semver, bump manually!
{vsn, "4.3.2"}, % strict semver, bump manually!
{modules,[]},
{registered,[emqx_psk_file_sup]},
{applications,[kernel,stdlib]},
{mod,{emqx_psk_file_app,[]}},
{env, []},
{licenses, ["Apache-2.0"]},
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
{maintainers, ["EMQX Team <contact@emqx.io>"]},
{links, [{"Homepage", "https://emqx.io/"},
{"Github", "https://github.com/emqx/emqx-psk-file"}
]}

View File

@ -2,9 +2,11 @@
{VSN,
[{"4.3.0",
[{load_module,emqx_psk_file,brutal_purge,soft_purge,[]},
{load_module,emqx_psk_file_sup,brutal_purge,soft_purge,[]}]}
{load_module,emqx_psk_file_sup,brutal_purge,soft_purge,[]}]},
{<<".*">>,[]}
],
[{"4.3.0",
[{load_module,emqx_psk_file,brutal_purge,soft_purge,[]},
{load_module,emqx_psk_file_sup,brutal_purge,soft_purge,[]}]}
{load_module,emqx_psk_file_sup,brutal_purge,soft_purge,[]}]},
{<<".*">>,[]}
]}.

View File

@ -1,13 +1,13 @@
{application, emqx_recon,
[{description, "EMQ X Recon Plugin"},
{vsn, "4.3.0"}, % strict semver, bump manually!
[{description, "EMQX Recon Plugin"},
{vsn, "4.3.1"}, % strict semver, bump manually!
{modules, []},
{registered, []},
{applications, [kernel,stdlib,recon]},
{mod, {emqx_recon,[]}},
{env, []},
{licenses, ["Apache-2.0"]},
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
{maintainers, ["EMQX Team <contact@emqx.io>"]},
{links, [{"Homepage", "https://emqx.io/"},
{"Github", "https://github.com/emqx/emqx-recon"}
]}

View File

@ -1,13 +1,13 @@
{application, emqx_retainer,
[{description, "EMQ X Retainer"},
{vsn, "4.4.4"}, % strict semver, bump manually!
[{description, "EMQX Retainer"},
{vsn, "4.4.5"}, % strict semver, bump manually!
{modules, []},
{registered, [emqx_retainer_sup]},
{applications, [kernel,stdlib]},
{mod, {emqx_retainer_app,[]}},
{env, []},
{licenses, ["Apache-2.0"]},
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
{maintainers, ["EMQX Team <contact@emqx.io>"]},
{links, [{"Homepage", "https://emqx.io/"},
{"Github", "https://github.com/emqx/emqx-retainer"}
]}

View File

@ -1,13 +1,13 @@
{application, emqx_rule_engine,
[{description, "EMQ X Rule Engine"},
{vsn, "4.4.15"}, % strict semver, bump manually!
[{description, "EMQX Rule Engine"},
{vsn, "4.4.16"}, % strict semver, bump manually!
{modules, []},
{registered, [emqx_rule_engine_sup, emqx_rule_registry, emqx_rule_engine_jwt_sup]},
{applications, [kernel,stdlib,rulesql,getopt,jose]},
{mod, {emqx_rule_engine_app, []}},
{env, []},
{licenses, ["Apache-2.0"]},
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
{maintainers, ["EMQX Team <contact@emqx.io>"]},
{links, [{"Homepage", "https://emqx.io/"},
{"Github", "https://github.com/emqx/emqx-rule-engine"}
]}

View File

@ -1,14 +1,18 @@
%% -*- mode: erlang -*-
%% Unless you know what you are doing, DO NOT edit manually!!
{VSN,
[{<<"4\\.4\\.1[3-4]">>,
[{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
[{"4.4.15",
[{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}]},
{<<"4\\.4\\.1[3-4]">>,
[{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_monitor,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
]},
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}]},
{"4.4.12",
[{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
[{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_monitor,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
@ -16,7 +20,8 @@
{update,emqx_rule_engine_jwt_sup,supervisor},
{load_module,emqx_rule_engine_jwt,brutal_purge,soft_purge,[]}]},
{"4.4.11",
[{load_module,emqx_rule_engine_jwt_worker,brutal_purge,soft_purge,[]},
[{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine_jwt_worker,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_monitor,brutal_purge,soft_purge,[]},
{update,emqx_rule_engine_jwt_sup,supervisor},
@ -25,10 +30,10 @@
{load_module,emqx_rule_engine_sup,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]},
{apply,{emqx_rule_engine_sup,ensure_api_delegator_started,[]}},
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
]},
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}]},
{"4.4.10",
[{add_module,emqx_rule_engine_jwt},
[{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
{add_module,emqx_rule_engine_jwt},
{add_module,emqx_rule_engine_jwt_worker},
{add_module,emqx_rule_engine_jwt_sup},
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]},
@ -45,7 +50,8 @@
{load_module,emqx_rule_funcs,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}]},
{"4.4.9",
[{add_module,emqx_rule_engine_jwt},
[{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
{add_module,emqx_rule_engine_jwt},
{add_module,emqx_rule_engine_jwt_worker},
{add_module,emqx_rule_engine_jwt_sup},
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]},
@ -232,14 +238,18 @@
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]}]},
{<<".*">>,[]}],
[{<<"4\\.4\\.1[3-4]">>,
[{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
[{"4.4.15",
[{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}]},
{<<"4\\.4\\.1[3-4]">>,
[{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_monitor,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
]},
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}]},
{"4.4.12",
[{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
[{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_monitor,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
@ -247,7 +257,8 @@
{update,emqx_rule_engine_jwt_sup,supervisor},
{load_module,emqx_rule_engine_jwt,brutal_purge,soft_purge,[]}]},
{"4.4.11",
[{load_module,emqx_rule_engine_jwt_worker,brutal_purge,soft_purge,[]},
[{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine_jwt_worker,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_monitor,brutal_purge,soft_purge,[]},
{update,emqx_rule_engine_jwt_sup,supervisor},
@ -258,7 +269,8 @@
{load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}]},
{"4.4.10",
[{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]},
[{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]},
{apply,{emqx_rule_engine_sup,ensure_api_delegator_stopped,[]}},
{load_module,emqx_rule_utils,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_monitor,brutal_purge,soft_purge,[]},
@ -276,7 +288,8 @@
{delete_module,emqx_rule_engine_jwt_worker},
{delete_module,emqx_rule_engine_jwt}]},
{"4.4.9",
[{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]},
[{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]},
{apply,{emqx_rule_engine_sup,ensure_api_delegator_stopped,[]}},
{load_module,emqx_rule_utils,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_monitor,brutal_purge,soft_purge,[]},

View File

@ -89,6 +89,7 @@
try (_EXP_)
catch
throw : Reason ->
_EXP_ON_FAIL_,
throw({_ERROR_CONTEXT_, Reason});
_EXCLASS_:_EXCPTION_:_ST_ ->
_EXP_ON_FAIL_,
@ -492,13 +493,16 @@ delete_resource(ResId) ->
case emqx_rule_registry:remove_resource(ResId) of
ok ->
_ = ?CLUSTER_CALL(clear_resource, [ModD, Destroy, ResId, ResType]),
ok;
emqx_plugin_libs_ssl:maybe_delete_dir("rules", ResId);
{error, _} = R -> R
end
catch
throw:Reason -> {error, Reason}
end;
not_found ->
%% always try to remove the dir as the resource might be created but have
%% not been initialized yet.
emqx_plugin_libs_ssl:maybe_delete_dir("rules", ResId),
{error, not_found}
end.
@ -711,7 +715,9 @@ action_instance_id(ActionName) ->
iolist_to_binary([atom_to_list(ActionName), "_", integer_to_list(erlang:system_time())]).
init_resource(Module, OnCreate, ResId, Config) ->
Params = ?RAISE(Module:OnCreate(ResId, Config), {Module, OnCreate}),
Params = ?RAISE(Module:OnCreate(ResId, Config),
emqx_plugin_libs_ssl:maybe_delete_dir("rules", ResId),
{Module, OnCreate}),
ResParams = #resource_params{id = ResId,
params = Params,
status = #{is_alive => true}},

View File

@ -265,6 +265,8 @@ take_action(#action_instance{id = Id, name = ActName, fallbacks = Fallbacks} = A
emqx_rule_metrics:inc_actions_taken(Id),
apply_action_func(Selected, Envs, Apply, ActName)
of
badact_quiet ->
handle_action_failure(OnFailed, Id, Fallbacks, Selected, Envs, badact_quiet);
{badact, Reason} ->
handle_action_failure(OnFailed, Id, Fallbacks, Selected, Envs, Reason);
Result -> Result
@ -320,11 +322,13 @@ wait_action_on(Id, RetryN) ->
end.
handle_action_failure(continue, _Id, Fallbacks, Selected, Envs = #{metadata := Metadata}, Reason) ->
?LOG_RULE_ACTION(error, Metadata, "Continue next action, reason: ~0p", [Reason]),
Reason =/= badact_quiet andalso
?LOG_RULE_ACTION(error, Metadata, "Continue next action, reason: ~0p", [Reason]),
_ = take_actions(Fallbacks, Selected, Envs, continue),
failed;
handle_action_failure(stop, Id, Fallbacks, Selected, Envs = #{metadata := Metadata}, Reason) ->
?LOG_RULE_ACTION(error, Metadata, "Skip all actions, reason: ~0p", [Reason]),
Reason =/= badact_quiet andalso
?LOG_RULE_ACTION(error, Metadata, "Skip all actions, reason: ~0p", [Reason]),
_ = take_actions(Fallbacks, Selected, Envs, continue),
error({take_action_failed, {Id, Reason}}).

View File

@ -40,6 +40,8 @@ groups() ->
].
init_per_suite(Config) ->
%% ensure alarm_handler started
{ok, _} = application:ensure_all_started(sasl),
ok = ekka_mnesia:start(),
ok = emqx_rule_registry:mnesia(boot),
Config.

View File

@ -1,13 +1,13 @@
{application, emqx_sasl,
[{description, "EMQ X SASL"},
{vsn, "4.3.0"}, % strict semver, bump manually!
[{description, "EMQX SASL"},
{vsn, "4.3.1"}, % strict semver, bump manually!
{modules, []},
{registered, [emqx_sasl_sup]},
{applications, [kernel,stdlib,pbkdf2]},
{mod, {emqx_sasl_app,[]}},
{env, []},
{licenses, ["Apache-2.0"]},
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
{maintainers, ["EMQX Team <contact@emqx.io>"]},
{links, [{"Homepage", "https://emqx.io/"},
{"Github", "https://github.com/emqx/emqx-sasl"}
]}

View File

@ -1,13 +1,13 @@
{application, emqx_sn,
[{description, "EMQ X MQTT-SN Plugin"},
{vsn, "4.3.8"}, % strict semver, bump manually!
[{description, "EMQX MQTT-SN Plugin"},
{vsn, "4.3.9"}, % strict semver, bump manually!
{modules, []},
{registered, []},
{applications, [kernel,stdlib,esockd]},
{mod, {emqx_sn_app,[]}},
{env, []},
{licenses, ["Apache-2.0"]},
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
{maintainers, ["EMQX Team <contact@emqx.io>"]},
{links, [{"Homepage", "https://emqx.io/"},
{"Github", "https://github.com/emqx/emqx-sn"}
]}

View File

@ -29,7 +29,8 @@
{load_module,emqx_sn_app,brutal_purge,soft_purge,[]},
{update,emqx_sn_gateway,{advanced,["4.3.2"]}}
]},
{<<"4\\.3\\.[0-1]">>, [{restart_application,emqx_sn}]}
{<<"4\\.3\\.[0-1]">>, [{restart_application,emqx_sn}]},
{<<".*">>,[]}
],
[
{"4.3.7",[
@ -60,5 +61,6 @@
{load_module,emqx_sn_app,brutal_purge,soft_purge,[]},
{update,emqx_sn_gateway,{advanced,["4.3.2"]}}
]},
{<<"4\\.3\\.[0-1]">>, [{restart_application,emqx_sn}]}
{<<"4\\.3\\.[0-1]">>, [{restart_application,emqx_sn}]},
{<<".*">>,[]}
]}.

View File

@ -1,13 +1,13 @@
{application, emqx_stomp,
[{description, "EMQ X Stomp Protocol Plugin"},
{vsn, "4.3.7"}, % strict semver, bump manually!
[{description, "EMQX Stomp Protocol Plugin"},
{vsn, "4.3.8"}, % strict semver, bump manually!
{modules, []},
{registered, [emqx_stomp_sup]},
{applications, [kernel,stdlib]},
{mod, {emqx_stomp,[]}},
{env, []},
{licenses, ["Apache-2.0"]},
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
{maintainers, ["EMQX Team <contact@emqx.io>"]},
{links, [{"Homepage", "https://emqx.io/"},
{"Github", "https://github.com/emqx/emqx-stomp"}
]}

View File

@ -1,13 +1,13 @@
{application, emqx_web_hook,
[{description, "EMQ X WebHook Plugin"},
{vsn, "4.3.16"}, % strict semver, bump manually!
[{description, "EMQX WebHook Plugin"},
{vsn, "4.3.18"}, % strict semver, bump manually!
{modules, []},
{registered, [emqx_web_hook_sup]},
{applications, [kernel,stdlib,ehttpc]},
{mod, {emqx_web_hook_app,[]}},
{env, []},
{licenses, ["Apache-2.0"]},
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
{maintainers, ["EMQX Team <contact@emqx.io>"]},
{links, [{"Homepage", "https://emqx.io/"},
{"Github", "https://github.com/emqx/emqx-web-hook"}
]}

View File

@ -1,7 +1,9 @@
%% -*- mode: erlang -*-
%% Unless you know what you are doing, DO NOT edit manually!!
{VSN,
[{"4.3.15",
[{"4.3.17",[{load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
{"4.3.16",[{load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
{"4.3.15",
[{load_module,emqx_web_hook_app,brutal_purge,soft_purge,[]},
{load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
{"4.3.14",
@ -32,7 +34,9 @@
[{load_module,emqx_web_hook_app,brutal_purge,soft_purge,[]},
{load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
{<<".*">>,[]}],
[{"4.3.15",
[{"4.3.17",[{load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
{"4.3.16",[{load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
{"4.3.15",
[{load_module,emqx_web_hook_app,brutal_purge,soft_purge,[]},
{load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
{"4.3.14",

2
build
View File

@ -304,7 +304,7 @@ make_docker() {
## This function accepts any base docker image,
## a emqx zip-image, and a image tag (for the image to be built),
## to build a docker image which runs EMQ X
## to build a docker image which runs EMQX
##
## Export below variables to quickly build an image
##

View File

@ -52,5 +52,4 @@
- Fix crash when updating a client's keepalive via the HTTP API if it connects with keepalive disabled [#9933](https://github.com/emqx/emqx/pull/9933).
- Fix that `Erlang distribution` can't use TLS [#9981](https://github.com/emqx/emqx/pull/9981).
About `Erlang distribution`, See [here](https://www.emqx.io/docs/en/v4.4/advanced/cluster.html#distributed-erlang) for details.
- Delete the files directory when `resources` were deleted to avoid files leaking [#10039](https://github.com/emqx/emqx/pull/10039).

View File

@ -2,8 +2,6 @@
## 增强
## 修复
- MongoDB 库已升级至支持 MongoDB 5.1 及以上版本[#9707](https://github.com/emqx/emqx/pull/9707)。
- 现在 Dashboard 支持 HAProxy 的 Proxy Protocol 了 [9803](https://github.com/emqx/emqx/pull/9803)。
@ -20,7 +18,7 @@
- 为认证和授权添加了更多调试日志 [#9943](https://github.com/emqx/emqx/pull/9943)。
- 将统计数据 `live_connections.count``live_connections.max` 公开给 Prometheus [#9929](https://github.com/emqx/emqx/pull/9929).
- 将统计数据 `live_connections.count``live_connections.max` 公开给 Prometheus [#9929](https://github.com/emqx/emqx/pull/9929)
## 修复
@ -53,5 +51,4 @@
- 修复当客户端连接禁用 keepalive 时, 通过 HTTP API 更新其 keepalive 会崩溃的问题 [#9933](https://github.com/emqx/emqx/pull/9933)。
- 修复 `Erlang distribution` 无法使用 TLS 的问题 [#9981](https://github.com/emqx/emqx/pull/9981)。
关于 `Erlang distribution`, 详见 [这里](https://www.emqx.io/docs/zh/v4.4/advanced/cluster.html)。
- 在 `资源` 删除时清理其文件目录以防止文件泄露 [#10039](https://github.com/emqx/emqx/pull/10039)。

View File

@ -1,6 +1,17 @@
# v4.4.16
## Enhancements
- Change "EMQ X" to "EMQX" from the outputs of CLIs and names of plugins [#10099](https://github.com/emqx/emqx/pull/10099).
## Bug fixes
- Fixed MQTT bridge TLS connection could not verify wildcard certificate from peer[#10094](https://github.com/emqx/emqx/pull/10094).
- Avoid changing the payload of MQTT messages when printing debug logs [#10091](https://github.com/emqx/emqx/pull/10091).
Before this fix, if EMQX receives a message with Payload "e\ne\nc\nc\n2\n\n\n", the log message will be as follows:
```
2023-03-08T13:28:04.320622+08:00 [debug] mqttx_e34bd582@127.0.0.1:54020 [MQTT] RECV PUBLISH(Q1, R0, D0, Topic=t/1, PacketId=39467, Payload=e, e, c, c, 2, , , )
```
This is the corresponding log message now:
```
2023-03-08T14:26:50.935575+08:00 [debug] mqttx_e34bd582@127.0.0.1:54020 [MQTT] RECV PUBLISH(Q1, R0, D0, Topic=t/1, PacketId=39467, Payload=<<"e\ne\nc\nc\n2\n\n\n">>)
```

View File

@ -1,5 +1,17 @@
# v4.4.16
## 增强
- 从命令行的输出里和插件的名字中,把 "EMQ X" 改成 "EMQX" [#10099](https://github.com/emqx/emqx/pull/10099)。
## 修复
- 修正了 MQTT 桥接 TLS 连接无法验证对端的带通配符的证书[#10094](https://github.com/emqx/emqx/pull/10094)。
- 避免打印 debug 日志的时候改动 MQTT 消息的 Payload 的内容 [#10091](https://github.com/emqx/emqx/pull/10091)。
在这个修复之前,如果 EMQX 收到一个 Payload 为 "e\ne\nc\nc\n2\n\n\n" 的消息,日志打印会变成这样:
```
2023-03-08T13:28:04.320622+08:00 [debug] mqttx_e34bd582@127.0.0.1:54020 [MQTT] RECV PUBLISH(Q1, R0, D0, Topic=t/1, PacketId=39467, Payload=e, e, c, c, 2, , , )
```
这是此修复之后的样子:
```
2023-03-08T14:26:50.935575+08:00 [debug] mqttx_e34bd582@127.0.0.1:54020 [MQTT] RECV PUBLISH(Q1, R0, D0, Topic=t/1, PacketId=39467, Payload=<<"e\ne\nc\nc\n2\n\n\n">>)
```

10
changes/v4.4.17-en.md Normal file
View File

@ -0,0 +1,10 @@
# v4.4.17
## Enhancements
## Bug fixes
- Fix that `Erlang distribution` can't use TLS [#9981](https://github.com/emqx/emqx/pull/9981).
About `Erlang distribution`, See [here](https://www.emqx.io/docs/en/v4.4/advanced/cluster.html#distributed-erlang) for details.
- Fixed MQTT bridge TLS connection could not verify wildcard certificate from peer[#10094](https://github.com/emqx/emqx/pull/10094).

10
changes/v4.4.17-zh.md Normal file
View File

@ -0,0 +1,10 @@
# v4.4.17
## 增强
## 修复
- 修复 `Erlang distribution` 无法使用 TLS 的问题 [#9981](https://github.com/emqx/emqx/pull/9981)。
关于 `Erlang distribution`, 详见 [这里](https://www.emqx.io/docs/zh/v4.4/advanced/cluster.html)。
- 修正了 MQTT 桥接 TLS 连接无法验证对端的带通配符的证书[#10094](https://github.com/emqx/emqx/pull/10094)。

View File

@ -63,8 +63,20 @@
<<"4.4.13">>,<<"4.4.2">>,<<"4.4.3">>,<<"4.4.4">>,<<"4.4.5">>,
<<"4.4.6">>,<<"4.4.7">>,<<"4.4.8">>,<<"4.4.9">>],
otp => <<"24.3.4.2-1">>}}.
{<<"4.4.15">>,
#{from_versions =>
[<<"4.4.0">>,<<"4.4.1">>,<<"4.4.10">>,<<"4.4.11">>,<<"4.4.12">>,
<<"4.4.13">>,<<"4.4.14">>,<<"4.4.2">>,<<"4.4.3">>,<<"4.4.4">>,<<"4.4.5">>,
<<"4.4.6">>,<<"4.4.7">>,<<"4.4.8">>,<<"4.4.9">>],
otp => <<"24.3.4.2-1">>}}.
{<<"4.4.16">>,
#{from_versions =>
[<<"4.4.0">>,<<"4.4.1">>,<<"4.4.10">>,<<"4.4.11">>,<<"4.4.12">>,
<<"4.4.13">>,<<"4.4.14">>,<<"4.4.15">>,<<"4.4.2">>,<<"4.4.3">>,<<"4.4.4">>,<<"4.4.5">>,
<<"4.4.6">>,<<"4.4.7">>,<<"4.4.8">>,<<"4.4.9">>],
otp => <<"24.3.4.2-1">>}}.
{<<"4.5.0">>,
#{from_versions =>
[<<"4.4.10">>,<<"4.4.11">>,<<"4.4.13">>,<<"4.4.14">>,<<"4.4.8">>,
[<<"4.4.10">>,<<"4.4.11">>,<<"4.4.13">>,<<"4.4.14">>,<<"4.4.15">>,<<"4.4.16">>,<<"4.4.8">>,
<<"4.4.9">>],
otp => <<"24.3.4.2-1">>}}.

View File

@ -13,8 +13,8 @@ type: application
# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
version: 4.4.14
version: 4.4.16
# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application.
appVersion: 4.4.14
appVersion: 4.4.16

View File

@ -243,7 +243,7 @@ Let's create a static node list cluster from docker-compose.
+ Start the docker-compose cluster
```bash
docker-compose -p my_emqx up -d
docker compose -p my_emqx up -d
```
+ View cluster

View File

@ -29,7 +29,7 @@
-ifndef(EMQX_ENTERPRISE).
-define(EMQX_RELEASE, {opensource, "4.4.14"}).
-define(EMQX_RELEASE, {opensource, "4.4.16"}).
-else.

View File

@ -1,13 +1,13 @@
{application, emqx_dashboard,
[{description, "EMQX Web Dashboard"},
{vsn, "4.4.14"}, % strict semver, bump manually!
{vsn, "4.4.15"}, % strict semver, bump manually!
{modules, []},
{registered, [emqx_dashboard_sup]},
{applications, [kernel,stdlib,mnesia,minirest]},
{mod, {emqx_dashboard_app,[]}},
{env, []},
{licenses, ["Apache-2.0"]},
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
{maintainers, ["EMQX Team <contact@emqx.io>"]},
{links, [{"Homepage", "https://emqx.io/"},
{"Github", "https://github.com/emqx/emqx-dashboard"}
]}

View File

@ -155,11 +155,11 @@ rewrite(Topic, MP, Dest, Binds) ->
NewTopic.
fill_client_binds(#{clientid := ClientId, username := Username}) ->
filter_client_binds([{"%c", ClientId}, {"%u", Username}]);
filter_client_binds([{"%c", bin(ClientId)}, {"%u", bin(Username)}]);
fill_client_binds(#message{from = ClientId, headers = Headers}) ->
Username = maps:get(username, Headers, undefined),
filter_client_binds([{"%c", ClientId}, {"%u", Username}]).
filter_client_binds([{"%c", bin(ClientId)}, {"%u", bin(Username)}]).
filter_client_binds(Binds) ->
lists:filter(fun({_, undefined}) -> false;
@ -184,3 +184,7 @@ validate_topic(Type, Topic) ->
error:Reason ->
{error, Reason}
end.
bin(S) when is_binary(S) -> S;
bin(S) when is_list(S) -> list_to_binary(S);
bin(S) when is_atom(S) -> atom_to_binary(S, utf8).

View File

@ -1,6 +1,6 @@
{application, emqx_modules,
[{description, "EMQ X Module Management"},
{vsn, "4.4.9"},
[{description, "EMQX Module Management"},
{vsn, "4.4.10"},
{modules, []},
{applications, [kernel,stdlib]},
{mod, {emqx_modules_app, []}},

View File

@ -1,7 +1,8 @@
%% -*- mode: erlang -*-
%% Unless you know what you are doing, DO NOT edit manually!!
{VSN,
[{<<"4\\.4\\.[6-8]">>,
[{"4.4.9",[{load_module,emqx_mod_rewrite,brutal_purge,soft_purge,[]}]},
{<<"4\\.4\\.[6-8]">>,
[{load_module,emqx_modules,brutal_purge,soft_purge,[]},
{load_module,emqx_mod_acl_internal,brutal_purge,soft_purge,[]},
{load_module,emqx_mod_delayed,brutal_purge,soft_purge,[]},
@ -38,7 +39,8 @@
{load_module,emqx_mod_sup,brutal_purge,soft_purge,[]}
]},
{<<".*">>,[]}],
[{<<"4\\.4\\.[6-8]">>,
[{"4.4.9",[{load_module,emqx_mod_rewrite,brutal_purge,soft_purge,[]}]},
{<<"4\\.4\\.[6-8]">>,
[{load_module,emqx_modules,brutal_purge,soft_purge,[]},
{load_module,emqx_mod_acl_internal,brutal_purge,soft_purge,[]},
{load_module,emqx_mod_delayed,brutal_purge,soft_purge,[]},

View File

@ -58,13 +58,13 @@ set_special_configs(_App) ->
t_load_case(_) ->
UnHooks = emqx_hooks:lookup('message.publish'),
?assertEqual([], UnHooks),
ok = emqx_mod_delayed:load([]),
_ = emqx_mod_delayed:load([]),
Hooks = emqx_hooks:lookup('message.publish'),
?assertEqual(1, length(Hooks)),
ok.
t_delayed_message(_) ->
ok = emqx_mod_delayed:load([]),
_ = emqx_mod_delayed:load([]),
DelayedMsg = emqx_message:make(?MODULE, 1, <<"$delayed/1/publish">>, <<"delayed_m">>),
?assertEqual({stop, DelayedMsg#message{topic = <<"publish">>, headers = #{allow_publish => false}}}, on_message_publish(DelayedMsg)),
@ -81,7 +81,7 @@ t_delayed_message(_) ->
ok = emqx_mod_delayed:unload([]).
t_banned_delayed(_) ->
ok = emqx_mod_delayed:load([]),
_ = emqx_mod_delayed:load([]),
ClientId1 = <<"bc1">>,
ClientId2 = <<"bc2">>,
@ -119,6 +119,7 @@ t_banned_delayed(_) ->
snabbkaffe:stop(),
emqx_banned:delete(Who),
timer:sleep(500),
EmptyKey = mnesia:dirty_all_keys(emqx_mod_delayed),
?assertEqual([], EmptyKey),
ok = emqx_mod_delayed:unload([]).

View File

@ -1,13 +1,13 @@
{application, emqx_telemetry,
[{description, "EMQ X Telemetry"},
{vsn, "4.3.4"}, % strict semver, bump manually!
[{description, "EMQX Telemetry"},
{vsn, "4.3.6"}, % strict semver, bump manually!
{modules, []},
{registered, [emqx_telemetry_sup]},
{applications, [kernel,stdlib]},
{mod, {emqx_telemetry_app,[]}},
{env, []},
{licenses, ["Apache-2.0"]},
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
{maintainers, ["EMQX Team <contact@emqx.io>"]},
{links, [{"Homepage", "https://emqx.io/"},
{"Github", "https://github.com/emqx/emqx-telemetry"}
]}

View File

@ -1,11 +1,9 @@
%% -*- mode: erlang -*-
%% Unless you know what you are doing, DO NOT edit manually!!
{VSN,
[{"4.3.3",[{load_module,emqx_telemetry,brutal_purge,soft_purge,[]}]},
{<<"4\\.3\\.[0-2]">>,
[{<<"4\\.3\\.[0-4]">>,
[{load_module,emqx_telemetry,brutal_purge,soft_purge,[]}]},
{<<".*">>,[]}],
[{"4.3.3",[{load_module,emqx_telemetry,brutal_purge,soft_purge,[]}]},
{<<"4\\.3\\.[0-2]">>,
[{<<"4\\.3\\.[0-4]">>,
[{load_module,emqx_telemetry,brutal_purge,soft_purge,[]}]},
{<<".*">>,[]}]}.

View File

@ -75,7 +75,7 @@
enabled :: undefined | boolean(),
url :: string(),
url :: undefined | string(),
report_interval :: undefined | non_neg_integer(),
@ -90,6 +90,8 @@
-define(TELEMETRY, emqx_telemetry).
-define(HTTP_TIMEOUT, 10).
%%--------------------------------------------------------------------
%% Mnesia bootstrap
%%--------------------------------------------------------------------
@ -115,19 +117,19 @@ stop() ->
gen_server:stop(?MODULE).
enable() ->
gen_server:call(?MODULE, enable).
gen_server:call(?MODULE, enable, infinity).
disable() ->
gen_server:call(?MODULE, disable).
gen_server:call(?MODULE, disable, infinity).
is_enabled() ->
gen_server:call(?MODULE, is_enabled).
gen_server:call(?MODULE, is_enabled, infinity).
get_uuid() ->
gen_server:call(?MODULE, get_uuid).
gen_server:call(?MODULE, get_uuid, infinity).
get_telemetry() ->
gen_server:call(?MODULE, get_telemetry).
gen_server:call(?MODULE, get_telemetry, infinity).
%%--------------------------------------------------------------------
%% gen_server callbacks
@ -353,15 +355,18 @@ report_telemetry(State = #state{url = URL}) ->
Data = get_telemetry(State),
case emqx_json:safe_encode(Data) of
{ok, Bin} ->
httpc_request(post, URL, [], Bin),
_ = httpc_request(post, URL, [], Bin),
?tp(debug, telemetry_data_reported, #{});
{error, Reason} ->
%% debug? why?
?tp(debug, telemetry_data_encode_error, #{data => Data, reason => Reason})
end.
%% we might set url = undefined in testcase
httpc_request(_, undefined, _, _) ->
ignore;
httpc_request(Method, URL, Headers, Body) ->
HTTPOptions = [{timeout, timer:seconds(10)}, {ssl, [{verify, verify_none}]}],
HTTPOptions = [{timeout, timer:seconds(?HTTP_TIMEOUT)}, {ssl, [{verify, verify_none}]}],
Options = [],
httpc:request(Method, {URL, Headers, "application/json", Body}, HTTPOptions, Options).

View File

@ -42,7 +42,7 @@ t_uuid(_) ->
{ok, UUID2} = emqx_telemetry:get_uuid(),
emqx_telemetry:stop(),
emqx_telemetry:start_link([{enabled, true},
{url, "https://telemetry.emqx.io/api/telemetry"},
{url, undefined},
{report_interval, 7 * 24 * 60 * 60}]),
{ok, UUID3} = emqx_telemetry:get_uuid(),
?assertEqual(UUID2, UUID3).
@ -80,7 +80,7 @@ t_send_after_enable(_) ->
ok = snabbkaffe:start_trace(),
try
ok = emqx_telemetry:enable(),
?assertMatch({ok, _}, ?block_until(#{?snk_kind := telemetry_data_reported}, 2000, 100))
?assertMatch({ok, _}, ?block_until(#{?snk_kind := telemetry_data_reported}, 15000, 100))
after
ok = snabbkaffe:stop()
end.

View File

@ -186,9 +186,9 @@ distro() ->
_ -> false
end.
emqx_description(cloud, true) -> "EMQ X Enterprise";
emqx_description(cloud, false) -> "EMQ X Broker";
emqx_description(edge, _) -> "EMQ X Edge".
emqx_description(cloud, true) -> "EMQX Enterprise";
emqx_description(cloud, false) -> "EMQX Broker";
emqx_description(edge, _) -> "EMQX Edge".
overlay_vars(_RelType, PkgType, true) ->
ee_overlay_vars(PkgType);

View File

@ -15,10 +15,10 @@ set -euo pipefail
help() {
echo
echo "-h|--help: To display this usage information"
echo "--profile <PROFILE>: EMQ X profile to build, e.g. emqx, emqx-edge"
echo "--profile <PROFILE>: EMQX profile to build, e.g. emqx, emqx-edge"
echo "--pkgtype zip|pkg: Specify which package to build, zip for .zip and pkg for .rpm or .deb"
echo "--arch amd64|arm64: Target arch to build the EMQ X package for"
echo "--src_dir <SRC_DIR>: EMQ X source ode in this dir, default to PWD"
echo "--arch amd64|arm64: Target arch to build the EMQX package for"
echo "--src_dir <SRC_DIR>: EMQX source ode in this dir, default to PWD"
echo "--builder <BUILDER>: Builder image to pull"
echo " E.g. ghcr.io/emqx/emqx-builder/4.4-20:24.3.4.2-1-debian11"
echo "--ssh: Pass ssh agent to the builder."

View File

@ -9,12 +9,12 @@ PKG_VSN="${PKG_VSN:-$(./pkg-vsn.sh)}"
case "${PKG_VSN}" in
4.3*)
EMQX_CE_DASHBOARD_VERSION='v4.3.12'
EMQX_EE_DASHBOARD_VERSION='v4.3.27'
EMQX_EE_DASHBOARD_VERSION='v4.3.30'
;;
4.4*)
# keep the above 4.3 untouched, otherwise conflicts!
EMQX_CE_DASHBOARD_VERSION='v4.4.8'
EMQX_EE_DASHBOARD_VERSION='v4.4.18'
EMQX_CE_DASHBOARD_VERSION='v4.4.10'
EMQX_EE_DASHBOARD_VERSION='v4.4.22'
;;
*)
echo "Unsupported version $PKG_VSN" >&2

View File

@ -1,12 +1,12 @@
{application, emqx,
[{id, "emqx"},
{description, "EMQ X"},
{description, "EMQX"},
%% Note: this version is not the same as the release version! This
%% is simply the emqx `application' version, which is separate from
%% the emqx `release' version, which in turn is comprised of several
%% apps, one of which is this. See `emqx_release.hrl' for more
%% info.
{vsn, "4.4.15"}, % strict semver, bump manually!
{vsn, "4.4.16"}, % strict semver, bump manually!
{modules, []},
{registered, []},
{applications, [ kernel
@ -21,7 +21,7 @@
{mod, {emqx_app,[]}},
{env, []},
{licenses, ["Apache-2.0"]},
{maintainers, ["EMQ X Team <contact@emqx.io>"]},
{maintainers, ["EMQX Team <contact@emqx.io>"]},
{links, [{"Homepage", "https://emqx.io/"},
{"Github", "https://github.com/emqx/emqx"}
]}

View File

@ -1,7 +1,12 @@
%% -*- mode: erlang -*-
%% Unless you know what you are doing, DO NOT edit manually!!
{VSN,
[{"4.4.14",
[{"4.4.15",
[{load_module,emqx,brutal_purge,soft_purge,[]},
{load_module,emqx_packet,brutal_purge,soft_purge,[]},
{load_module,emqx_relup,brutal_purge,soft_purge,[]},
{load_module,emqx_app,brutal_purge,soft_purge,[]}]},
{"4.4.14",
[{load_module,emqx_vm,brutal_purge,soft_purge,[]},
{load_module,emqx_keepalive,brutal_purge,soft_purge,[]},
{load_module,emqx_broker,brutal_purge,soft_purge,[]},
@ -494,7 +499,12 @@
{apply,{application,set_env,
[gen_rpc,insecure_auth_fallback_allowed,true]}}]},
{<<".*">>,[]}],
[{"4.4.14",
[{"4.4.15",
[{load_module,emqx,brutal_purge,soft_purge,[]},
{load_module,emqx_packet,brutal_purge,soft_purge,[]},
{load_module,emqx_relup,brutal_purge,soft_purge,[]},
{load_module,emqx_app,brutal_purge,soft_purge,[]}]},
{"4.4.14",
[{load_module,emqx_vm,brutal_purge,soft_purge,[]},
{load_module,emqx_keepalive,brutal_purge,soft_purge,[]},
{load_module,emqx_broker,brutal_purge,soft_purge,[]},

View File

@ -20,7 +20,7 @@
-include("logger.hrl").
-include("types.hrl").
-logger_header("[EMQ X]").
-logger_header("[EMQX]").
%% Start/Stop the application
-export([ start/0

View File

@ -156,7 +156,10 @@ get_description() ->
case os:getenv("EMQX_DESCRIPTION") of
false -> Descr0;
"" -> Descr0;
Str -> string:strip(Str, both, $\n)
Str ->
%% We replace the "EMQ X" to "EMQX" incase the description has been
%% loaded to the OS Envs and cannot be changed without reboot.
replace_emq_x_to_emqx(string:strip(Str, both, $\n))
end.
get_release() ->
@ -183,3 +186,6 @@ start_autocluster() ->
ekka:callback(reboot, fun emqx:reboot/0),
_ = ekka:autocluster(?APP), %% returns 'ok' or a pid or 'any()' as in spec
ok.
replace_emq_x_to_emqx(Str) ->
re:replace(Str, "\\bEMQ X\\b", "EMQX", [{return,list}]).

View File

@ -438,7 +438,7 @@ format_variable(undefined, _) ->
format_variable(Variable, undefined) ->
format_variable(Variable);
format_variable(Variable, Payload) ->
[format_variable(Variable), ", Payload=", Payload].
[format_variable(Variable), io_lib:format(", Payload=~0p", [Payload])].
format_variable(#mqtt_packet_connect{
proto_ver = ProtoVer,

View File

@ -33,6 +33,7 @@ post_release_upgrade(FromRelVsn, _) ->
?INFO("emqx has been upgraded from ~s to ~s!", [FromRelVsn, CurrRelVsn]),
maybe_refresh_jwt_module(FromRelVsn),
_ = maybe_restart_oracle_resources(FromRelVsn),
_ = maybe_start_schema_registry(FromRelVsn),
reload_components().
%% What to do after downgraded to an old release vsn.
@ -98,17 +99,9 @@ maybe_refresh_jwt_module(_) ->
-ifdef(EMQX_ENTERPRISE).
maybe_restart_oracle_resources("4.4." ++ PatchVsn0) ->
try
case list_to_integer(PatchVsn0) of
PatchVsn when PatchVsn =< 14 ->
emqx_rule_engine:start_all_resources_of_type(backend_oracle);
_ -> ok
end
catch
Err:Reason:ST ->
?INFO("maybe_restart_oracle_resources failed: ~p", [{Err, Reason, ST}]),
ok
end;
do_when_vsn_lte(PatchVsn0, 14, ?FUNCTION_NAME, fun() ->
emqx_rule_engine:start_all_resources_of_type(backend_oracle)
end);
maybe_restart_oracle_resources(_) ->
ok.
@ -118,3 +111,32 @@ maybe_restart_oracle_resources(_) ->
ok.
-endif.
-ifdef(EMQX_ENTERPRISE).
maybe_start_schema_registry("4.4." ++ PatchVsn0) ->
do_when_vsn_lte(PatchVsn0, 15, ?FUNCTION_NAME, fun() ->
emqx_plugins:load(emqx_schema_registry)
end);
maybe_start_schema_registry(_) ->
ok.
-else.
maybe_start_schema_registry(_) ->
ok.
-endif.
-ifdef(EMQX_ENTERPRISE).
do_when_vsn_lte(SrcVsnStr, TargetVsn, ActionName, Action) ->
try
case list_to_integer(SrcVsnStr) of
Vsn when Vsn =< TargetVsn ->
?INFO("doing ~p", [ActionName]),
_ = Action(),
ok;
_ -> ok
end
catch
Err:Reason:ST ->
?INFO("~p failed: ~p", [ActionName, {Err, Reason, ST}]),
ok
end.
-endif.

View File

@ -380,7 +380,7 @@ read_otp_version() ->
Filename = filename:join([ReleasesDir, emqx_app:get_release(), "BUILT_ON"]),
case file:read_file(Filename) of
{ok, BuiltOn} ->
%% running on EQMX release
%% running on EMQX release
BuiltOn;
{error, enoent} ->
OtpMajor = erlang:system_info(otp_release),

View File

@ -1,5 +1,5 @@
{application, emqx_mini_plugin,
[{description, "An EMQ X plugin for testcase"},
[{description, "An EMQX plugin for testcase"},
{vsn, "0.1"},
{modules, []},
{registered, []},