Commit Graph

2210 Commits

Author SHA1 Message Date
Zaiming Shi 171933301a fix(dashboard): display full Erlang/OTP version 2021-04-30 12:26:59 +02:00
William Yang e122ac5716 perf(broker): speedup trans when broker has a big mqueue 2021-04-29 08:52:42 +02:00
William Yang e7fc75fdf2 perf(broker): Optimization for handling bursty traffic
intro. new lock type: 'spawn' of broker.perf.route_lock_type

mnesia get lock calls are not optimized for selective receive.

hence taking locks would be very expensive while there are tones of
messages in the brokers message queue.

This optimization run the transaction in a separate process to utilize
the selective receive optimization of the compiler.
2021-04-28 15:39:46 +02:00
Zaiming Shi 29475eb610 feat(emqx_http_lib): try to parse host ip 2021-04-28 10:43:36 +02:00
Zaiming Shi b688bcfe74 feat(eqmx_misc): add an api to ensure ipv6_probe socket option 2021-04-28 10:43:36 +02:00
Zaiming Shi e54433d342 feat(emqx_vm): add api to inspect which otp version running on 2021-04-28 10:43:36 +02:00
Zaiming Shi d926800204 chore: add emqx_broker_bench.erl 2021-04-26 14:40:39 +02:00
Zaiming Shi cdacaf8694 perf(emqx_trie): use ordered_set 2021-04-26 14:18:40 +02:00
Zaiming Shi b1df759adc refactor(emqx_trie): rename internal function to match_# 2021-04-26 14:18:40 +02:00
Zaiming Shi 8d55d425dc chore(emqx_trie): add test case to cover multiple levels of + wildcards 2021-04-26 14:18:40 +02:00
Zaiming Shi eb946eb80c fix(emqx_trie): do not try to match wildcard topics 2021-04-26 14:18:40 +02:00
Zaiming Shi 22e72cdd82 refactor(emqx_trie): rename record from eqmx_topic to emqx_trie 2021-04-26 14:18:40 +02:00
Zaiming Shi bc6a87946c refactor(emqx_trie): store only prefixes
This commit refactors emqx_trie implementation
with mainly two changes

1. Deleted the edge table.

   In the old implementation, trie consist of nodes and edges.
   e.g. for topic 'a/b/+/d', node 'a' with edge 'b'
   points to node 'a/b' and so on.

   However, edges can be computed at runtime,
   so there is no need to store them in a table.
2021-04-26 14:18:40 +02:00
Zaiming Shi 7128bc9e6e chore(emqx_app): do not print 'starting' log when test 2021-04-26 14:18:40 +02:00
Zaiming Shi 5569c86319 docs(emqx_trie): no doc for internal functions 2021-04-26 14:18:40 +02:00
Zaiming Shi 6be28cecab chore(logging): default to multi-line logging 2021-04-26 11:11:27 +02:00
William Yang 907502fed0
Merge pull request #4645 from qzhuyan/dev/william/fix-issue-2985-c3
fix: issue 2985 attempt 3
2021-04-25 12:39:52 +02:00
Zaiming Shi 708420eb97 fix(emqx_connection): log true stacktrace 2021-04-25 12:01:05 +02:00
Zaiming Shi 2e6ad828a0 chore: remove copyright and license Erlang macros 2021-04-23 20:43:00 +02:00
Zaiming Shi 6354e75626 chore: update copyrights 2021-04-23 20:43:00 +02:00
William Yang 9b13bab2c9 perf: new perf toggle broker.perf.route_lock_type 2021-04-23 13:51:42 +02:00
Zaiming Shi 3547dc4c93 fix(log): client id as string for log metadata
so it does not print <<"...">> to the logs
2021-04-23 06:54:10 +02:00
Zaiming Shi fd69969014 refactor(logging): Log to single line 2021-04-23 06:54:10 +02:00
William Yang 0166bb5a87 fix: broker call should not timeout before client timeout
So change broker call timeout to infinity.
2021-04-21 18:59:46 +02:00
William Yang 17870fdb39 perf(router): add route runs in async dirty context 2021-04-21 18:59:46 +02:00
William Yang 3972a6b435 perf(trie): use global lock
Use global lock to reduce remote lock overhead.

