From e0ab0159fb3d0ac5f5c8177b3ed69a5a0b9ca5ba Mon Sep 17 00:00:00 2001 From: Igor Kulikov Date: Tue, 12 Feb 2019 17:16:24 +0200 Subject: [PATCH 1/5] Version set to 2.3.1-SNAPSHOT --- application/pom.xml | 2 +- common/data/pom.xml | 2 +- common/message/pom.xml | 2 +- common/pom.xml | 2 +- common/queue/pom.xml | 2 +- common/transport/coap/pom.xml | 2 +- common/transport/http/pom.xml | 2 +- common/transport/mqtt/pom.xml | 2 +- common/transport/pom.xml | 2 +- common/transport/transport-api/pom.xml | 2 +- dao/pom.xml | 2 +- msa/black-box-tests/pom.xml | 2 +- msa/js-executor/pom.xml | 2 +- msa/pom.xml | 2 +- msa/tb-node/pom.xml | 2 +- msa/tb/pom.xml | 2 +- msa/transport/coap/pom.xml | 2 +- msa/transport/http/pom.xml | 2 +- msa/transport/mqtt/pom.xml | 2 +- msa/transport/pom.xml | 2 +- msa/web-ui/pom.xml | 2 +- netty-mqtt/pom.xml | 4 ++-- pom.xml | 2 +- rule-engine/pom.xml | 2 +- rule-engine/rule-engine-api/pom.xml | 2 +- rule-engine/rule-engine-components/pom.xml | 2 +- tools/pom.xml | 2 +- transport/coap/pom.xml | 2 +- transport/http/pom.xml | 2 +- transport/mqtt/pom.xml | 2 +- transport/pom.xml | 2 +- ui/pom.xml | 2 +- 32 files changed, 33 insertions(+), 33 deletions(-) diff --git a/application/pom.xml b/application/pom.xml index ddd91e07e9..91965dfed5 100644 --- a/application/pom.xml +++ b/application/pom.xml @@ -20,7 +20,7 @@ 4.0.0 org.thingsboard - 2.3.0 + 2.3.1-SNAPSHOT thingsboard application diff --git a/common/data/pom.xml b/common/data/pom.xml index a289ee7d04..bb5d9c76ff 100644 --- a/common/data/pom.xml +++ b/common/data/pom.xml @@ -20,7 +20,7 @@ 4.0.0 org.thingsboard - 2.3.0 + 2.3.1-SNAPSHOT common org.thingsboard.common diff --git a/common/message/pom.xml b/common/message/pom.xml index 24e2d8bb38..62fffe5d19 100644 --- a/common/message/pom.xml +++ b/common/message/pom.xml @@ -20,7 +20,7 @@ 4.0.0 org.thingsboard - 2.3.0 + 2.3.1-SNAPSHOT common org.thingsboard.common diff --git a/common/pom.xml b/common/pom.xml index bb689002e1..3e7aa22dfc 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -20,7 +20,7 @@ 4.0.0 org.thingsboard - 2.3.0 + 2.3.1-SNAPSHOT thingsboard common diff --git a/common/queue/pom.xml b/common/queue/pom.xml index aa5542cede..694d64ac21 100644 --- a/common/queue/pom.xml +++ b/common/queue/pom.xml @@ -20,7 +20,7 @@ 4.0.0 org.thingsboard - 2.3.0 + 2.3.1-SNAPSHOT common org.thingsboard.common diff --git a/common/transport/coap/pom.xml b/common/transport/coap/pom.xml index b27fcd7763..18d2cc7590 100644 --- a/common/transport/coap/pom.xml +++ b/common/transport/coap/pom.xml @@ -20,7 +20,7 @@ 4.0.0 org.thingsboard.common - 2.3.0 + 2.3.1-SNAPSHOT transport org.thingsboard.common.transport diff --git a/common/transport/http/pom.xml b/common/transport/http/pom.xml index e867aa1605..0933bb0b40 100644 --- a/common/transport/http/pom.xml +++ b/common/transport/http/pom.xml @@ -20,7 +20,7 @@ 4.0.0 org.thingsboard.common - 2.3.0 + 2.3.1-SNAPSHOT transport org.thingsboard.common.transport diff --git a/common/transport/mqtt/pom.xml b/common/transport/mqtt/pom.xml index 95832aac51..08a8d56ef0 100644 --- a/common/transport/mqtt/pom.xml +++ b/common/transport/mqtt/pom.xml @@ -20,7 +20,7 @@ 4.0.0 org.thingsboard.common - 2.3.0 + 2.3.1-SNAPSHOT transport org.thingsboard.common.transport diff --git a/common/transport/pom.xml b/common/transport/pom.xml index b63d6488bd..f2b70be45c 100644 --- a/common/transport/pom.xml +++ b/common/transport/pom.xml @@ -20,7 +20,7 @@ 4.0.0 org.thingsboard - 2.3.0 + 2.3.1-SNAPSHOT common org.thingsboard.common diff --git a/common/transport/transport-api/pom.xml b/common/transport/transport-api/pom.xml index 407c414fce..aae1c3f930 100644 --- a/common/transport/transport-api/pom.xml +++ b/common/transport/transport-api/pom.xml @@ -20,7 +20,7 @@ 4.0.0 org.thingsboard.common - 2.3.0 + 2.3.1-SNAPSHOT transport org.thingsboard.common.transport diff --git a/dao/pom.xml b/dao/pom.xml index 817a5449f6..3b73edede3 100644 --- a/dao/pom.xml +++ b/dao/pom.xml @@ -20,7 +20,7 @@ 4.0.0 org.thingsboard - 2.3.0 + 2.3.1-SNAPSHOT thingsboard dao diff --git a/msa/black-box-tests/pom.xml b/msa/black-box-tests/pom.xml index 813d344605..40461e1e9f 100644 --- a/msa/black-box-tests/pom.xml +++ b/msa/black-box-tests/pom.xml @@ -21,7 +21,7 @@ org.thingsboard - 2.3.0 + 2.3.1-SNAPSHOT msa org.thingsboard.msa diff --git a/msa/js-executor/pom.xml b/msa/js-executor/pom.xml index 97c4b166b5..e5102798a7 100644 --- a/msa/js-executor/pom.xml +++ b/msa/js-executor/pom.xml @@ -20,7 +20,7 @@ 4.0.0 org.thingsboard - 2.3.0 + 2.3.1-SNAPSHOT msa org.thingsboard.msa diff --git a/msa/pom.xml b/msa/pom.xml index 180ecae29a..5965b7f2fc 100644 --- a/msa/pom.xml +++ b/msa/pom.xml @@ -20,7 +20,7 @@ 4.0.0 org.thingsboard - 2.3.0 + 2.3.1-SNAPSHOT thingsboard msa diff --git a/msa/tb-node/pom.xml b/msa/tb-node/pom.xml index bc0bd0ee60..d23a9b0710 100644 --- a/msa/tb-node/pom.xml +++ b/msa/tb-node/pom.xml @@ -20,7 +20,7 @@ 4.0.0 org.thingsboard - 2.3.0 + 2.3.1-SNAPSHOT msa org.thingsboard.msa diff --git a/msa/tb/pom.xml b/msa/tb/pom.xml index f1eb88fffc..8a815e2e00 100644 --- a/msa/tb/pom.xml +++ b/msa/tb/pom.xml @@ -20,7 +20,7 @@ 4.0.0 org.thingsboard - 2.3.0 + 2.3.1-SNAPSHOT msa org.thingsboard.msa diff --git a/msa/transport/coap/pom.xml b/msa/transport/coap/pom.xml index df185220a2..f92330a2d9 100644 --- a/msa/transport/coap/pom.xml +++ b/msa/transport/coap/pom.xml @@ -20,7 +20,7 @@ 4.0.0 org.thingsboard.msa - 2.3.0 + 2.3.1-SNAPSHOT transport org.thingsboard.msa.transport diff --git a/msa/transport/http/pom.xml b/msa/transport/http/pom.xml index 628f0665eb..a45e05356a 100644 --- a/msa/transport/http/pom.xml +++ b/msa/transport/http/pom.xml @@ -20,7 +20,7 @@ 4.0.0 org.thingsboard.msa - 2.3.0 + 2.3.1-SNAPSHOT transport org.thingsboard.msa.transport diff --git a/msa/transport/mqtt/pom.xml b/msa/transport/mqtt/pom.xml index 33eeaf9146..5347497606 100644 --- a/msa/transport/mqtt/pom.xml +++ b/msa/transport/mqtt/pom.xml @@ -20,7 +20,7 @@ 4.0.0 org.thingsboard.msa - 2.3.0 + 2.3.1-SNAPSHOT transport org.thingsboard.msa.transport diff --git a/msa/transport/pom.xml b/msa/transport/pom.xml index 644605eafe..a78532f0c6 100644 --- a/msa/transport/pom.xml +++ b/msa/transport/pom.xml @@ -20,7 +20,7 @@ 4.0.0 org.thingsboard - 2.3.0 + 2.3.1-SNAPSHOT msa org.thingsboard.msa diff --git a/msa/web-ui/pom.xml b/msa/web-ui/pom.xml index 3768993e9b..8fb039b27e 100644 --- a/msa/web-ui/pom.xml +++ b/msa/web-ui/pom.xml @@ -20,7 +20,7 @@ 4.0.0 org.thingsboard - 2.3.0 + 2.3.1-SNAPSHOT msa org.thingsboard.msa diff --git a/netty-mqtt/pom.xml b/netty-mqtt/pom.xml index 4e69394015..1af619fec2 100644 --- a/netty-mqtt/pom.xml +++ b/netty-mqtt/pom.xml @@ -19,12 +19,12 @@ 4.0.0 org.thingsboard - 2.3.0 + 2.3.1-SNAPSHOT thingsboard org.thingsboard netty-mqtt - 2.3.0 + 2.3.1-SNAPSHOT jar Netty MQTT Client diff --git a/pom.xml b/pom.xml index 794aa2ff9b..f2cde239b7 100755 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ 4.0.0 org.thingsboard thingsboard - 2.3.0 + 2.3.1-SNAPSHOT pom Thingsboard diff --git a/rule-engine/pom.xml b/rule-engine/pom.xml index a704dd7d4e..53a516d7cb 100644 --- a/rule-engine/pom.xml +++ b/rule-engine/pom.xml @@ -20,7 +20,7 @@ 4.0.0 org.thingsboard - 2.3.0 + 2.3.1-SNAPSHOT thingsboard rule-engine diff --git a/rule-engine/rule-engine-api/pom.xml b/rule-engine/rule-engine-api/pom.xml index 15f629a5d8..aed0372b0b 100644 --- a/rule-engine/rule-engine-api/pom.xml +++ b/rule-engine/rule-engine-api/pom.xml @@ -22,7 +22,7 @@ 4.0.0 org.thingsboard - 2.3.0 + 2.3.1-SNAPSHOT rule-engine org.thingsboard.rule-engine diff --git a/rule-engine/rule-engine-components/pom.xml b/rule-engine/rule-engine-components/pom.xml index d95003c9df..01253f0acc 100644 --- a/rule-engine/rule-engine-components/pom.xml +++ b/rule-engine/rule-engine-components/pom.xml @@ -22,7 +22,7 @@ 4.0.0 org.thingsboard - 2.3.0 + 2.3.1-SNAPSHOT rule-engine org.thingsboard.rule-engine diff --git a/tools/pom.xml b/tools/pom.xml index 6da6c2fdc1..7f3e79be8c 100644 --- a/tools/pom.xml +++ b/tools/pom.xml @@ -20,7 +20,7 @@ 4.0.0 org.thingsboard - 2.3.0 + 2.3.1-SNAPSHOT thingsboard tools diff --git a/transport/coap/pom.xml b/transport/coap/pom.xml index 05088b5bc6..874979c74d 100644 --- a/transport/coap/pom.xml +++ b/transport/coap/pom.xml @@ -20,7 +20,7 @@ 4.0.0 org.thingsboard - 2.3.0 + 2.3.1-SNAPSHOT transport org.thingsboard.transport diff --git a/transport/http/pom.xml b/transport/http/pom.xml index d3e5cc47b4..8fc24706d6 100644 --- a/transport/http/pom.xml +++ b/transport/http/pom.xml @@ -20,7 +20,7 @@ 4.0.0 org.thingsboard - 2.3.0 + 2.3.1-SNAPSHOT transport org.thingsboard.transport diff --git a/transport/mqtt/pom.xml b/transport/mqtt/pom.xml index cc0628e399..10dc810ff8 100644 --- a/transport/mqtt/pom.xml +++ b/transport/mqtt/pom.xml @@ -20,7 +20,7 @@ 4.0.0 org.thingsboard - 2.3.0 + 2.3.1-SNAPSHOT transport org.thingsboard.transport diff --git a/transport/pom.xml b/transport/pom.xml index 4a70402d66..05abf6aa7b 100644 --- a/transport/pom.xml +++ b/transport/pom.xml @@ -20,7 +20,7 @@ 4.0.0 org.thingsboard - 2.3.0 + 2.3.1-SNAPSHOT thingsboard transport diff --git a/ui/pom.xml b/ui/pom.xml index d5f91db026..591e92c458 100644 --- a/ui/pom.xml +++ b/ui/pom.xml @@ -20,7 +20,7 @@ 4.0.0 org.thingsboard - 2.3.0 + 2.3.1-SNAPSHOT thingsboard org.thingsboard From 8fdfacf492022068dfbbbb98802f77b7d073c0a8 Mon Sep 17 00:00:00 2001 From: Igor Kulikov Date: Tue, 12 Feb 2019 17:17:16 +0200 Subject: [PATCH 2/5] Update JS packages version to 2.3.1 --- msa/js-executor/package.json | 2 +- msa/web-ui/package.json | 2 +- ui/package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/msa/js-executor/package.json b/msa/js-executor/package.json index 7ec6f92e7e..b1c512e54c 100644 --- a/msa/js-executor/package.json +++ b/msa/js-executor/package.json @@ -1,7 +1,7 @@ { "name": "thingsboard-js-executor", "private": true, - "version": "2.3.0", + "version": "2.3.1", "description": "ThingsBoard JavaScript Executor Microservice", "main": "server.js", "bin": "server.js", diff --git a/msa/web-ui/package.json b/msa/web-ui/package.json index 43a7962aee..0bdb6cfa84 100644 --- a/msa/web-ui/package.json +++ b/msa/web-ui/package.json @@ -1,7 +1,7 @@ { "name": "thingsboard-web-ui", "private": true, - "version": "2.3.0", + "version": "2.3.1", "description": "ThingsBoard Web UI Microservice", "main": "server.js", "bin": "server.js", diff --git a/ui/package.json b/ui/package.json index 7345ae6425..2600c62438 100644 --- a/ui/package.json +++ b/ui/package.json @@ -1,7 +1,7 @@ { "name": "thingsboard", "private": true, - "version": "2.3.0", + "version": "2.3.1", "description": "ThingsBoard UI", "licenses": [ { From 34bc51903c2a97c35c16d51e8b725c81007cbb3a Mon Sep 17 00:00:00 2001 From: Igor Kulikov Date: Tue, 12 Feb 2019 17:17:50 +0200 Subject: [PATCH 3/5] Ability to trace script body executed by JS Executor microservice. --- docker/tb-js-executor.env | 3 ++- msa/js-executor/api/jsInvokeMessageProcessor.js | 13 ++++++++++++- .../config/custom-environment-variables.yml | 3 +++ msa/js-executor/config/default.yml | 3 +++ 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/docker/tb-js-executor.env b/docker/tb-js-executor.env index f7f24acabf..38f283cd1a 100644 --- a/docker/tb-js-executor.env +++ b/docker/tb-js-executor.env @@ -4,4 +4,5 @@ TB_KAFKA_SERVERS=kafka:9092 LOGGER_LEVEL=info LOG_FOLDER=logs LOGGER_FILENAME=tb-js-executor-%DATE%.log -DOCKER_MODE=true \ No newline at end of file +DOCKER_MODE=true +SCRIPT_BODY_TRACE_FREQUENCY=1000 \ No newline at end of file diff --git a/msa/js-executor/api/jsInvokeMessageProcessor.js b/msa/js-executor/api/jsInvokeMessageProcessor.js index f79233ef76..1a1df75e09 100644 --- a/msa/js-executor/api/jsInvokeMessageProcessor.js +++ b/msa/js-executor/api/jsInvokeMessageProcessor.js @@ -15,16 +15,20 @@ */ 'use strict'; -const logger = require('../config/logger')('JsInvokeMessageProcessor'), +const config = require('config'), + logger = require('../config/logger')('JsInvokeMessageProcessor'), Utils = require('./utils'), js = require('./jsinvoke.proto').js, KeyedMessage = require('kafka-node').KeyedMessage, JsExecutor = require('./jsExecutor'); +const scriptBodyTraceFrequency = Number(config.get('script.script_body_trace_frequency')); + function JsInvokeMessageProcessor(producer) { this.producer = producer; this.executor = new JsExecutor(); this.scriptMap = {}; + this.executedScriptsCounter = 0; } JsInvokeMessageProcessor.prototype.onJsInvokeMessage = function(message) { @@ -74,6 +78,13 @@ JsInvokeMessageProcessor.prototype.processCompileRequest = function(requestId, r JsInvokeMessageProcessor.prototype.processInvokeRequest = function(requestId, responseTopic, invokeRequest) { var scriptId = getScriptId(invokeRequest); logger.debug('[%s] Processing invoke request, scriptId: [%s]', requestId, scriptId); + this.executedScriptsCounter++; + if ( this.executedScriptsCounter >= scriptBodyTraceFrequency ) { + this.executedScriptsCounter = 0; + if (logger.levels[logger.level] >= logger.levels['debug']) { + logger.debug('[%s] Executing script body: [%s]', scriptId, invokeRequest.scriptBody); + } + } this.getOrCompileScript(scriptId, invokeRequest.scriptBody).then( (script) => { this.executor.executeScript(script, invokeRequest.args, invokeRequest.timeout).then( diff --git a/msa/js-executor/config/custom-environment-variables.yml b/msa/js-executor/config/custom-environment-variables.yml index d074bd9e45..99f47cb5f1 100644 --- a/msa/js-executor/config/custom-environment-variables.yml +++ b/msa/js-executor/config/custom-environment-variables.yml @@ -23,3 +23,6 @@ logger: level: "LOGGER_LEVEL" path: "LOG_FOLDER" filename: "LOGGER_FILENAME" + +script: + script_body_trace_frequency: "SCRIPT_BODY_TRACE_FREQUENCY" diff --git a/msa/js-executor/config/default.yml b/msa/js-executor/config/default.yml index 9f82caa016..fb470567e7 100644 --- a/msa/js-executor/config/default.yml +++ b/msa/js-executor/config/default.yml @@ -24,3 +24,6 @@ logger: level: "info" path: "logs" filename: "tb-js-executor-%DATE%.log" + +script: + script_body_trace_frequency: "1000" From afc02e72c178a3bf3433fce4fba73f16ae3f5b40 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Wed, 13 Feb 2019 12:28:41 +0200 Subject: [PATCH 4/5] polygon color function fix for multiply datasources --- ui/src/app/widget/lib/map-widget2.js | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/ui/src/app/widget/lib/map-widget2.js b/ui/src/app/widget/lib/map-widget2.js index 4c6248f85b..7ac960447b 100644 --- a/ui/src/app/widget/lib/map-widget2.js +++ b/ui/src/app/widget/lib/map-widget2.js @@ -305,12 +305,9 @@ export default class TbMapWidgetV2 { } function updateLocationPolygonColor(location, color) { - if (!location.settings.calculatedPolygonColor || location.settings.calculatedPolygonColor !== color) { + if (location.polygon && color) { location.settings.calculatedPolygonColor = color; - if (location.polygon) { - tbMap.map.updatePolygonColor(location.polygon, location.settings, color); - } - + tbMap.map.updatePolygonColor(location.polygon, location.settings, color); } } @@ -338,10 +335,8 @@ export default class TbMapWidgetV2 { function updateLocationStyle(location, dataMap) { updateLocationLabel(location, dataMap); var color = calculateLocationColor(location, dataMap); - var polygonColor = calculateLocationPolygonColor(location, dataMap); var image = calculateLocationMarkerImage(location, dataMap); updateLocationColor(location, color, image); - if (location.settings.usePolygonColorFunction) updateLocationPolygonColor(location, polygonColor); updateLocationMarkerIcon(location, image); } @@ -441,6 +436,7 @@ export default class TbMapWidgetV2 { if (location.marker) { updateLocationStyle(location, dataMap); } + } } return locationChanged; @@ -456,11 +452,13 @@ export default class TbMapWidgetV2 { locationPolygonClick(event, location); }, [location.dsIndex]); tbMap.polygons.push(location.polygon); + if (location.settings.usePolygonColorFunction) updateLocationPolygonColor(location, calculateLocationPolygonColor(location, dataMap)); } else if (polygonLatLngs.length > 0) { let prevPolygonArr = tbMap.map.getPolygonLatLngs(location.polygon); if (!prevPolygonArr || !arraysEqual(prevPolygonArr, polygonLatLngs)) { tbMap.map.setPolygonLatLngs(location.polygon, polygonLatLngs); } + if (location.settings.usePolygonColorFunction) updateLocationPolygonColor(location, calculateLocationPolygonColor(location, dataMap)); } } } From d863ecfa6b0996d55d75cc950ff56dd81842552a Mon Sep 17 00:00:00 2001 From: Igor Kulikov Date: Wed, 13 Feb 2019 14:15:14 +0200 Subject: [PATCH 5/5] Improve rule node executors to use work stealing thread pool. Use shared event loop for Mqtt rule nodes. --- .../server/actors/ActorSystemContext.java | 5 ++ .../actors/ruleChain/DefaultTbContext.java | 6 +++ .../executors/AbstractListeningExecutor.java | 2 +- .../SharedEventLoopGroupService.java | 48 +++++++++++++++++++ .../AbstractNashornJsInvokeService.java | 2 +- .../src/main/resources/thingsboard.yml | 6 +-- .../rule/engine/api/TbContext.java | 4 ++ .../rule/engine/mqtt/TbMqttNode.java | 11 ++--- ui/package-lock.json | 2 +- 9 files changed, 72 insertions(+), 14 deletions(-) create mode 100644 application/src/main/java/org/thingsboard/server/service/executors/SharedEventLoopGroupService.java diff --git a/application/src/main/java/org/thingsboard/server/actors/ActorSystemContext.java b/application/src/main/java/org/thingsboard/server/actors/ActorSystemContext.java index 8433fdb1ea..2cc7e470c2 100644 --- a/application/src/main/java/org/thingsboard/server/actors/ActorSystemContext.java +++ b/application/src/main/java/org/thingsboard/server/actors/ActorSystemContext.java @@ -67,6 +67,7 @@ import org.thingsboard.server.service.encoding.DataDecodingEncodingService; import org.thingsboard.server.service.executors.ClusterRpcCallbackExecutorService; import org.thingsboard.server.service.executors.DbCallbackExecutorService; import org.thingsboard.server.service.executors.ExternalCallExecutorService; +import org.thingsboard.server.service.executors.SharedEventLoopGroupService; import org.thingsboard.server.service.mail.MailExecutorService; import org.thingsboard.server.service.rpc.DeviceRpcService; import org.thingsboard.server.service.script.JsExecutorService; @@ -206,6 +207,10 @@ public class ActorSystemContext { @Getter private ExternalCallExecutorService externalCallExecutorService; + @Autowired + @Getter + private SharedEventLoopGroupService sharedEventLoopGroupService; + @Autowired @Getter private MailService mailService; diff --git a/application/src/main/java/org/thingsboard/server/actors/ruleChain/DefaultTbContext.java b/application/src/main/java/org/thingsboard/server/actors/ruleChain/DefaultTbContext.java index ed50bdafa6..90a9d56e0c 100644 --- a/application/src/main/java/org/thingsboard/server/actors/ruleChain/DefaultTbContext.java +++ b/application/src/main/java/org/thingsboard/server/actors/ruleChain/DefaultTbContext.java @@ -17,6 +17,7 @@ package org.thingsboard.server.actors.ruleChain; import akka.actor.ActorRef; import com.datastax.driver.core.utils.UUIDs; +import io.netty.channel.EventLoopGroup; import org.springframework.util.StringUtils; import org.thingsboard.rule.engine.api.ListeningExecutor; import org.thingsboard.rule.engine.api.MailService; @@ -238,6 +239,11 @@ class DefaultTbContext implements TbContext { return mainCtx.getRuleChainTransactionService(); } + @Override + public EventLoopGroup getSharedEventLoop() { + return mainCtx.getSharedEventLoopGroupService().getSharedEventLoopGroup(); + } + @Override public MailService getMailService() { if (mainCtx.isAllowSystemMailService()) { diff --git a/application/src/main/java/org/thingsboard/server/service/executors/AbstractListeningExecutor.java b/application/src/main/java/org/thingsboard/server/service/executors/AbstractListeningExecutor.java index fabd345b64..221915d02c 100644 --- a/application/src/main/java/org/thingsboard/server/service/executors/AbstractListeningExecutor.java +++ b/application/src/main/java/org/thingsboard/server/service/executors/AbstractListeningExecutor.java @@ -34,7 +34,7 @@ public abstract class AbstractListeningExecutor implements ListeningExecutor { @PostConstruct public void init() { - this.service = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(getThreadPollSize())); + this.service = MoreExecutors.listeningDecorator(Executors.newWorkStealingPool(getThreadPollSize())); } @PreDestroy diff --git a/application/src/main/java/org/thingsboard/server/service/executors/SharedEventLoopGroupService.java b/application/src/main/java/org/thingsboard/server/service/executors/SharedEventLoopGroupService.java new file mode 100644 index 0000000000..e61b0db0f6 --- /dev/null +++ b/application/src/main/java/org/thingsboard/server/service/executors/SharedEventLoopGroupService.java @@ -0,0 +1,48 @@ +/** + * Copyright © 2016-2019 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.thingsboard.server.service.executors; + +import com.google.common.util.concurrent.MoreExecutors; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.nio.NioEventLoopGroup; +import lombok.Getter; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; + +@Component +public class SharedEventLoopGroupService { + + @Getter + private EventLoopGroup sharedEventLoopGroup; + + @PostConstruct + public void init() { + this.sharedEventLoopGroup = new NioEventLoopGroup(); + } + + @PreDestroy + public void destroy() { + if (this.sharedEventLoopGroup != null) { + this.sharedEventLoopGroup.shutdownGracefully(0, 5, TimeUnit.SECONDS); + } + } + +} diff --git a/application/src/main/java/org/thingsboard/server/service/script/AbstractNashornJsInvokeService.java b/application/src/main/java/org/thingsboard/server/service/script/AbstractNashornJsInvokeService.java index f365ef68dc..62e7c24b1a 100644 --- a/application/src/main/java/org/thingsboard/server/service/script/AbstractNashornJsInvokeService.java +++ b/application/src/main/java/org/thingsboard/server/service/script/AbstractNashornJsInvokeService.java @@ -42,7 +42,7 @@ public abstract class AbstractNashornJsInvokeService extends AbstractJsInvokeSer public void init() { if (useJsSandbox()) { sandbox = NashornSandboxes.create(); - monitorExecutorService = Executors.newFixedThreadPool(getMonitorThreadPoolSize()); + monitorExecutorService = Executors.newWorkStealingPool(getMonitorThreadPoolSize()); sandbox.setExecutor(monitorExecutorService); sandbox.setMaxCPUTime(getMaxCpuTime()); sandbox.allowNoBraces(false); diff --git a/application/src/main/resources/thingsboard.yml b/application/src/main/resources/thingsboard.yml index ba9382aa2d..235646f6c2 100644 --- a/application/src/main/resources/thingsboard.yml +++ b/application/src/main/resources/thingsboard.yml @@ -200,13 +200,13 @@ actors: # Specify thread pool size for database request callbacks executor service db_callback_thread_pool_size: "${ACTORS_RULE_DB_CALLBACK_THREAD_POOL_SIZE:1}" # Specify thread pool size for javascript executor service - js_thread_pool_size: "${ACTORS_RULE_JS_THREAD_POOL_SIZE:10}" + js_thread_pool_size: "${ACTORS_RULE_JS_THREAD_POOL_SIZE:50}" # Specify thread pool size for mail sender executor service - mail_thread_pool_size: "${ACTORS_RULE_MAIL_THREAD_POOL_SIZE:10}" + mail_thread_pool_size: "${ACTORS_RULE_MAIL_THREAD_POOL_SIZE:50}" # Whether to allow usage of system mail service for rules allow_system_mail_service: "${ACTORS_RULE_ALLOW_SYSTEM_MAIL_SERVICE:true}" # Specify thread pool size for external call service - external_call_thread_pool_size: "${ACTORS_RULE_EXTERNAL_CALL_THREAD_POOL_SIZE:10}" + external_call_thread_pool_size: "${ACTORS_RULE_EXTERNAL_CALL_THREAD_POOL_SIZE:50}" chain: # Errors for particular actor are persisted once per specified amount of milliseconds error_persist_frequency: "${ACTORS_RULE_CHAIN_ERROR_FREQUENCY:3000}" diff --git a/rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/TbContext.java b/rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/TbContext.java index d3476a470c..9ebc610e1b 100644 --- a/rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/TbContext.java +++ b/rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/TbContext.java @@ -15,6 +15,7 @@ */ package org.thingsboard.rule.engine.api; +import io.netty.channel.EventLoopGroup; import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.RuleNodeId; import org.thingsboard.server.common.data.id.TenantId; @@ -105,4 +106,7 @@ public interface TbContext { String getNodeId(); RuleChainTransactionService getRuleChainTransactionService(); + + EventLoopGroup getSharedEventLoop(); + } diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/mqtt/TbMqttNode.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/mqtt/TbMqttNode.java index 3ffa910802..dd17414b87 100644 --- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/mqtt/TbMqttNode.java +++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/mqtt/TbMqttNode.java @@ -59,15 +59,13 @@ public class TbMqttNode implements TbNode { private TbMqttNodeConfiguration config; - private EventLoopGroup eventLoopGroup; private MqttClient mqttClient; @Override public void init(TbContext ctx, TbNodeConfiguration configuration) throws TbNodeException { try { this.config = TbNodeUtils.convert(configuration, TbMqttNodeConfiguration.class); - this.eventLoopGroup = new NioEventLoopGroup(); - this.mqttClient = initClient(); + this.mqttClient = initClient(ctx); } catch (Exception e) { throw new TbNodeException(e); } @@ -99,12 +97,9 @@ public class TbMqttNode implements TbNode { if (this.mqttClient != null) { this.mqttClient.disconnect(); } - if (this.eventLoopGroup != null) { - this.eventLoopGroup.shutdownGracefully(0, 5, TimeUnit.SECONDS); - } } - private MqttClient initClient() throws Exception { + private MqttClient initClient(TbContext ctx) throws Exception { Optional sslContextOpt = initSslContext(); MqttClientConfig config = sslContextOpt.isPresent() ? new MqttClientConfig(sslContextOpt.get()) : new MqttClientConfig(); if (!StringUtils.isEmpty(this.config.getClientId())) { @@ -113,7 +108,7 @@ public class TbMqttNode implements TbNode { config.setCleanSession(this.config.isCleanSession()); this.config.getCredentials().configure(config); MqttClient client = MqttClient.create(config, null); - client.setEventLoop(this.eventLoopGroup); + client.setEventLoop(ctx.getSharedEventLoop()); Future connectFuture = client.connect(this.config.getHost(), this.config.getPort()); MqttConnectResult result; try { diff --git a/ui/package-lock.json b/ui/package-lock.json index 30fd603198..9b8224e0ff 100644 --- a/ui/package-lock.json +++ b/ui/package-lock.json @@ -1,6 +1,6 @@ { "name": "thingsboard", - "version": "2.3.0", + "version": "2.3.1", "lockfileVersion": 1, "requires": true, "dependencies": {