So that emqx route trans can run in dirty *sync* context.

At least 10X subscribe/unsubscribe improvments.
2021-04-21 18:59:24 +02:00
Zaiming Shi 97f2e5d544 test(auth_http): test unset acl_req app env 2021-04-19 08:39:26 +02:00
zhouzb 49502b4e7c feat(uri): add missed function 2021-04-16 20:19:45 +08:00
zhouzb bd1051d1e6 feat(uri): support decoding uri in string 2021-04-16 20:19:45 +08:00
Shawn 4885171e4f fix(emqx): add timeout for open/kick a session 2021-04-15 23:09:58 +08:00
zhanghongtong 446a69c814 fix(ws connection): fix peer_cert_as_username error when ws connect 2021-04-15 09:06:27 +08:00
z8674558 a48e7df4f5 feat(emqx_ws_connection): check http header to know real IP/port 2021-04-14 06:45:39 +00:00
JianBo He 49b7d870e0 fix(modules): load application first for ekka_mnesia scanner 2021-04-13 09:57:33 +08:00
JianBo He 16c999ed9b
Start emqx-modules application by default (#4518)
* fix(modules): start emqx_modules by default

* chore(test): eliminate some compile warnings
2021-04-12 09:45:31 +08:00
Shawn f902d880c1 fix(emqx): rename wont_clear_alarm_in to min_alarm_sustain_duration 2021-04-10 12:17:04 +08:00
Shawn df0e905754 refactor(emqx): the congestion alarm 2021-04-10 12:17:04 +08:00
Shawn 327b0c0995 fix(mqtt_sn): send pingresp until all pubacks received 2021-04-10 09:36:56 +08:00
Yudai Kiyofuji e3a5f65c88
feat(config): print override env (#4517) 2021-04-09 16:28:01 +02:00
Zaiming Shi 7667b65710 fix(emqx): Do not io:format when testing 2021-04-09 10:18:25 +02:00
Zaiming Shi 6f5aa88562 chore(emqx_connection): Add a test case to cover oom kill 2021-03-30 10:08:13 +02:00
Zaiming Shi 6e1a55e9ed perf(emqx_connection): no priority receive
Prior to this change the main message receive loop of emqx_connection
is a priority receive which selects system messages and parent EXIT
signals prior to other message.
This accidental (not intended) design may cause the receive operation
to scan potentially large mail box.
2021-03-30 10:08:13 +02:00
Zaiming Shi 66693d6846 fix(emqx_connection): connection OOM kill immediately
Prior to this change, connection process' OOM kill is a loopback
message, which results in a delayed kill when message queue length
is large.
In this change, the loopback message is changed to an exit signal.
2021-03-30 10:08:13 +02:00
wwhai 2e30d7803f fix(channel): fix `keep-alive` problem 2021-03-30 16:01:42 +08:00
Shawn 7bf6ee0f4b
fix(mqtt-sn): sleep mode not working #4434 (#4435) 2021-03-29 17:51:49 +08:00
Zaiming Shi 6c77fa1bf7 fix(emqx_channel): Receive Maximum spec compliance
According to MQTT 5.0 specification
If the Receive Maximum value is absent then its value defaults to
65,535.
2021-03-29 09:42:07 +02:00
Zaiming Shi b10a60cddb fix(conninfo): Ensure receive_maximum do not exceed limit 2021-03-29 09:42:07 +02:00
JianBo He 496e5381fb chore(rule-engine): compatible with the lower case hash string 2021-03-25 09:10:05 +08:00
Zaiming Shi a4b30ea77c feat(emqx): Add backtrace_depth configuration 2021-03-23 21:30:49 +01:00
Zaiming Shi 4c5273c1d1 style(emqx_inflight): elvis: User UPPER_CASE macro 2021-03-23 21:30:49 +01:00
JianBo He 277cab86d3 refactor: improve the speed of hexstr and binary conversions 2021-03-23 18:25:19 +08:00
Zaiming Shi 8201e4c820 feat(emqx.erl): Add a help function to load debug secret 2021-03-19 21:46:03 +01:00
Zaiming Shi e06b54ff71 chore(boot-log): print a warning at boot when running on old otp 2021-03-19 15:39:11 +01:00
Zaiming Shi 2d150127d4 feat(listeners): Ensure no tlsv1.3 for otp 22 or earlier 2021-03-19 15:39:11 +01:00
zhanghongtong 72c1ee264c chore(elvis): fix elvis error 2021-03-19 16:11:23 +08:00
zhanghongtong 568f4de6e5 fix(channel): fix the wrong acl check order
when subscribe, check the acl rule before run 'client.subscribe' hooks
2021-03-19 16:11:23 +08:00
Shawn 81602c973c fix(emqx): deny pingreq when mqtt not connected #4370 2021-03-19 14:17:49 +08:00
Karol Kaczmarek c7b44caa1d feat(acl): Add possibility to remove all acl cache 2021-03-17 19:48:42 +01:00
William Yang d5886c0c66
chore(build): Get rel vsn fallback (#4339) 2021-03-16 09:49:11 +01:00
z8674558 e9180b9ce8 chore(emqx_messages): fix elvis 2021-03-11 16:01:35 +09:00
z8674558 9087f0c138 feat(emqx_message): add from_map 2021-03-11 16:01:30 +09:00
Shawn b400571dbb fix(emqx): validate mqtt malformed varible byte integer 2021-03-10 10:41:57 +01:00
Zaiming Shi 582dea10f5 style(emqx_sys): make elvis happy 2021-03-09 20:22:48 +01:00
Zaiming Shi e1979bf488 chore(build): Single source of EMQX_DESCRIPTION 2021-03-09 20:22:48 +01:00
Zaiming Shi 00a2daba19 chore(build): add more enterprise build support 2021-03-06 10:56:07 +01:00
Zaiming Shi 1af1dd17b5 chore(build): use 'EMQ X test' as app description for test runs 2021-03-06 08:41:50 +01:00
Zaiming Shi 73500a0983 chore(build): inject product description from makefile 2021-03-06 08:41:50 +01:00
Zaiming Shi c752f3bec5
Refactor http lib add uri parse (#4292)
* feat(http_lib): Add uri parse to emqx_http_lib

* fix(webhook): call emqx_http_lib to parse uri

* fix(auth-http): Call emqx_http_lib to parse uri

* fix(rule-engine): call emqx_http_lib to parse uri
2021-03-06 13:35:02 +08:00
Zaiming Shi 9b3ab169ce chore(versioning): detach package version from emqx app version 2021-03-04 20:24:58 +01:00
Zaiming Shi 42098b497f
Merge pull request #4283 from zmstone/add-emqx-http-lib
refactor(http-lib): Add emqx_http_lib
2021-03-04 07:14:02 +01:00
zhanghongtong 67c8b2eed7 chore: update emqx.app.src version 2021-03-04 08:10:48 +08:00
Zaiming Shi 63c001a7aa refactor(http-lib): Add emqx_http_lib
So far only uri_encode and uri_decode APIs
2021-03-03 21:38:10 +01:00
z8674558 3daefe954b chore(src): fix elvis 2021-03-03 20:06:31 +09:00
z8674558 a8558bc7b5 chore(emqx_channel): ignore peer_cert_as/5 from dialyzer 2021-03-03 20:06:31 +09:00
z8674558 e1b915b91c chore(emqx_tracer): pass proper map 2021-03-03 20:06:31 +09:00
zhanghongtong cae0849152 fix(emqx_channel): fix bug when publish deny
fix the bug of replying to puback when the publish message with Qos equal to 2 is deny
2021-03-02 17:54:22 +08:00
Zaiming Shi dd06d70bce refactor(build): Move parse_transform module to root app
So we do not have to workaround the compile order issue
2021-03-02 08:40:19 +08:00
Zaiming Shi 6e0b53fbb9 fix(eunit): fix emqx_tls_lib_tests 2021-03-01 21:00:17 +08:00
Zaiming Shi 0a51bd4c2f fix(webhook): Call common lib for ssl options 2021-03-01 21:00:17 +08:00
Zaiming Shi 700fa71754 refactor(tls): abstract lib for tls options parsing 2021-03-01 21:00:17 +08:00
z8674558 64ac20eec5 chore(emqx_listeners): fix clauses for dialyzer 2021-03-01 16:56:21 +08:00
z8674558 6ea4501de4 chore(emqx_listeners): fix type 2021-03-01 16:56:21 +08:00
Zaiming Shi 3dfa9f45c4
Merge pull request #4183 from zmstone/merge-e4.2.4-to-dev-4.3.0
Merge e4.2.4 to dev 4.3.0
2021-02-19 10:26:47 +01:00
Zaiming Shi 71d02e8011 chore(emqx_connection): delete stale code 2021-02-19 10:20:16 +01:00
Benjamin Große ca1d24a98d feature(mgmt): restart a listener
example:

```
emqx_ctl listener restart mqtt:ssl:external
```

or

```
PUT /api/v4/listeners/mqtt:ssl:external/restart
```

thank you @zmstone for providing the listener-identifier apis :)
2021-02-19 09:22:47 +01:00
Zaiming Shi 98b319a0c0
Merge pull request #4190 from zmstone/refactor-assing-names-to-listeners
feat(listeners): Add identifier to listeners
2021-02-19 07:50:27 +01:00
Zaiming Shi 64cfaf4385 improve(print): io:format error message without indentation
Avoid squeezing lines to the right.
2021-02-19 07:45:37 +01:00
Benjamin Große 28f9b4d519 feat(peer_cert_as_clientid): peer_cert_as_clientid = cn | dn | crt | pem | md5
pem is base64 encoded instead of binary crt

peer_cert_as_username=crt breaks exhook proto utf8 parsing of username

crt cannot be used in a topic name due to being invalid utf8
pem cannot be used in a topic name due to having slashes

peer_cert_as_clientid = md5 allows to e.g. subscribe to "t/%c" with ACL

existing peer_cert_as_username combinations are unaffected.
2021-02-19 10:53:11 +08:00
Zaiming Shi d2bd9b4078
Merge pull request #4197 from zmstone/improve-shared-sup-random-start-point-for-roundrobin
improve(shared-sub): Randomise the startpoint for round-robin
2021-02-18 13:26:01 +01:00
Zaiming Shi db461179c5 improve(shared-sub): Randomise the startpoint for round-robin 2021-02-17 19:10:37 +01:00
Shawn eec64e440d
fix(tracer): create short handler-id if clientid is too long (#4164)
* fix(tracer): create short handler-id if clientid is too long

No need to support lists and atoms for when tracing clients/topics.
2021-02-16 14:45:33 +08:00
Zaiming Shi a93d62ace6 refactor(cli): Print listener ID as table head 2021-02-15 10:34:47 +01:00
Zaiming Shi f9465dda16 Merge branch 'dev/v4.3.0' into merge-e4.2.4-to-dev-4.3.0 2021-02-14 21:41:23 +01:00
Zaiming Shi c5a02c729a feat(listeners): Add an api to ensure all listeners are started 2021-02-14 21:30:50 +01:00
Zaiming Shi dfa9bbc0c2 refactor(listeners): use emqx_ctl to print cli messages
It's better to keep cli print behaviour consistent.

It also makes tests easier as they can meck emqx_ctl:print to
validate the output.
2021-02-14 20:40:01 +01:00
Zaiming Shi 153977609e feat(listeners): Add identifier to listeners
Listeners are internally identifiered by the listen-on tuple
which is not UI friendly when we have to find a listener by this
'signature'.

The listeners are actually named in configs, but the names are
discarded in the parsing functions.

This commit is to keep the name and provide an API to find
listener by name (identifier).
2021-02-14 18:12:40 +01:00
Zaiming Shi dc184574a3 chore(style): fix elvis check for emqx_access_rule 2021-02-13 11:54:09 +01:00
Zaiming Shi 406a7d60c7 chore(style): fix elvis check for emqx_connection 2021-02-13 11:50:17 +01:00
Zaiming Shi 9b82112b7c Merge remote-tracking branch 'origin/dev/e4.3.0' into merge-e4.2.4-to-dev-4.3.0 2021-02-13 11:10:08 +01:00
Zaiming Shi f000b6583c fix(tls): Ensure tls config integrity
For default tsl version and ciphers, we try to use otp release number
to determin if we want to use tlsv1.3

For default configs, we try to porivde both tlsv1.3 and
ciphers in config (even for commented out configs)
2021-02-09 22:56:28 +01:00
Zaiming Shi 2852ac79d4 feat(tls): Add a tls lib module
emqx_tls_lib is added to help ensure integrity of tls version
and cipher options.
2021-02-09 21:20:26 +01:00
Zaiming Shi 7aff861f9b refactor(emqx_modules): Move emqx_modules to lib-opensource
emqx_moduels for enterprise is refactored as a lib/plugin
in order to avoid merge conflicts, we make sure they can
co-exist in the same branch, because lib-opensource is compiled
in opensource project and lib-enterprise (to be added) is
compiled in enterprise project
2021-02-08 21:35:44 +01:00
emqx-ci-robot 6c1129dc6a
Auto-pull-request-on-2021-01-29 (#4114)
* fix(share sub): fix the issue that the number of subscriptions dropped to 0 during the picking subscriber and caused a crash

* Connection Busy Alarms (#3992)

feat(emqx_connection): improve port_busy alarm

* fix(emqx_connection): tune the congestion alarm params

* chore(deps): upgrade esockd to 5.7.5
* fix(appup): correct the appup file
2021-01-30 10:30:18 +08:00
zhanghongtong d78b2b23c1 chore(build): update pkg version 2021-01-29 19:29:41 +08:00
tigercl 5878950dc3
feat(websocket): support for checking subprotocols (#4099) 2021-01-28 20:42:57 +08:00
JianBo He 02cb8d0211 chore(style): set warnings_as_errors compile option 2021-01-27 18:02:12 +08:00
Zaiming Shi de972b3d84 fix(emqx_vm): Call recon_alloc:allocators/0 to get allocators 2021-01-23 11:42:28 +01:00
Zaiming Shi 23b2f4fa72
Merge pull request #4050 from zmstone/chore-delete-stale-code
chore(emqx_vm): delete stale code
2021-01-23 11:13:22 +01:00
JianBo He 7c3cd26589 chore(elvis): fix elvis wanrings 2021-01-23 18:07:58 +08:00
JianBo He f59377adf5 fix(logs): print the correct username and clientid 2021-01-23 18:07:58 +08:00
Zaiming Shi 33c35915ca refactor(emqx_vm): make elvis happy 2021-01-22 09:23:20 +01:00
Zaiming Shi 4680ba574c chore(emqx_vm): Delete get_ets_object, not used 2021-01-22 09:21:45 +01:00
Zaiming Shi 47df29ae49 chore(emqx_vm): delete stale code
The port binary format is no longer compatible in OTP 23
2021-01-22 07:50:00 +01:00
Zaiming Shi 0087303b25 feat(shared_sub): Support hashing from source topic. 2021-01-21 21:05:56 +01:00
Zaiming Shi 5aa63ed203 fix(shared_sub): align default value and default config
Shared subscription default dispatch strategy is 'random' in config
but 'round_robin' in code. This commit is to make sure they are the
same: both are 'random'.
2021-01-21 21:05:56 +01:00
Zaiming Shi 598207e308 fix(ws_connection): proplists:get_bool for boolean flags 2021-01-15 14:28:22 +01:00
ayodele.akingbule 5794a708ed feat(emqx_ws_connection): Prevent EMQX from CSWSH Cross-Site Web-Socket Hijack 2021-01-15 14:28:22 +01:00
JianBo He 32b23b9181 Revert "feat(auth_http): support for getting websocket cookies"
This reverts commit 5427057c2c.
2021-01-14 15:10:48 +01:00
JianBo He d437f9f228 chore(elvis): fix elvis warnings 2021-01-14 15:46:16 +08:00
JianBo He f2190dd5b5 chore(mnesia): explicitly specify the copy type for table 2021-01-14 15:46:16 +08:00
JianBo He 76fc6225d3 fix(elvis): fix elvis checking 2021-01-14 15:46:16 +08:00
JianBo He 2a029b71c9 perf(mnesia): unify the copy types of all nodes 2021-01-14 15:46:16 +08:00
JianBo He 5427057c2c feat(auth_http): support for getting websocket cookies
see: https://github.com/emqx/emqx-auth-http/pull/225
2021-01-11 09:21:16 +08:00
Ayodele 2b481dabe7
Fix some dialyzer warnings (#3988) 2021-01-05 20:49:50 +01:00
ayodele.akingbule b9bb88d9eb fix(emqx): fix dialyzer warnings 2021-01-04 14:14:55 +01:00
zhouzb fbf8d3e111 fix(share sub): fix the issue that the number of subscriptions dropped to 0 during the picking subscriber and caused a crash 2020-12-31 14:03:55 +08:00
Shawn 4f82c77e7a
fix(log): improve the error log message on hook failure (#3973) 2020-12-31 13:55:09 +08:00
zhouzb ac0f51fec3 fix(max topic len): use the maximum length limit by default 2020-12-28 14:48:32 +08:00
JianBo He 739e49218f
fix(cm): fix the problem of registering a channel twice (#3831) 2020-12-28 11:03:29 +08:00
ayodele.akingbule b68a0b3730 fix(emqx_lua_hook): fix dialyzer warnings. 2020-12-25 07:42:01 +08:00
Zaiming Shi 7bdd093ef5 Merge remote-tracking branch 'origin/dev/v4.3.0' into umbrella-fix-build 2020-12-11 08:55:57 +01:00
ayodele.akingbule 6973837829 fix(emqx_plugins): Dialyzer warnings 2020-12-10 23:34:36 +01:00
Ayodele 56d7b3deb1 Umbrella fix build (#8) 2020-12-10 11:25:25 +01:00
ayodele.akingbule 59d69b730b fix(emqx_logger): Dialyzer warnings 2020-12-10 11:22:38 +01:00
ayodele.akingbule b9b20ba268 fix(emqx.erl): Dialyzer warnings 2020-12-10 11:22:38 +01:00
ayodele.akingbule 62e0a21ad0 fix(emqx_auth_sys, emqx_ws_connection): Dialyzer warnings 2020-12-10 11:22:38 +01:00
ayodele.akingbule 18ae158f45 fix(emqx_plugins, emqx_sys, emqx_sys_mon, emqx_ws_connection): Dialyzer warnings 2020-12-10 11:22:38 +01:00
Zaiming Shi baaa4e847d fix(emqx_sn_gateway): Dialyzer warnings 2020-12-10 09:49:24 +01:00
Zaiming Shi eecd2b5f35 fix(emqx_types): Non mandatory map fields 2020-12-10 09:38:07 +01:00
Zaiming Shi adc9cc30f6 refactor(emqx_modules): Swallow errors when write modules 2020-12-10 09:35:36 +01:00
Zaiming Shi d47a2294ca fix(emqx_mod_topic_metrics): Dialyzer warnings 2020-12-10 09:35:36 +01:00
Zaiming Shi 0f0ca1e9fd fix(emqx_mod_rewrite): Dialyzer warnings 2020-12-10 09:35:36 +01:00
Zaiming Shi ab5599b3ec refactor(hook): Add emqx_hooks:put to hide already_exists error
This also fixes dialyzer warnings in emqx_mod_presence
2020-12-10 09:35:36 +01:00
Zaiming Shi 5793ef6640 fix(emqx_mod_sup): Dialyzer warning
All the callers of start_child API are discarding the return value.
2020-12-10 09:35:36 +01:00
Zaiming Shi f3d973689b fix(emqx_listeners): Dialyzer warnings 2020-12-10 09:35:36 +01:00
Zaiming Shi 7a39470200 fix(emqx_connection): Dialyzer warnings 2020-12-10 09:35:36 +01:00
Zaiming Shi 7dd67a6caf fix(emqx_channel): Dialyzer warning 2020-12-10 09:35:36 +01:00
Zaiming Shi cfe52cbb8d fix(emqx_broker): Dialyzer warning 2020-12-10 09:35:36 +01:00
Zaiming Shi 0eb697fa6f fix(emqx_app): Dialyzer warnings 2020-12-10 09:35:35 +01:00
Zaiming Shi 3fb69cc407 fix(emqx_alarm): Dialyzer warnings 2020-12-10 09:35:35 +01:00
Zaiming Shi 0d90d5c66b fix(emqx_acl_cache): Dialyzer warnings 2020-12-10 09:35:35 +01:00